格線佈局的基本概念
CSS 格線佈局 介紹了二維的 CSS 格線系統。格線可以用來佈置頁面的主要區域、或小型用戶介面。本文介紹 CSS 格線 Level 1 規範的其中一部份。這份概觀顯示的某些功能,將在教學的其他部份詳細解釋。
什麽是格線?
格線是一組水平線和垂直線的交叉集合(intersecting set):一個定義為行(row),另一個定義為列(column)。你可以讓各元素依照行列的規則放到各格線上。CSS 格線佈局具有以下特點:
固定和靈活的軌道尺寸
你可以給各格線指定一個固定的軌道大小,例如像素(pixel)。這樣就能把格線設為指定的像素,以貼近你期望的排版。也可以創建一個使用百分比、或是新的
fr
單位之格線。
fr
單位就是為了格線布局而生。
單元佈置
你可以在格線使用行號、名字、目標區域,讓各單元放到精確的位置。格線也有控制非明式(explicit)單元的布局演算法。
Creation of additional tracks to hold content
你可以按照需求,定義明式格線、也可以處理沒有指定的格線、還可以增加額外的行(row)與列(column)。如果需要「盡可能地放進容器容得了的列」之類的也辦得到。
控制對齊
格線也包含了依序對齊的功能,以便控制各格線內的各單元、還有整個格線要如何對齊。
Control of overlapping content
格線容器
我們會宣告
display: grid
或
display: inline-grid
來給一個元素建立格線容器(
grid container
)。宣告以後,該元素的所有
直接子元素
會變成
格線單位
(grid item)
本例中,我有個稱作 wrapper class 的 div,裡面有五個元素。
<div class="wrapper">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
接著我讓 .wrapper 變成格線容器(grid container)。
css.wrapper {
display: grid;
box-sizing: border-box;
.wrapper {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
.wrapper > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
在它下面的直接子元素,現在都是格線單元了。從網路瀏覽器來看,各單元變成格線的前後,似乎沒什麼不同,因為目前格線只有建立一個格線列,來放所有的格線單元。這時候,你會發現格線檢測器相當好用。如果在 Firefox 檢查這個示例的格線,你會發現在 grid 值旁邊,有一個小圖標。點選這個小圖標,瀏覽器視窗的元素,就會被一個圖層覆蓋。
在理解並與 CSS 格線共事時,這個工具能幫你視覺化理解,格線到底怎麼做動的。
如果要開始把做得更像格線,我們還需要多寫個 column track。
格線軌道(Grid Track)
格線軌道(Grid Track)
我們在格線裡透過
grid-template-columns
與
grid-template-rows
屬性定義了行與列。它們也定義了格線軌道。
格線軌道
是在格線的兩個欄位之間的空隙。下圖就會看到軌道的高亮:就在格線裡面的第一行。
I can add to our earlier example by adding the
grid-template-columns
property, then defining the size of the column tracks.
I have now created a grid with three 200-pixel-wide column tracks. The child items will be laid out on this grid one in each grid cell.
html
<div class="wrapper">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
css.wrapper {
display: grid;
grid-template-columns: 200px 200px 200px;
box-sizing: border-box;
.wrapper {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
.wrapper > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
.nested {
border: 2px solid #ffec99;
border-radius: 5px;
background-color: #fff9db;
padding: 1em;