zoukankan      html  css  js  c++  java
  • [一天学一个CSS3属性]之一:box-sizing

    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() 方法不受影响。

  • 相关阅读:
    Oracle的列操作(增加列,修改列,删除列),包括操作多列
    txt文本怎么去除重复项
    Javascript去掉字符串前后空格
    Js作用域链及变量作用域
    js变量以及其作用域详解
    如何在sqlserver 的函数或存储过程中抛出异常。
    存储过程如何处理异常
    设置VS2010和IE8 调试ATL控件<转>
    YUV图像合成原理<转>
    VS2013 查看程序各个函数的CPU利用率<转>
  • 原文地址:https://www.cnblogs.com/hongxs/p/4142665.html
Copyright © 2011-2022 走看看