关于盒子模型
CSS盒子模型,是在网页设计中经常使用到的CSS技术,也是一种开发的思维模型。
目前主流的浏览器对于盒子模型的标准阐释和渲染效果有所不同,Google Chrome 等所使用的是标准盒子模型
,而 IE 使用的则是“非标准”盒子模型,下面以IE盒子模型
来称。
标准盒子模型
标准盒子模型以W3C标准的盒子模型为例:
CSS盒子模型规定了元素框处理元素内容(Content)
、内边距(Padding)
、边框(Border)
和 外边距(Margin)
的方式。
由上图可知,盒子的宽度(Width)为 内容区宽度(Content-Width),高度则为 内容区高度(Content-Height)。
IE盒子模型
然而 IE 的盒子模型跟上面不同,以 IE 6 为例:
由上图可知,此时盒子的宽度变为整个容器的宽度,即内容、内边距、边框、外边距四者加起来的宽度,而高度也为其四者的高度之和。
关于浏览器兼容性
W3C指出,一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容。然而 IE 5 和 6 的呈现却是不正确的。根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的。不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型。这些浏览器的 width 属性不是内容的宽度,而是内容、内边距和边框的宽度的总和。
虽然有方法解决这个问题。但是目前最好的解决方案是回避这个问题。也就是,不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素和子元素。
选择W3C还是IE标准
其实两者各有好处和短处,各方的看法也各不相同。无论如何,只有在合适的环境下采用合适的渲染方式,才能有利于页面的基础开发。
避免触发IE盒模型:
使用<!DOCTYPE html>
声明,让IE采用W3C盒子模型。
选择采用IE标准:
通过CSS的 box-sizing
属性来指明。其有两个可选值,一个是默认的 content-box
,另一个是 border-box
。如果选用后者,盒子模型则将按 IE标准进行处理。