搜尋

Grid 網格流向與間距

除了基本的網格格線或網格空間名稱,Grid 網格容器也有一些專門控制細節的樣式屬性,例如 grid-auto-flow 控制網格流向,grid-gap、grid-row-gap 和 grid-column-gap 控制間距,grid-auto-columns 和grid-auto-rows 自動格線,這篇教學會介紹這些樣式屬性的用法。

延伸閱讀:Grid 網格容器與格線Grid 網格空間與命名Grid 排列網格項目Grid 網格項目對齊、順序與對齊

快速導覽:

CSS 教學 - Grid 網格流向與間距

grid-auto-flow 網格流向

grid-auto-flow 表示「網格項目的流向」,沒有繼承特性,有 rowcolumn 兩種屬性值row 是預設值,表示網格項目會「先填滿列,在換行到另外一列」( 水平先填滿 ),column 表示網格項目會「先填滿欄,在換行到另外一欄」( 垂直先填滿 ),下方範例會展示兩種不同的流向。

線上展示:https://codepen.io/oxxo/pen/ExqZzRg

<!-- HTML 程式碼-->
<div class="g g1"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div></div>
<div class="g g2"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div></div>


<!-- CSS 程式碼 -->
<style>
  .g {
    width: 240px;
    height: 240px;
    outline: 1px solid #000;
    margin: 10px;
    float: left;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
  }
  .g1 {grid-auto-flow: row;}
  .g2 {grid-auto-flow: column;}
  .g div {outline: 1px dashed #000;}
</style>

CSS 教學 - Grid 網格流向與間距 - grid-auto-flow 網格流向

除了單純使用 rowcolumn 屬性值,也可以額外加上「dense」的設定,讓屬性值變成「row dense」或「column dense」,加上 dense 之後,網格元素在排列時,會讓後方大小適合的項目,自動往上填補「額外空間」,例如網格一列有三欄,第一個項目佔了兩欄,如果第二個項目也是兩欄,就會換行到第二列,發生「空出一欄」的狀況,如果加上 dense,就會讓第二個以後只佔一欄的元素補滿空的這一欄。

下方的範例使用兩組網格,左方是預設值「row」,右方使用「row dense」,當網格項目大小不一時,預設流向就會出現「空格」,但如果加上了「dense」,就會讓大小適合的後方項目往上填補空格。

注意,範例中將網格項目的起始格線使用預設值「auto」才能一個接著一個,並搭配「span」延伸範圍,如果有指定起始格線,等同指定「絕對位置」,dense 就會失去作用

線上展示:https://codepen.io/oxxo/pen/VwoPOdr

<!-- HTML 程式碼-->
<div class="g g1"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
<div class="g g2"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>

<div class="g g1 a"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div></div>
<div class="g g2 a"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div></div>


<!-- CSS 程式碼 -->
<style>
  .g {
    width: 240px;
    height: 240px;
    outline: 1px solid #000;
    position: absolute;
    top: 0;
    z-index: 2;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(4, 1fr);
  }
  .g1 {
    left: 10px;
    grid-auto-flow: row;
  }
  .g2 {
    left: 270px;
    grid-auto-flow: row dense;
  }
  .g div {outline: 1px dashed #000;}
  .a {z-index: 1;}
  .a div:nth-child(1) {
    grid-column: auto / span 2;
    background: #f44;
  }
  .a div:nth-child(2) {
    grid-column: auto / span 1;
    background: #09f;
  }
  .a div:nth-child(3) {
    grid-column: auto / span 2;
    background: #0c0;
  }
  .a div:nth-child(4) {
    grid-column: auto / span 1;
    background: #f90;
  }
  .a div:nth-child(5) {
    grid-column: auto / span 2;
    background: #f0f;
  }
  .a div:nth-child(6) {
    grid-column: auto / span 2;
    background: #ff0;
  }
  .a div:nth-child(7) {
    grid-column: auto / span 1;
    background: #999;
  }
  .a div:nth-child(8) {
    grid-column: auto / span 2;
    background: #0ff;
  }
  .a div:nth-child(9) {
    grid-column: auto / span 1;
    background: #a9f;
  }
</style>

CSS 教學 - Grid 網格流向與間距 - grid-auto-flow 屬性值加上 dense

grid-auto-columns、grid-auto-rows 自動格線

在「Grid 網格容器與格線」教學中有介紹過如何設定網格格線,而 CSS 也有提供「自動格線」的樣式屬性:grid-auto-columnsgrid-auto-rows自動格線表示當網格項目超過格線設定時,會「自動且重複」產生設定值的格線,這兩個樣式屬性「無法同時使用」,且需要搭配 grid-auto-flow 共同使用,參考下方搭配方式:

  • grid-auto-columns 需要搭配 grid-auto-flow: column
  • grid-auto-rows 需要搭配 grid-auto-flow: row

下方的範例會分別使用兩組網格容器,當中「有透過格線」設定的網格只有「六個」,但卻放入了 16 個網格項目,超過六個之後的項目,會使用自動格線的設定排列,這種設定方式可針對「無法確定有多少個內容」的網格排版。

線上展示:https://codepen.io/oxxo/pen/wvVgbXR

<!-- HTML 程式碼-->
<div class="g g1"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
<div class="g g2"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>

<!-- CSS 程式碼 -->
<style>
  .g {
    width: 240px;
    height: 200px;
    outline: 1px solid #000;
    margin: 10px 10px 25px;
    display: grid;
  }
  .g1 {
    grid-template-columns: repeat(3,1fr);  /* 每一列都是三欄,彈性分配 1r */
    grid-template-rows: repeat(2, 1fr);    /* 換行後只有前兩列都是 1fr */
    grid-auto-flow: row;                   /* row 流向 */
    grid-auto-rows: 10px 50px;             /* 超過兩列之後使用 10px 50px 的規律重複每一列 */
  }
  .g2 {
    grid-template-columns: repeat(2, 1fr);  /* 換行後只有前兩欄都是 1fr */
    grid-template-rows: repeat(3, 1fr);     /* 每一欄都是三列,彈性分配 1r */
    grid-auto-flow: column;                 /* column 流向 */
    grid-auto-columns: 10px 50px;           /* 超過兩欄之後使用 10px 50px 的規律重複每一欄 */
  }
  .g div {outline: 1px solid #000;}
  .g div:nth-child(n+7){background: #f90a;} /* 第六個之後的項目都有背景色 */
</style>

CSS 教學 - Grid 網格流向與間距 - grid-auto-columns、grid-auto-rows 自動格線

grid-row-gap、grid-column-gap、grid-gap 網格間距

grid-row-gapgrid-column-gapgrid-gap 樣式屬性可以從「格線」的層級,設定網格項目的排列間距,三個樣式屬性都沒有繼承特性,預設值都是 0,可使用長度單位的數值設定間距,的說明如下:

樣式屬性 說明
grid-row-gap 每一列的間距。
grid-column-gap 每一欄的間距。
grid-gap 使用兩個數值同時設定列和欄的間距,寫法 (列 欄),如果只有一個數值表示列和欄使用相同數值。

下方範例使用三組網格容器,分別呈現三種不同網格間距樣式屬性的呈現方式。

線上展示:https://codepen.io/oxxo/pen/KKOaLeO

<!-- HTML 程式碼-->
<div class="g g1"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
<div class="g g2"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>
<div class="g g3"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div>

<!-- CSS 程式碼 -->
<style>
  .g {
    width: 240px;
    height: 240px;
    outline: 1px solid #000;
    margin: 10px 10px 25px;
    display: grid;
    grid-template-columns: repeat(3,1fr);
    grid-template-rows: repeat(3,1fr);
  }
  .g1 {grid-row-gap: 10px;}
  .g2 {grid-column-gap: 10px;}
  .g3 {grid-gap: 20px 5px;}
  .g div {
    background: #f609;
    outline: 1px solid #000;
  }
</style>

CSS 教學 - Grid 網格流向與間距 - grid-row-gap、grid-column-gap、grid-gap 網格間距

小結

這篇教學所介紹的「流向」、「自動格線」和「間距」都是屬於比較細節的網格容器設定,雖然大多數的排版情況不會用到,但如果需要用到的時候卻很方便,有機會不妨使用看看吧。

延伸閱讀:Grid 網格容器與格線Grid 網格空間與命名Grid 排列網格項目Grid 網格項目對齊、順序與對齊

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

關鍵字與文字數值 長度與角度單位 顏色單位 位置名稱與時間單位

變數與內容函式

變數 數學計算 文字與清單計數 生成內容與引號

顏色與濾鏡

色彩模型 漸層色 影像濾鏡

文字樣式

使用通用字型 使用外部字型 @font-face 定義字型 文字尺寸 常用文字樣式 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 特殊文字樣式

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 影像邊框 輪廓 ( outline ) 可見性與透明度 內容溢出與裁切

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 定義計數規則 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 定位 ( position )

Flexbox 彈性排版

Flexbox 彈性盒子 Flexbox 對齊方式 Flexbox 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask )