Flexbox vs Grid:先學哪一個?CSS 布局完全指南(附視覺化範例)

更新 發佈閱讀 13 分鐘

當我開始學習 CSS 布局時,每個人都告訴我要學 Flexbox。然後又有人說 Grid 才是未來。接著另一個教學堅持我必須先掌握兩者才能開始做任何實際的東西。

我完全被選擇困住了。我該學哪一個?會不會浪費時間學錯的?它們到底有什麼不同?

然後我發現了一件改變一切的事:Flexbox 和 Grid 不是競爭對手——它們是為完全不同的工作而設計的。一旦我理解了它們的根本差異,困惑就消失了。

vocus|新世代的創作平台

在這篇文章結束時,你會確切知道該先學哪一個、何時使用哪一個,以及如何避免在錯誤的選擇上浪費時間。Flexbox vs Grid 的爭論不是關於哪個更好——而是理解它們各自的優勢。


一維 vs 二維:理解一切的關鍵

這是能省下數小時挫折的突破點:

Flexbox 用於一維布局。你在一個方向上排列項目——行或列。不能同時控制兩者。

Grid 用於二維布局。你同時在行和列上排列項目。

就是這樣。這就是根本的差異。

這個區別很重要,因為初學者經常試圖用 Grid 來做簡單的導覽列(過度複雜)或用 Flexbox 做複雜的照片畫廊(痛苦的權宜之計)。

💡 黃金法則:如果你要在單一方向上排列項目(行或列),使用 Flexbox。如果你需要同時控制行和列,使用 Grid。

它們不會互相取代。它們是合作關係。專業網站兩者都用——Grid 用於整體頁面結構,Flexbox 用於每個區塊內的內容排列。

現在你理解了根本差異,讓我們深入了解每個系統。


Flexbox:你的單向布局首選

Flexbox 擅長項目在單一方向流動的一維布局。

Flexbox 最適合的場景

  • 導覽列和選單 - 項目排成一行
  • 按鈕群組和工具列 - 對齊的按鈕與間距
  • 簡單的卡片布局 - 卡片排成一行,可以換行
  • 置中項目 - 最簡單的置中方式
  • 分配空間 - 項目之間的自動間距
  • 響應式尺寸 - 項目可以增長和縮小

必學的 Flexbox 屬性

你會經常使用的屬性:

.flex-container {
display: flex;

/* 方向:row 或 column */
flex-direction: row;

/* 主軸對齊(如果是 row,則為水平) */
justify-content: space-between;

/* 交叉軸對齊(如果是 row,則為垂直) */
align-items: center;

/* 允許換行 */
flex-wrap: wrap;

/* 項目間距(現代做法,比 margin 更乾淨) */
gap: 1rem;
}

對於 flex 項目:

.flex-item {
/* 增長以填滿可用空間 */
flex: 1;

/* 或:不增長、不縮小、保持 200px */
flex: 0 0 200px;
}

實戰範例:導覽列

這就是為什麼 Flexbox 最適合導覽列:

/* 導覽列:logo 在左,連結在右 */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 2rem;
background: #333;
color: white;
}

.nav-links {
display: flex;
gap: 2rem;
list-style: none;
}

為什麼 Flexbox 在這裡獲勝:

  • 項目自然地排成一行(一維)
  • justify-content: space-between 把 logo 推到左邊,連結推到右邊
  • align-items: center 用一行程式碼就能垂直置中所有內容
  • 不需要複雜的 2D 定位

用 Grid 來做這個會變得不必要的複雜,因為你只需要控制單一一行。


Grid:當你需要行和列

Grid 在你需要同時精確控制兩個維度時表現出色。

Grid 最適合的場景

  • 照片畫廊和圖片網格 - 結構化的行和列
  • 頁面布局 - header、sidebar、主要內容、footer
  • 卡片網格 - 等高的卡片排列在結構化網格中
  • 雜誌風格布局 - 複雜的多欄設計
  • 儀表板 - 小工具排列在行和列中
  • 響應式網格 - 不需要 media query 的自動布局

