5 分鐘搞懂 CSS 盒模型:讓你不再為元素尺寸感到困惑(附互動範例)

更新 發佈

為什麼我設定 300px 寬度的 div,實際上卻是 340px?為什麼按鈕周圍會出現神秘的空間?如果 CSS 間距對你來說像是黑魔法,你絕對不孤單。

我在學習 CSS 的第一個月,完全被元素尺寸搞糊塗了。我設定 width: 200px,但在 DevTools 裡測量卻是 250px。我試著讓一個方塊置中,結果總是稍微偏移。我創建了三張卡片要排成一列,第三張卻莫名其妙地換到下一行。

後來我發現了 CSS 盒模型(Box Model),一切都豁然開朗了。

raw-image

CSS 盒模型是 CSS 布局的基礎——它是控制網頁上每個元素如何佔據空間的核心概念。大多數初學者在 CSS 間距上掙扎,是因為他們不理解這個單一概念。

讀完這篇 5 分鐘指南,你將會理解:

  • CSS 盒子的 4 個組成部分及其作用
  • 為什麼你的元素尺寸不如預期(以及如何修正)
  • 能解決 90% 間距問題的 box-sizing 屬性
  • 初學者常犯的 3 個盒模型錯誤

讓我們一次搞懂 CSS 間距。


什麼是 CSS 盒模型?

你網頁上的每個 HTML 元素都是一個矩形盒子。沒有例外。就連用 border-radius 做出來的圓形,起點也是盒子。而每個盒子都有四個同心區域,決定了它的尺寸和間距:

┌─────────────────────────────────────┐
MARGIN(透明的外距) │
│ ┌───────────────────────────────┐ │
│ │ BORDER(可見的邊框) │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ PADDING(內距空間) │ │ │
│ │ │ ┌─────────────────┐ │ │ │
│ │ │ │ CONTENT │ │ │ │
│ │ │ │ (內容區域) │ │ │ │
│ │ │ └─────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘

四個區域詳解

1. Content Box(內容盒) — 最內層的區域,你的實際內容(文字、圖片、子元素)就在這裡。這是 widthheight 預設控制的部分。

2. Padding(內距) — 內容與邊框之間的空間。Padding 在邊框內側,會套用元素的背景色。用它來給內容留點呼吸空間。

3. Border(邊框) — 包圍內距的可見輪廓。可以是實線、虛線、有顏色、粗細各異。就是你加上 border: 1px solid black 時看到的那條線。

4. Margin(外距) — 邊框外側的空間,完全透明。Margin 把其他元素推開,在元素之間創造間隙。

這裡有個會絆倒初學者的關鍵觀念:預設情況下,widthheight 只控制內容盒,而非元素的總尺寸。

這就是為什麼你的 300px div 加上 padding 和 border 後,實際上不是 300px 寬。


盒模型實戰:真實範例

讓我們建立一個簡單的按鈕,看看盒模型如何運作。

HTML:

<button class="my-button">點我</button>

CSS:

.my-button {
width: 100px;
height: 40px;
padding: 10px 20px;
border: 2px solid #333;
margin: 15px;
background-color: #3498db;
color: white;
}

現在來個小測驗:這個按鈕的實際寬度是多少?

如果你猜 100px,那你的思維還是初學者模式(沒關係,我們都是這樣過來的)。讓我們來計算實際寬度:

  • 內容寬度:100px
  • 左側 padding:20px
  • 右側 padding:20px
  • 左側 border:2px
  • 右側 border:2px
  • 總寬度: 100 + 20 + 20 + 2 + 2 = 144px

按鈕實際上是 144px 寬,而不是 100px。Margin 不會加到元素尺寸裡——它只是把其他元素推開。

💡 **親自試試看:**在 Chrome 或 Firefox 打開這篇文章,右鍵點擊按鈕,選擇「檢查元素」。在 Styles 或 Computed 面板找到盒模型圖表。你會看到每個區域的確切像素值的視覺化呈現。DevTools 是理解盒模型的最佳夥伴。

