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 相关文章推荐
prototype与jquery下Ajax实现的差别
Sep 13 Javascript
JavaScript CSS修改学习第一章 查找位置
Feb 19 Javascript
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
jQuery函数的等价原生函数代码示例
May 27 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
Jun 26 Javascript
jQuery中parent()方法用法实例
Jan 07 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
Apr 02 Javascript
javascript实现QQ空间相册展示源码
Dec 12 Javascript
Vue一个案例引发的递归组件的使用详解
Nov 15 Javascript
jQuery实现简单三级联动效果
Sep 05 jQuery
解决vue prop传值default属性如何使用,为何不生效的问题
Sep 21 Javascript
详解Vue的options
May 15 Vue.js
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
54个提高PHP程序运行效率的方法
2015/07/19 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Python之修改图片像素值的方法
2019/07/03 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
公务员个人自我评价分享
2013/11/06 职场文书
单位创先争优活动方案
2014/01/26 职场文书
个人求职信范文
2014/05/24 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
惊天动地观后感
2015/06/10 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
Redis如何实现分布式锁
2021/08/23 Redis