Skip to content

CSS 區塊模型 box model:元素尺寸怎麼算

CSS 區塊模型:content、padding、border 與 margin

CSS 排版的核心概念之一。每個 HTML 元素都可以被視為一個獨立的區塊模型,這個模型由四個部分組成,從內到外分別是:contentpaddingbordermargin

區塊模型結構

  • content: 顯示元素實際內容的區域,例如:文字、圖片等。可用 widthheight 屬性設定其大小。
  • padding: 內容區與邊框之間的空間。
  • border: 邊框。邊框為內、外距的分界。
  • margin: 外距、邊界。邊框以外與其他元素之間的空間。

視覺化示意圖

+-------------------------------+
|           margin              |
|  +-------------------------+  |
|  |        border           |  |
|  |  +-------------------+  |  |
|  |  |     padding       |  |  |
|  |  |  +------------+   |  |  |
|  |  |  |  content   |   |  |  |
|  |  |  +------------+   |  |  |
|  |  +-------------------+  |  |
|  +-------------------------+  |
+-------------------------------+

區塊模型的計算方式

  • 寬度: content 的寬度。
  • 高度: content 的高度。
  • 總寬度: width + padding-left + padding-right + border-left + border-right + margin-left + margin-right。
  • 總高度 = height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom。

box-sizing

重新定義元素寬、高的顯示方式。

  • content-box: widthheight 只包含內容區,不包含 padding 和 border。
  • border-box: widthheight 包含內容區、padding 和 border。

總結

  • 區塊模型是 CSS 排版的基礎。
  • 熟悉各層的作用與計算方式,有助於精確控制元素的大小與間距。
  • 建議在專案中統一使用 box-sizing: border-box;,方便維護與預測元素尺寸。

全站改用 border-box

css
*,
*::before,
*::after {
  box-sizing: border-box;
}

這是絕大多數 樣式重置 的標準起手式,尺寸從此好預測:設定 200px 就是佔 200px。

行內元素的例外

行內元素的 上下外距與寬高不會生效,只有左右方向有效。需要完整盒模型時,請把 display 改成 inline-blockblock

常見問題

為什麼元素比我設定的還寬?

預設的計算方式下,內距與框線是加在設定的寬度之外的。把 box-sizing 設成 border-box 之後,寬度就會包含它們。

border-box 要怎麼全站套用?

在樣式表最前面用 通用選取器 連同兩個偽元素一起設定即可,這也是絕大多數重置樣式的標準寫法。

margin 和 padding 的空間有什麼不同?

padding 在框線以內,會被背景色蓋到;margin 在框線以外,永遠是透明的,而且垂直方向還可能發生 邊界重疊

行內元素的盒模型一樣嗎?

不完全一樣。行內元素的上下外距與寬高不會生效,只有左右方向有效。需要完整盒模型請改成 inline-blockblock

延伸閱讀