必學的 Grid 屬性

你會經常使用的屬性:

.grid-container {
display: grid;

/* 定義欄位 */
grid-template-columns: repeat(3, 1fr); /* 3 個相等的欄位 */

/* 或混合固定和彈性 */
grid-template-columns: 200px 1fr 1fr;

/* 定義列 */
grid-template-rows: auto 1fr auto;

/* 儲存格間距 */
gap: 1.5rem;

/* 命名區域(頁面布局很強大) */
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
}

對於 grid 項目:

.grid-item {
/* 跨越多個欄位 */
grid-column: 1 / 3; /* 從線 1 到線 3 */

/* 跨越多個列 */
grid-row: span 2; /* 跨越 2 列 */

/* 或使用命名區域 */
grid-area: header;
}

實戰範例:照片畫廊

這就是為什麼 Grid 最適合畫廊:

/* 響應式照片畫廊 - 不需要 media query! */
.photo-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
}

.photo-gallery img {
width: 100%;
height: 250px;
object-fit: cover;
}

為什麼 Grid 在這裡獲勝:

  • 自動控制行和列
  • auto-fitminmax 創造響應式行為,不需要 media query
  • 預設就是等高項目(不需要 Flexbox 的技巧)
  • 簡潔的程式碼就能做複雜的布局

用 Flexbox 來做這個會很痛苦,因為你需要手動管理列、計算寬度,還要跟對齊問題奮戰。


何時使用哪一個:決策框架

不要再猜了。問這三個問題:

問題 1:「我需要同時控制行和列嗎?」

  • 不需要 → 使用 Flexbox
  • 需要 → 使用 Grid

問題 2:「是內容決定尺寸還是布局決定尺寸?」

  • 內容決定尺寸 → Flexbox(彈性、內容驅動)
  • 布局決定尺寸 → Grid(固定結構)

問題 3:「單一方向上有多少個項目?」

  • 少數項目(3-7)排成一行/列 → Flexbox
  • 許多項目排成結構化網格 → Grid
vocus|新世代的創作平台

實戰範例:結合兩者

大多數專業專案都會同時使用兩者。這是一個常見模式——卡片網格,其中每張卡片都有內部布局:

Grid 用於外部結構:

.card-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}

Flexbox 用於每張卡片內部:

.card {
display: flex;
flex-direction: column;
padding: 1.5rem;
border: 1px solid #ddd;
border-radius: 8px;
}

.card-content {
flex: 1; /* 將頁尾推到底部 */
}

.card-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 1rem;
}

為什麼這個組合有效:

  • Grid 處理整體卡片網格(2D 控制)
  • Flexbox 處理每張卡片的內部布局(1D 堆疊)
  • 每個工具都做它最擅長的事

你不是在它們之間做選擇——你是針對每個工作使用正確的工具。


該先學哪一個?我的答案:Flexbox

在教了幾十位初學者之後,我的建議很明確:先學 Flexbox,然後學 Grid。

為什麼先學 Flexbox?

1. 概念更簡單 - 一個維度比兩個維度更容易視覺化

2. 立即見效 - 你會不斷地用它做元件

3. 學習曲線更平緩 - 要掌握的屬性更少

4. Grid 的基礎 - 理解 flex 有助於 Grid 的對齊屬性

5. 更寬容 - 當出問題時更容易除錯

你的學習時間表

第 1-2 週:掌握 Flexbox

  • 建立導覽列和按鈕群組
  • 熟悉 justify-contentalign-items
  • 練習 5-10 個小專案
  • 專注於單向布局

第 3-4 週:學習 Grid

  • 現在你已經理解布局基礎
  • 建立照片畫廊和頁面布局
  • 練習結合 Flexbox 和 Grid
  • 專注於二維結構

