2023-06-28|閱讀時間 ‧ 約 6 分鐘

CSS 習作|Box Sizing 盒模型計算方式

The CSS box-sizing property allows us to include the padding and border in an element's total width and height.
box-sizing 是 CSS 屬性的一種,它使我們可以 改變盒模型的計算方式。 而 box-sizing 可以使用的值有以下:
  • box-sizing: content-box; ( width、height 設定作用在 content-box )
  • box-sizing: border-box; ( width、height 設定作用在 content-box + padding-box + border-box )

Box-model 盒模型

預設情況下,元素的寬度和高度計算如下:
元素的實際寬度 = width + padding + border 元素的實際高度 = height + padding + border 拆解來看,一個元素的盒模型會由以下所構成,由內而外分別是:
Box-model
  • 藍色 content-box
  • 綠色 padding-box
  • 橘黃 border-box
  • 橘色 margin-box

通常預設為:box-sizing:content-box

一般來說盒模型的計算方式會 預設為 box-sizing: content-box;,當我們為一個元素設定 width、height 時,寬高的設定作用僅在 content-box 範圍。 以下列程式碼為例: width 500px 的作用範圍僅在 content-box 區塊。
*{ 
 box-sizing: content-box;
}
.box{
  width: 500px;
  height: 500px;
  background: #95B5BF;
  padding: 60px;
  border: 30px solid #F8DDA4;
  margin: 30px;
  font-size: 20px;
}
而元素實際大小因為有 padding 和 border 而被撐出寬高,變成 680px,若加上 margin,則元素在畫面中所佔面積為 740px,如下圖:
width 的作用範圍

box-sizing:content-box 的計算方式

藍色的 content-box 是指 width 的寬度, width 作用範圍僅在 content-box。 因此,若我們對一個元素設定 width: 500px;,如在裡面放入文字,當文字數量累積超過寬度 500px 時就會換行繼續新增,計算方式參照下圖:
box-sizing: content-box

box-sizing:border-box 的計算方式

border-box 的 width 作用範圍為 content-box、padding-box、border-box。 可以發現在 box-sizing:border-box 下, content-box 變為 320px*320px,padding 和 border 的寬度也被內推算進 500px 裡面了。 其中需要注意,box-sizing:border-box 下的內堆變化,並不是縮減 padding 和 border 來使其符合寬度 width 500px,而是 content-box 裡的寬度被推擠而變為 320px*320px,而裡面的文字寬度也保持為 20px。 若加上 margin,則元素在畫面中所佔面積為 560px*560px。
box-sizing: border-box

在畫面上的差異

可以看到在 box-sizing:border-box 下,一行文字的數量變少了,而產生這樣的變化是因為盒模型的計算方式被改變使得被內推,此時 content-box 的文字內容寬度為:一個字 20px* 一行 16個字= 20px*16 = 320px
同樣的 width 寬度,在不同 box-sizing 設置下變化很大

問題紀錄:誤區測試與釐清

  1. box-sizing:border-box 下,如果 padding、border 的數值大於 width 時會發生什麼?
  2. 什麼樣的情況下,會使在 box-sizing:border-box 下仍然破版、跑版?
  3. box-sizing:border-box 下,如何伸縮自如的掌握自己設計的每個元件尺寸

本篇參考學習資源

小結

box-sizing 的觀念看似沒有很複雜,但是暗藏很多玄機,常常在實作中覺得畫面不如預期,希望透過本次習作筆記,加深瞭解其運作原理。
Practice make perfect, 我是正在自我習作中的 Draw,我們下篇見 🙇🏻
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.