[一天学一个CSS3属性]之一:box-sizing

王朝学院·作者佚名  2016-05-24
窄屏简体版  字體: 小  |  中  |  大  |  超大  

[一天学一个CSS3属性]之一:box-sizingbox-sizing用于改变CSS盒子模型,从而改变元素宽高的计算方式。

box-sizing取值如下:

box-sizing: content-box | padding-box | border-box

默认值是content-box,对应CSS2.1规范中标准的盒子模型计算方式,即width和height是内容区的宽与高, 不包括边框,内边距,外边距;

padding-box根据MDN的说法,目前还是一个实验性的属性,width和height包括内容区和内边距,不包括边框和外边据;

border-box包括内边距与边框,不包括外边距。这是IE 怪异模式(Quirks mode)使用的 盒模型 。

例子(摘自MDN)1 /* support Firefox, WebKit, Opera and IE8+ */2 3 .example {4 -moz-box-sizing: border-box;5 box-sizing: border-box;6 }

对JS的影响根据MDN的叙述:

由window.getComputedStyle 获取height时不会考虑box-sizing, 至少 Firefox 18 (bug 520992) 与 Internet Explorer 9 是这样, 不过Chrome 24 不是(其它浏览器未测试). 注意 IE9 currentStyle 不能返回正确的height值。

关于Firefox 18及IE9之后的版本,我还没有测试。

关于jQuery中.width()和.height()的返回值jQuery 1.8 版本之后增加了对box-sizing的支持,但这还与浏览器是否支持box-sizing有关,简而言之,1.8版本之后,.width()和.height()返回的永远都是内容区的宽和高,见如下代码:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <style type="text/css"> #container { -moz-box-sizing: border-box; box-sizing: border-box; width: 500px; padding: 5px; border: 5px solid gold; } </style> <script src="js/jquery-1.8.0.js"></script> </head> <body> <div id="container"></div> <script> var $el = $('#container') var w = $el.width(); console.log(w) </script> </body> </html>

各浏览器打印结果如下

IE6/7 : 500IE8/9/10: 480Safari5/6: 480Chrome21/Firefox14: 480IE6/7不支持box-sizing,内容区的宽度是500,所以输出的值也是500,而其他支持该属性的浏览器,内容区宽度减去了padding和border的值,变成了480.

另:jquery中的.outerWidth()和.outerHeight()方法不受影响。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航