✅ **重要:**不要試圖同時學習兩者。先掌握 Flexbox,然後 Grid 會更有意義,因為你會認識到何時真正需要 2D 控制。


浪費初學者時間的 3 個錯誤

錯誤 1:用 Grid 做所有事

❌ **錯誤:**用 Grid 做簡單的導覽列

✅ **正確:**使用 Flexbox——它更簡單,完美適合單向布局

錯誤 2:不使用 gap

❌ **錯誤:**對個別 flex/grid 項目添加 margin

✅ **正確:**在容器上使用 gap 屬性(更乾淨,更容易維護)

錯誤 3:忘記瀏覽器支援

❌ **錯誤:**假設所有使用者都有最新的瀏覽器

✅ **正確:**Flexbox 和 Grid 在 2025 年都有出色的支援,但仍要檢查 Can I Use 確認你的目標瀏覽器


從這裡開始:你的下一步

Flexbox vs Grid 的爭論不是關於在兩者之間做選擇——而是理解哪個工具適合每項工作。

重點整理:

Flexbox = 一維(行或列)

Grid = 二維(行和列)

學習順序:先 Flexbox,後 Grid

實際專案:大多數網站兩者都用

決策測試:「我需要同時控制行和列嗎?」

  • 是 = Grid
  • 否 = Flexbox

準備好練習了嗎?今天就選一個 Flexbox 專案:建立一個導覽列或按鈕群組。使用 CodePen 來實驗。一旦你對 Flexbox 感到自在,就移到 Grid 並建立一個照片畫廊。實作練習會讓一切豁然開朗。

你最大的 CSS 布局困惑是什麼?在留言區告訴我,我會幫你找出 Flexbox 或 Grid 是否是答案。我會閱讀並回覆每一則留言。

想要更多初學者友善的 CSS 指南?追蹤我,獲得你真正能理解的視覺化範例。下一篇:我會分解 CSS 定位(absolute、relative、fixed、sticky),附上互動式範例和實際使用案例。

讓我們一起打造出色的作品。🚀

#CSS #Flexbox #Grid #前端開發 #網頁設計 #布局教學 #響應式設計 #初學者指南 #程式教學 #前端入門

留言
avatar-img
Leon Wong 282
8會員
25內容數
Hi,我是 Leon Wong(亮之)——電腦科學與開發愛好者,也是 Notion 重度使用者。如果你想更高效地學習與創作,這裡會是你的實用資源。
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這篇文章分享了 CSS Battle 第 38 題的解法,並提供了相關的技術總結。文章內容包括了使用 flex 排版處理、背景漸層的方法處理等相關技術。透過這篇文章可以學習到如何解決 CSS 切版的問題。
Thumbnail
這篇文章分享了 CSS Battle 第 38 題的解法,並提供了相關的技術總結。文章內容包括了使用 flex 排版處理、背景漸層的方法處理等相關技術。透過這篇文章可以學習到如何解決 CSS 切版的問題。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
在學習 CSS 的過程中,Padding 與 Margin 是兩個經常出現的名詞,但對於初學者來說,可能會有些難以理解。因此,本篇文章將解釋這兩個非常重要的 CSS 屬性。當你掌握後,便能設計出更具層次或易讀的網頁。
Thumbnail
在學習 CSS 的過程中,Padding 與 Margin 是兩個經常出現的名詞,但對於初學者來說,可能會有些難以理解。因此,本篇文章將解釋這兩個非常重要的 CSS 屬性。當你掌握後,便能設計出更具層次或易讀的網頁。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
浮動(float)是早期用來創建佈局的技術。元素可以向左或向右浮動,旁邊的元素會環繞浮動元素。浮動元素通常用於圖文混排或簡單的兩欄佈局。
Thumbnail
浮動(float)是早期用來創建佈局的技術。元素可以向左或向右浮動,旁邊的元素會環繞浮動元素。浮動元素通常用於圖文混排或簡單的兩欄佈局。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News