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的parseInt 取整使用
May 09 Javascript
jQuery基本过滤选择器使用介绍
Apr 18 Javascript
jQuery中获取Radio元素值的方法
Jul 02 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
May 30 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
js推箱子小游戏步骤代码解析
Jan 10 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
小程序清理本地缓存的方法
Aug 17 Javascript
vue实现简单全选和反选功能
Sep 15 Javascript
如何在Express4.x中愉快地使用async的方法
Nov 18 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
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
PHP实现懒加载的方法
2015/03/07 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
JS检测图片大小的实例
2013/08/21 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python发送邮件功能实现代码
2016/07/15 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
C#实现启动一个进程
2016/10/01 面试题
护理学专业推荐信
2013/12/03 职场文书
小学二年级评语
2014/04/21 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
初中生活随笔
2015/08/15 职场文书
民事纠纷协议书
2016/03/23 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
导游词之山东红叶谷
2019/10/31 职场文书