Skip to content
本站總訪問量
本站訪客數 人次

Grid 使用教學

📝 TL;DR

  • 宣告容器:display: grid + grid-template-columns/rowsgrid-auto-flow
  • 快速排版:grid-template-areas 命名區塊,或用 grid-column / grid-row 指定跨度。
  • 間距:gap 一次設定 row/column 間距。

速查表

想做什麼屬性範例
定寬列grid-template-columns200px 1fr 1fr
均分列grid-template-columnsrepeat(3, 1fr)
命名區塊grid-template-areas'header header' 'side main'
跨列grid-column1 / 3 (跨 2 欄)
跨行grid-row2 / 4 (跨 2 行)

題目

試著用grid製作下方的表格

alt text

影片教學連結

方法一

css
.container {
    width: 550px;
    height: 550px;

    background: #101d47;
    border: 10px solid #101d47;

    display: grid;
    grid-auto-columns: 1fr; /* 指定隱式創建列的大小。每列將佔用可用空間的一部分。 */
    grid-auto-rows: 1fr; /* 指定隱式創建行的大小。每行將佔用可用空間的一部分。 */
    gap: 10px; /* 定義網格項目之間的間隙,包括行和列。 */
    grid-template-areas: /* 定義命名的網格區域佈局。每個字符串代表一行,每個空格分隔的值代表一個區域。 */
        'A3 cat cat'
        'B1 cat cat'
        'B1 cat cat'
        'E123 E123 E123'
        'E123 E123 E123'
        'B2 C1 C2'
        'D1 D2 D3'
        'F1 ZZ ZZ';
}

.container>:not(.ZZ) {
    color: #fff;
    outline: 2px solid #fff;

    display: grid; /* 設置為網格佈局。 */
    place-items: center; /* 將網格項目置於中心位置。 */
}

方法二

  • 使用grid-columngrid-row
css
.container {
    width: 550px;
    height: 550px;

    background: #101d47;
    border: 10px solid #101d47;

    display: grid;
    grid-auto-columns: 1fr;
    /* 指定隱式創建列的大小。每列將佔用可用空間的一部分。 */
    grid-auto-rows: 1fr;
    /* 指定隱式創建行的大小。每行將佔用可用空間的一部分。 */
    gap: 10px;
    /* 定義網格項目之間的間隙,包括行和列。 */
}

.container>:not(.ZZ) {
    color: #fff;
    outline: 2px solid #fff;
}

.A1 {
    grid-column: 1 / 3; /* 從第1列跨到第3列 */
    grid-row: 1 / 3; /* 從第1行跨到第3行 */
}

.A2 {
    grid-column: 3 / 4; /* 從第3列跨到第4列 */
    grid-row: 1 / 3; /* 從第1行跨到第3行 */
}

.A3 {
    grid-column: 1 / 2; /* 從第1列跨到第2列 */
    grid-row: 3 / 4; /* 從第3行跨到第4行 */
}

.cat {
    grid-row: 3 / 7; /* 從第3行跨到第7行 */
    grid-column: 2 / 4; /* 從第2列跨到第4列 */
}

.B1 {
    grid-row: 4 / 7; /* 從第4行跨到第7行 */
    grid-column: 1 / 2; /* 從第1列跨到第2列 */
}

.E123 {
    grid-column: 1 / 4; /* 從第1列跨到第4列 */
    grid-row: 7 / 9; /* 從第7行跨到第9行 */
}

## 實戰練習

### 練習 1:三欄等高卡片(簡單)⭐
> 建立 3 欄卡片,欄寬平均,行距 16px。

:::details 💡 參考答案
```css
.cards {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
}

:::

grid-template-areas 完成上方題目圖片版型。

💡 參考答案
css
.layout {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: auto 1fr auto;
    grid-template-areas:
        "A3 cat cat"
        "B1 cat cat"
        "B1 cat cat"
        "E123 E123 E123"
        "E123 E123 E123"
        "B2 C1 C2"
        "D1 D2 D3"
        "F1 ZZ ZZ";
    gap: 10px;
}

練習 3:自適應卡片(中等)⭐⭐

grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) 做響應式卡片牆。

💡 參考答案與提示
css
.gallery {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 20px;
}

提示auto-fit 會自動填滿可用空間,minmax 控制最小寬度。

FAQ

  • Q: 要讓項目置中?
    • A: 容器用 place-items: center;,單一項目用 place-self: center;
  • Q: 舊版瀏覽器不支援 Grid?
    • A: 可用 @supports (display: grid) 切換,或 fallback 至 flex。
  • Q: gap 支援哪裡?
    • A: Grid/Flex 都支援現代瀏覽器,IE 不支援。

<NolebaseGitContributors />


<NolebaseGitChangelog />