關於box-sizing屬性


寫在前面

文中錯誤或不足之處歡迎指正批評,共同交流!

在項目中寫css組件時遇到一個問題:

要求兩個按鈕均分其父元素寬度,且父元素寬度不固定,像這樣:

第一反應很自然的想到使用flex布局,但是由於需要兼容ie9以上,以及安卓微信端那個x5瀏覽器,加之只有兩個按鈕布局相對簡單,所以選擇了浮動的方法:

<div class="mask">
  <div class="confirm">
    <div class="confirm-text">提示信息</div>
    <div class="confirm-btn confirm-btn-sure">確定</div>
    <div class="confirm-btn">取消</div>
  </div>
</div>
.mask{
    ...
}
.confirm{
    ...
}
.confirm-text{
    ...
    clear: both;
}
.confirm-btn{
    float: left;
    width: 50%;
    ...
}

但是問題就來了,再給一個按鈕加一條側邊的邊框,那么就分行顯示了。如果每個按鈕寬度只給到49%甚至49.5%倒是可以解決這個問題,但如果點擊改變背景顏色的時候還是能被發現,而且非常丑,這個時候就可以使用box-sizing: border-box;使元素邊框的寬度包含在元素本身寬度內,這樣問題就解決了:

.confirm-btn{
    box-sizing: border-box;
    float: left;
    width: 50%;
    ...
}
.confirm-btn:active{
    background: rgb(235,235,235);
}
.confirm-btn-sure{
    border-right: 1px solid rgb(235,235,235);
}

下面就來說一說box-sizing這個屬性。

box-sizing屬性

box,如大家所熟知的,是css布局中最小的單位,所有的布局都是由一個一個矩形的box搭建出來的,就很像是搭積木那樣。而每一個box都會由四部分組成,包括:content,padding,border,margin。那么box的高寬是如何計算的呢?css中有一個屬性叫box-sizing,該屬性取不同的值會決定box高寬不同的計算方式。

先來說說兼容性,目前測試IE9以上版本以及其他現代瀏覽器都兼容這個屬性。

這個屬性有三個可取值,分別是:content-box,padding-box,border-box,默認值為content-box,但是padding-box的兼容性似乎存在問題,最新版chrome和safari也不能生效,故本文中暫時不做討論。

1.content-box(默認值)

 這也就是最常規的計算方式,某個box的高等於它的height+padding+border+margin,寬也是同理,以下不再贅述。

2.border-box

當取值為border-box時,這個box的高就等於它的height+margin了,也就是說該box的height是由content部分的height和padding以及border共同組成的了,換言之,padding和border不再向外延伸,而是往里邊擠。

.border-box{
      box-sizing: border-box;
      width: 200px;
      height: 200px;
      padding: 50px;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM