在页面代码编写的过程中,box model一直是很重要的一块,理解好这块写起代码来也是水到渠成。box-sizing是CSS3的box属性之一。那么作为box的属性之一,它当然遵循css的box model原理,为了更好的理解box-sizing,先行了解box model也不无必要。
CSS中box model分为两种,第一种是W3C的标准模型,另一种是IE的传统模型,相同之处在于都是对元素计算尺寸的模型,包含width,height,padding,border,margin以及实际尺寸的计算关系;不同之处嘛,下面详细为你介绍:
W3C的标准Box Model
|
|
IE下的传统Box Model(IE6以下,不含IE6版本或“QuirksMode下IE5.5+”)。
|
|
可能上面的内容会让你感觉很懵逼,这样举个例子,可能你马上就能get到了:
在chrome浏览器下,你会发现效果如下图:
box model
- 紫色区域就是我们width+height定义出来的content区域,
- 红色区域就是我们padding定义出来的内边距,
- 绿色区域就是我们padding定义出来的边框,
- 绿色边框距离页面边框的距离就是我们padding定义出来的外边距,
这里注意:
所有的边距和边框都不会影响我们定义content的大小,而是以附加的形式来增大我们的整个box的大小。
在IE5下面(用box-sizing:border-box模仿),则是这样的:
box model
- 紫色区域就是我们width*height-padding-border定义出来的content区域(注意),
- 红色区域就是我们padding定义出来的内边距,
- 绿色区域就是我们padding定义出来的边框,
- 绿色边框距离上一个box的距离就是我们padding定义出来的外边距,
不难看出,其实差别就在于content的区域块,ie的传统model中由width和height定义的不再是content区域块了,而是padding+border+content组成的块,那么我们添加padding或者border都只会在这个区域块上划分,而不是在width*height区域的基础上向外扩张,个人感觉这更符合人的思维,这样我们写页面的时候就不需要考虑太多其他的事情,只需要着眼于当前的区域,不用太过担心牵一发而动全身。
很明显,content-box即content区域=widhtheight;而border-box即content区域=widthheight-padding-border,理解好这点就没问题了。
如何再box model模式间切换
box-sizing现代浏览器都支持,但IE家族只有IE8版本以上才支持,虽然现代浏览器支持box-sizing,但有些浏览器还是需要加上自己的前缀,Mozilla需要加上-moz-,Webkit内核需要加上-webkit-,Presto内核-o-,IE8-ms-,所以box-sizing兼容浏览器时需要加上各自的前缀。
|
|