Heim >Web-Frontend >HTML-Tutorial >[一天学一个CSS3属性]之一:box-sizing_html/css_WEB-ITnose

[一天学一个CSS3属性]之一:box-sizing_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:52:481042Durchsuche

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

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

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn