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

更新 發佈

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

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

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

vocus|新世代的創作平台

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
Leon Wong 282
9會員
25內容數
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
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
在學習 CSS 的過程中,Padding 與 Margin 是兩個經常出現的名詞,但對於初學者來說,可能會有些難以理解。因此,本篇文章將解釋這兩個非常重要的 CSS 屬性。當你掌握後,便能設計出更具層次或易讀的網頁。
Thumbnail
在學習 CSS 的過程中,Padding 與 Margin 是兩個經常出現的名詞,但對於初學者來說,可能會有些難以理解。因此,本篇文章將解釋這兩個非常重要的 CSS 屬性。當你掌握後,便能設計出更具層次或易讀的網頁。
Thumbnail
本章介紹了 CSS 中的顏色和背景屬性,包括文本顏色的設置方法、背景顏色和背景圖片的應用、背景重複和位置的配置,以及線性漸變和徑向漸變的使用。這些知識將幫助你更靈活地設計和美化網頁。
Thumbnail
本章介紹了 CSS 中的顏色和背景屬性,包括文本顏色的設置方法、背景顏色和背景圖片的應用、背景重複和位置的配置,以及線性漸變和徑向漸變的使用。這些知識將幫助你更靈活地設計和美化網頁。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
CSS入門-Day3 的主要內容包括字體大小、字體顏色、字體系列、字體樣式、字體粗細等屬性。此外,還涵蓋了文本對齊、行高、文字間距、單詞間距和文本裝飾。最後,介紹了如何引入和使用 Google 字體,以提高網頁的排版效果。
Thumbnail
CSS入門-Day3 的主要內容包括字體大小、字體顏色、字體系列、字體樣式、字體粗細等屬性。此外,還涵蓋了文本對齊、行高、文字間距、單詞間距和文本裝飾。最後,介紹了如何引入和使用 Google 字體,以提高網頁的排版效果。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News