這就是預設行為,叫做 content-box 尺寸計算方式。也是為什麼剛開始學習時,CSS 間距感覺如此不可預測。


改變遊戲規則的屬性:box-sizing

這是改變我一切的領悟:你可以改變盒模型計算尺寸的方式。

content-box 的問題

預設情況下,所有元素使用 box-sizing: content-box,意思是:

  • widthheight 套用到內容區域
  • Padding 和 border 會加到你指定的尺寸上
  • 每次加 padding 或 border 都要做心算
  • 響應式設計變成計算的惡夢

解決方案:border-box

這是每個專業人士都在用的現代最佳實踐:

/* 套用到所有元素(複製這段到你的每個專案)*/
* {
box-sizing: border-box;
}

使用 box-sizing: border-box 後,行為完全改變:

  • widthheight 現在包含內容 + padding + border
  • 內容區域會自動縮小以容納 padding 和 border
  • 元素的總尺寸正是你指定的數值

前後對比

讓我們實際看看差異:

之前(content-box):

.box {
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* 實際寬度:200 + 40 + 10 = 250px */

之後(border-box):

.box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* 實際寬度:200px(padding 和 border 已包含在內)*/

為什麼這改變了一切

實際的好處非常巨大:

  1. 可預測的尺寸 — 當你設定 width: 300px,元素就真的是 300px 寬
  2. 更簡單的響應式設計 — 百分比會如你預期運作:width: 50% 真的是容器的一半
  3. 更簡單的網格布局 — 不需要計算機就能做出三等分欄位
  4. 更少的布局 bug — 元素不會意外溢出容器

✅ **專業提示:**每個現代 CSS 框架(Bootstrap、Tailwind CSS、Foundation)預設都使用 border-box。如果你還沒用,那就是在讓 CSS 變得比必要還難。

現在就把 * { box-sizing: border-box; } 這行加到你的 CSS 裡。我等你。


3 個常見的盒模型錯誤(以及如何修正)

即使使用 border-box,還是有陷阱在等著初學者。這是我最常看到的三個:

錯誤 #1:設定 100% 寬度又加 Padding

陷阱:

.container {
width: 100%;
padding: 20px; /* 即將溢出!*/
}

**會發生什麼:**即使用 border-box,如果你忘記設定它,這個元素會變成 100% + 40px 寬,產生水平捲軸。

修正方法:

.container {
box-sizing: border-box; /* 別忘了這行 */
width: 100%;
padding: 20px; /* 現在安全了 */
}

或者更好的做法,用 * 選擇器全域設定 border-box


錯誤 #2:忘記 Margin 會折疊

陷阱:

.element1 { margin-bottom: 20px; }
.element2 { margin-top: 30px; }
/* 你預期有 50px 間隙,實際上只有 30px */

會發生什麼:區塊元素之間的垂直 margin 會折疊——較大的 margin 獲勝,它們不會相加。這是 CSS 最令人困惑的怪癖之一。

**修正方法:**只用 margin-bottom 來做垂直間距(不要同時用上下 margin),或使用 Flexbox 的 gap 屬性(不會折疊):

.flex-container {
display: flex;
flex-direction: column;
gap: 20px; /* 乾淨、可預測的間距 */
}

錯誤 #3:用行內樣式設定盒模型屬性

陷阱:

<div style="width: 200px; padding: 20px;">內容</div>

**為什麼不好:**行內樣式無法設定 box-sizing,優先權最高(難以覆蓋),而且讓你的 HTML 變得雜亂。

**修正方法:**使用類別搭配正確的盒模型設定:

.card {
box-sizing: border-box;
width: 200px;
padding: 20px;
}
<div class="card">內容</div>

你的 DevTools 超能力

掌握盒模型最快的方法就是視覺化地看到它。方法如下:

  1. 右鍵點擊這個頁面上的任何元素(或任何網頁)→ 選擇檢查元素
  2. 在 Styles 或 Computed 面板找到盒模型圖表(通常在 Chrome DevTools 的右下角)
  3. 將滑鼠移到圖表的不同區域上

你會看到每個區域用不同顏色直接在頁面上標示出來:

  • 藍色 = content(內容)
  • 綠色 = padding(內距)
  • 黃色/棕色 = border(邊框)
  • 橘色 = margin(外距)

**更棒的是:**點擊 DevTools 圖表裡的數字可以即時編輯它們。加 20px 的 padding?看著元素即時調整大小。這就是培養盒模型直覺的方法——透過實驗。

🎯 **練習:**現在就在這篇文章上打開 DevTools(F12 或 Cmd+Opt+I),檢查三個不同的元素。看看每個元素的盒模型如何變化。花 2 分鐘探索。這會比再讀一篇教學更有價值。


快速參考:必備的盒模型程式碼

把這個章節加入書籤。你會不斷參考它:

/* 步驟 1:永遠要全域設定 border-box */
* {
box-sizing: border-box;
}

/* 步驟 2:使用盒模型屬性 */
.element {
/* 內容尺寸 */
width: 300px;
height: 200px;

/* Padding(內距,有背景色)*/
padding: 20px;

/* Border(可見輪廓)*/
border: 2px solid #333;

/* Margin(外距,透明)*/
margin: 10px;
}

/* 簡寫語法 */
padding: 10px 20px 10px 20px; /* 上、右、下、左 */
padding: 10px 20px; /* 垂直、水平 */
padding: 10px; /* 四邊 */

重點整理

一旦你內化了這些真理,CSS 盒模型就不再神秘:

每個元素都是盒子,有四個區域:content、padding、border、margin

永遠使用 box-sizing: border-box,讓 width 和 height 的行為可預測

使用 DevTools 視覺化盒模型,當有東西看起來不對勁時

小心 margin 折疊,區塊元素之間的垂直 margin 會折疊

Flexbox/Grid 的 gap 屬性比 margin 更乾淨,用來做間距


你的下一步

現在就這樣做,來鞏固這些知識:

  1. * { box-sizing: border-box; } 加到你的 CSS,如果你還沒加的話
  2. 打開 DevTools 檢查 5 個不同元素,在這個頁面或任何網站上
  3. **動手做點東西:**創建一個簡單的卡片元件,包含 content、padding、border 和 margin——看看改變每個區域如何影響布局
  4. 把這篇文章加入書籤,當你對間距感到困惑時,回來看快速參考章節

盒模型是那種一開始看起來很複雜,但透過練習會變成第二天性的概念。一旦你「懂了」,CSS 布局就不再像猜謎,而是變成你能精準控制的工具。

準備好更上一層樓了嗎?現在你理解了個別元素如何佔據空間,你已經準備好學習 Flexbox 和 Grid 了——這些現代布局系統讓你能將多個元素排列成精緻的設計。這些工具建立在你剛學到的盒模型基礎之上。


**你對盒模型的最大「恍然大悟」時刻是什麼?**在留言區告訴我——我會讀每一則留言並回覆。如果這篇指南對你有幫助,請按個讚 👏 讓更多初學者能找到它。

讓我們一起揭開 CSS 的神秘面紗,一次一個概念。🚀

#CSS #盒模型 #前端開發 #網頁設計 #程式教學 #初學者指南 #CSS教學 #前端入門 #響應式設計 #box-sizing

留言
avatar-img
留言分享你的想法!
avatar-img
Leon Wong 282
3會員
23內容數
Hi,我是 Leon Wong(亮之)——電腦科學與開發愛好者,也是 Notion 重度使用者。如果你想更高效地學習與創作,這裡會是你的實用資源。
Leon Wong 282的其他內容
2025/10/28
還在糾結該先學 Flexbox 還是 Grid?本文透過視覺化圖解和實戰範例,解釋兩者的根本差異(一維 vs 二維),提供清楚的決策框架和學習路徑。包含導覽列、照片畫廊、卡片網格等完整程式碼範例,讓初學者不再困惑,學會在正確的場景使用正確的工具。
Thumbnail
2025/10/28
還在糾結該先學 Flexbox 還是 Grid?本文透過視覺化圖解和實戰範例,解釋兩者的根本差異(一維 vs 二維),提供清楚的決策框架和學習路徑。包含導覽列、照片畫廊、卡片網格等完整程式碼範例,讓初學者不再困惑,學會在正確的場景使用正確的工具。
Thumbnail
2025/10/28
別再什麼都用 div 了。學會這 5 個 HTML 語意標籤,讓你的程式碼在短短兩週內變得無障礙、SEO 友善且易於維護。包含實際範例和前後對比。
Thumbnail
2025/10/28
別再什麼都用 div 了。學會這 5 個 HTML 語意標籤,讓你的程式碼在短短兩週內變得無障礙、SEO 友善且易於維護。包含實際範例和前後對比。
Thumbnail
2025/10/26
SQL 的 AVG() 函數在設計上會排除 NULL 值——導致初學者得到技術上正確但業務上錯誤的結果。本文深入解析 AVG() 如何處理 NULL、三個實用解決方案(COALESCE、WHERE、CASE),以及一個決策框架來為你的數據分析選擇正確的方法。
Thumbnail
2025/10/26
SQL 的 AVG() 函數在設計上會排除 NULL 值——導致初學者得到技術上正確但業務上錯誤的結果。本文深入解析 AVG() 如何處理 NULL、三個實用解決方案(COALESCE、WHERE、CASE),以及一個決策框架來為你的數據分析選擇正確的方法。
Thumbnail
看更多
你可能也想看
Thumbnail
不是每個人都適合自己操盤,懂得利用「專業」,才是績效拉開差距的開始
Thumbnail
不是每個人都適合自己操盤,懂得利用「專業」,才是績效拉開差距的開始
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
本章介紹了 CSS 中的顏色和背景屬性,包括文本顏色的設置方法、背景顏色和背景圖片的應用、背景重複和位置的配置,以及線性漸變和徑向漸變的使用。這些知識將幫助你更靈活地設計和美化網頁。
Thumbnail
本章介紹了 CSS 中的顏色和背景屬性,包括文本顏色的設置方法、背景顏色和背景圖片的應用、背景重複和位置的配置,以及線性漸變和徑向漸變的使用。這些知識將幫助你更靈活地設計和美化網頁。
Thumbnail
排版微系列調專門分享如何透過一些調整讓設計與排版更好看,並且每張設計都會說明為何調整的原因,以及原本設計可能有的問題。 如果你是設計初學者那這份內容會很適合你,因為會很細節的去講解排版原因,如果你看完喜歡,我每月會有三篇微調詳解固定分享給訂閱會員,歡迎訂閱。
Thumbnail
排版微系列調專門分享如何透過一些調整讓設計與排版更好看,並且每張設計都會說明為何調整的原因,以及原本設計可能有的問題。 如果你是設計初學者那這份內容會很適合你,因為會很細節的去講解排版原因,如果你看完喜歡,我每月會有三篇微調詳解固定分享給訂閱會員,歡迎訂閱。
Thumbnail
CSS入門-Day3 的主要內容包括字體大小、字體顏色、字體系列、字體樣式、字體粗細等屬性。此外,還涵蓋了文本對齊、行高、文字間距、單詞間距和文本裝飾。最後,介紹了如何引入和使用 Google 字體,以提高網頁的排版效果。
Thumbnail
CSS入門-Day3 的主要內容包括字體大小、字體顏色、字體系列、字體樣式、字體粗細等屬性。此外,還涵蓋了文本對齊、行高、文字間距、單詞間距和文本裝飾。最後,介紹了如何引入和使用 Google 字體,以提高網頁的排版效果。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News