昨天我們聊了 Flexbox,解決了一維排版的問題(水平或垂直)。
但當畫面需要同時管理「列與行」時,Flexbox 就不太好處理了。
這時候,CSS Grid 就登場了!
舉例來說:
要使用 Grid,只需要在父容器設定:
.container {
display: grid;
}
然後透過 grid-template-columns
與 grid-template-rows
來定義格線。
display: grid;
→ 啟用 gridgrid-template-columns
→ 定義欄位數量與寬度grid-template-rows
→ 定義列數與高度gap
→ 設定格子間距(取代舊的 grid-gap)grid-template-areas
→ 直接定義版面結構(用字串表示)grid-column
→ 橫向跨欄grid-row
→ 縱向跨列grid-area
→ 對應 grid-template-areas
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>Grid 三欄範例</title>
<style>
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* 三欄等分 */
gap: 10px;
padding: 20px;
background: #eee;
}
.box {
background: #4CAF50;
color: white;
padding: 20px;
text-align: center;
border-radius: 6px;
}
</style>
</head>
<body>
<div class="container">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
</div>
</body>
</html>
這樣就能快速建立三欄等分排版。
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>Grid 複雜範例</title>
<style>
.container {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
grid-template-columns: 200px 1fr;
grid-template-rows: 80px 1fr 60px;
height: 100vh;
gap: 10px;
}
.header { grid-area: header; background: #2196F3; }
.sidebar { grid-area: sidebar; background: #FF9800; }
.main { grid-area: main; background: #4CAF50; }
.footer { grid-area: footer; background: #9C27B0; }
.box { color: white; padding: 20px; }
</style>
</head>
<body>
<div class="container">
<div class="header box">Header</div>
<div class="sidebar box">Sidebar</div>
<div class="main box">Main Content</div>
<div class="footer box">Footer</div>
</div>
</body>
</html>
這樣就能用 Grid 定義出 頁首、側邊欄、主內容、頁尾,整個版面結構一目了然。
✅ 一維排版 → Flexbox,二維排版 → Grid。
✅ 使用 fr
(fraction) 代替固定 px,版面更彈性。
✅ gap
比 margin
更適合用來處理格子間距。
✅ grid-template-areas
能讓程式碼更語意化,方便維護。
今天體驗了 CSS Grid,我覺得它最大的優點就是「排版結構化」。
Flexbox 處理「橫一排」很棒,但當畫面有更多列與欄位時,Grid 會讓程式碼更乾淨。
我特別喜歡 grid-template-areas
,因為它能直接「畫」出版面結構,非常直覺!
👉 明天 Day 5,我們要結合 RWD 響應式設計,讓網頁在不同裝置都能好好顯示!