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 相关文章推荐
jQuery选择没有colspan属性的td的代码
Jul 06 Javascript
基于jQuery的前端数据通用验证库
Aug 08 Javascript
Ext JS添加子组件的误区探讨
Jun 28 Javascript
jquery cookie的用法总结
Nov 18 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
vue-dialog的弹出层组件
May 25 Javascript
详解a++和++a的区别
Aug 30 Javascript
BootStrap实现文件上传并带有进度条效果
Sep 11 Javascript
vue动态设置页面title的方法实例
Aug 23 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
Python程序设计入门(2)变量类型简介
2014/06/16 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
python for和else语句趣谈
2019/07/02 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
求职信写作要突出重点
2014/01/01 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
整改报告格式
2014/11/06 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
党员个人自我评价
2015/03/03 职场文书
销售督导岗位职责
2015/04/10 职场文书
退税申请报告怎么写
2015/05/18 职场文书
《确定位置》教学反思
2016/02/18 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书