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 相关文章推荐
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
javascript几个易错点记录
Nov 26 Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 Javascript
15款最好的Bootstrap在线编辑器
Aug 03 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 Javascript
Node错误处理笔记之挖坑系列教程
Jun 05 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
JavaScript生成随机验证码代码实例
Sep 28 Javascript
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
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
如何开始收听短波广播
2021/03/01 无线电
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
基于Bootstrap表单验证功能
2017/11/17 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Python json读写方式和字典相互转化
2020/04/18 Python
python 画条形图(柱状图)实例
2020/04/24 Python
浅谈django channels 路由误导
2020/05/28 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
童装店创业计划书
2014/01/09 职场文书
写给老师的表扬信
2014/01/21 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
土地转让协议书范本
2014/04/15 职场文书
小学班级口号
2014/06/09 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Nginx的基本概念和原理
2022/03/21 Servers
详解Python中*args和**kwargs的使用
2022/04/07 Python