Span元素的width属性无效果原因及解决方案


Posted in Javascript onJanuary 15, 2010

先运行下程序看下:
<span style='background-color:#336699;width:300px;'>123</span>

输出:123

可以看到 span会自动根据包含的内容来变化宽度

这是因为:对于内联元素(可以是默认即为内联的比如 span 元素,也可以是 display: inline 的元素)
width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。
zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

具有“layout” 的元素如果同时也 display: inline ,那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。

解决方法:

<1>去掉ASP.NET页面的W3C标准声明(不推荐):
去掉:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<span style='background-color:#336699;width:300px;'>123</span>

<2>推荐:

如果设置display:block,width属性生效,但是此时的span跟div一样了。
如果设置display:inline-block,则span并列在同行,而且width属性生效。

元素display属性的常见值说明:

block:块对象的默认值。将对象强制作为块对象呈递,为对象之后添加新行。
inline:内联对象的默认值。将对象强制作为内联对象呈递,从对象中删除行。(内联)

《CSS权威指南》中文字显示:任何不是块级元素的可见元素都是内联元素。其表现的特性是“行布局”形式,

这里的“行布局”的意思就是说其表现形式始终以行进行显示。

比如,我们设定一个内联元素border-bottom:1px solid #000;时其表现是以每行进行重复,每一行下方都会有一条黑色的细线。

假如是块级元素那么所显示的的黑线只会在块的下方出现。
inline-block:将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内。
non:隐藏对象。与 visibility 属性的hidden值不同,其不为被隐藏的对象保留其物理空间。

内联(display:inline;)元素不能设置宽高,因为内联属于行布局,其特性是在一行里进行布局,所以不能被设定宽高。
<span style='background-color:#336699;width:300px;display:inline-block;'>123</span>

输出:123

<3>如果设置float:left | right,width属性生效.

(浮动)他使得指定元素脱离普通的文档流而产生的非凡的布局特性。并且FLOAT必需应用在块级元素之上,也就是说浮动并不应用于内联标签。或者换句话来说当应用了FLOAT那么这个元素将被指定为块级元素。
<span style='background-color:#336699;width:300px;float:left;'>123</span>

输出:123

Javascript 相关文章推荐
根据一段代码浅谈Javascript闭包
Dec 14 Javascript
js自执行函数的几种不同写法的比较
Aug 16 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
Sep 01 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
jQuery动态生成表格及右键菜单功能示例
Jan 13 Javascript
js操作浏览器的参数方法
Jan 21 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
微信小程序封装多张图片上传api代码实例
Dec 30 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 Javascript
javascript实现的基于金山词霸网络翻译的代码
Jan 15 #Javascript
JQuery 引发两次$(document.ready)事件
Jan 15 #Javascript
用jQuery扩展自写的 UI导航
Jan 13 #Javascript
jQuery的一些特性和用法整理小结
Jan 13 #Javascript
JavaScript关于select的相关操作说明
Jan 13 #Javascript
海量经典的jQuery插件集合
Jan 12 #Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
Jan 12 #Javascript
You might like
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
PHP之header函数详解
2021/03/02 PHP
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
详解参数传递四种形式
2015/07/21 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
vue路由中前进后退的一些事儿
2019/05/18 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python机器学习之神经网络实现
2018/10/13 Python
PyTorch实现AlexNet示例
2020/01/14 Python
python中time tzset()函数实例用法
2021/02/18 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
Linux的文件类型
2016/07/05 面试题
建筑设计师岗位职责
2013/11/18 职场文书
自我评价怎么写正确呢?
2013/12/02 职场文书
公司中秋节活动方案
2014/02/12 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
教书育人演讲稿
2014/09/11 职场文书
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技