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仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
理解javascript封装
Feb 23 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
May 12 Javascript
vue2.0开发实践总结之入门篇
Dec 06 Javascript
Angularjs自定义指令Directive详解
May 27 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
详解vue 组件之间使用eventbus传值
Oct 25 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
Jun 05 jQuery
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
Sep 16 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
php实现telnet功能示例
2014/04/08 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP引用返回用法示例
2016/05/28 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
python在每个字符后添加空格的实例
2018/05/07 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
python openCV自制绘画板
2020/10/27 Python
匡威英国官网:Converse英国
2018/12/02 全球购物
求职自荐信的格式
2014/04/07 职场文书
《四季》教学反思
2014/04/08 职场文书
营销计划书
2015/01/17 职场文书
看雷锋电影观后感
2015/06/10 职场文书
运动会新闻报道稿
2015/07/22 职场文书
关于做家务的心得体会
2016/01/23 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技