box-sizing可以声明计算元素高宽的 CSS 盒模型。它有content-box、border-box和inherit三种取值。其中border-box是 css3 新增,也是主流 UI 框架的全局默认属性。
两种盒模型
content-box
默认值,也是 css2.1 中的盒子模型。在计算width和height时候,不计算border、padding和margin。高度、宽度都只是内容高度。
border-box
css3新增。 width和height属性包括内容,内边距和边框,但不包括外边距。
它的计算公式是:
- width = border + padding + 内容宽度
- height = border + padding + 内容高度
为什么不计算margin
从上面可以知道,即时是border-box也是不计算margin,只是多余计算了border和padding。因为border和padding都是盒子模型的一部分,但是margin标记的是盒子和盒子的间距。所以,**border-box的计算方法更符合box-sizing**的语义。
问题来了,如果有时候一定要设置margin,怎么做到自由控制来保证兼容?例如,我们下面要设置一个撑满页面的盒子元素,而且有外边距干扰,怎么做?
实际应用
根据项目中的使用经验和 w3c 的建议,推荐box-sizing属性设置为border-box。在样式表文件中添加以下代码:
1 | * { |
除了通用代码,border-box还可以配合 css3 中的四则运算符calc来使用,来实现对 margin 的控制。
代码如下:
1 |
|