CSS grid 排版
透過 grid template 來定義版型的結構,分別由 column 及 row 定義出直排與橫列的格線,內容再依隔線作安排可跨行跨列排版
可參考
- https://css-tricks.com/snippets/css/complete-guide-grid/
- https://codepen.io/Jimmywei01/pen/yWodJZ?editors=1100
CSS Grid Terminology
- grid Line : 分隔元素的線,可以是垂直與水平,如下圖的紅色線
- grid Track : 兩條分隔線中間的區域,簡單想就是 Grid 中的 Columns 或 Rows,如下圖的綠色區塊
- grid Cell : Grid 中的基本單位,四條線組成的區域,如下圖的藍色區塊。
- grid Area : 由數個 Cell 組成的區域,如下圖的紅色區塊。
- track-size : fr 單位,通常用於分配 row 或 column 的非彈性尺寸設定完後之剩餘空間。以下圖的 column為例,意思即:將去掉 100px 與 10px 後的剩餘空間,分配為 30% 與 70%
- line-name: 可自行命名的名稱
grid 外容器屬性
- display
- 網格行列設定
- grid-auto-flow : row | column | row dense | column dense
- grid-template-areas : grid-template-columns | grid-template-rows
- grid-template : none | subgrid | grid-template-rows / grid-template-columns
- grid-gap = grid-column-gap + grid-row-gap
- 網格對齊位址
- justify-items
- align-items
- justify-content
- align-content
grid 內容器屬性
- grid-column-start
- grid-column-end
- grid-row-start
- grid-row-end
- grid-column
- grid-row
- grid-area
- justify-self
- align-self
外容器
display
- grid
- inline-grid
網格行列設定
- grid-auto-flow
- 設定 格線 的長寬度
- 沒有明確放置在網格上的網格項(grid items),自動放置算法會自動放置這些網格項
- row:自動佈局 每行
- column:自動佈局 每列
- row dense | column dense:自動佈局算法在稍後出現較小的網格項時,嘗試填充網格中較早的空缺,可能導致網格項出現亂序
1 | .flow, .flow2{ |
- grid-template-areas
- 透過 area 定義區塊在 template 上的位置,概念就是在畫面上登記屬於該元素的空間,此部分要內外元素一起看
- 外元素 grid-template-areas:定義空間的位置,是透過幾組字串的組合 (名稱會通過區域在排列位置)
- 內元素 grid-area:定義空間的名稱
- .(點號):代表一個空的網格單元
- none:不定義網格區域
- 透過 area 定義區塊在 template 上的位置,概念就是在畫面上登記屬於該元素的空間,此部分要內外元素一起看
1 | .warp4{ |
- grid-template
- none:將所有三個屬性設置為其初始值
- subgrid:將 grid-template-rows,grid-template-columns 的值設為 subgrid,grid-template-areas 設為初始值
- grid-template-rows / grid-template-columns:
- 將 grid-template-columns 和 grid-template-rows 設置為相應地特定的值,並且設置 grid-template-areas 為 none
1 | .warp5{ |
- grid-template-columns | grid-template-rows
- 定義的行列所組成
<line-name>
- 指定網格線(Grid Line)名稱
1 | // <line-name> -> [first],[line2],[line3],[col4-start],[five],[end] |
- grid-gap = grid-column-gap + grid-row-gap
- 定義行與列間距
- grid-column-gap
- 左右間距
- grid-row-gap
- 上下間距
1 | .warp2{ |
- fr 是因應 CSS grid 而產生的新單位,全名是 fraction (分數),是數學分子 + 分母的那個分數
- 在剩餘空間中所占的比例
- 可以用 fr 去設定 CSS grid 的相對寬度,以達到 RWD 的縮放效果
- 如果是跟前面範例一樣使用 px,縮放的時候是不會有 RWD 的
- 可以混搭單位
- repeat(重覆幾次, 重覆的寬度)
- 重複 grid 的設定
- 最左邊跟最右邊的 grid 如果不會重覆,可以接在 repeat 的前後
1 | .warp3{ |
網格對齊位址
- justify-items - 主軸 「水平對齊」每個網格區域的位置
- 網格對齊位置
- 沿著內聯(行)軸對齊網格項(與沿著塊(列)軸對齊的項對齊)
- start:將內容對齊到網格區域(grid area)的左側
- end:將內容對齊到網格區域的右側
- center:將內容對齊到網格區域的中間(水平居中)
- stretch:填滿網格區域寬度(默認值)
1 | .warp6, .warp7, .warp8, .warp9 { |
- align-items - 主軸 「垂直對齊」每個網格區域的位置
- 沿著列軸線(列軸)對齊網格項(grid items)內的內容
1 | .warp10, .warp11, .warp12, .warp13 { |
- justify-content - 網格區域 在 網格容器內 的「水平對齊」位置
- start:將網格對齊到網格容器(grid container)的左邊
- end:將網格對齊到網格容器的右邊
- center:將網格對齊到網格容器的中間(水平居中)
- stretch:調整網格項(grid items)的寬度,允許該網格填充滿整個網格容器的寬度
- space-around:在每個網格項之間放置一個均勻的空間,左右兩端放置一半的空間
- space-between:在每個網格項之間放置一個均勻的空間,左右兩端沒有空間
- space-evenly:在每個柵格項目之間放置一個均勻的空間,左右兩端放置一個均勻的空間
1 | .warp14, .warp15, .warp16, .warp17, .warp18, .warp19, .warp20 { |
- align-content - 網格區域 在 網格容器內 的「垂直對齊」位置
1 | .warp21, .warp22, .warp23, .warp24, .warp25, .warp26, .warp27 { |
內容器
- grid-column-start | grid-column-end | grid-row-start | grid-row-end
- 物件所佔的空間位置,column 及 row 所到的起始點及終點
- 通過指定網格線(grid lines)來確定網格內網格項(grid item)的位置
- number | name | span number | span name | auto
- span number - 物件所佔用的欄位數
- span name - 物件所在的 grid 名稱
- auto - 自動
1 | .item-boxIn { |
- grid-column = grid-column-start + grid-column-end
- grid-row = grid-row-start + grid-row-end
1 | .item-boxIn2 { |
- grid-area:
<row-start>
/<column-start>
/<row-end>
/<column-end>
- 為網格項提供一個名稱,以便可以被使用網格容器 grid-template-areas 屬性創建的模板進行引用
1 | .item-boxIn3{ |
- justify-self: start | end | center | stretch
- 沿著行軸線(row axis)對齊網格項的內容 此值適用於單個網格項目的內容
- 控制自己在網格中的位置
1 | .item-boxIn4, .item-boxIn5, .item-boxIn6{ |
- align-self: start | end | center | stretch
- 沿著列軸線(列軸)對齊網格項內的內容 此值適用於單個網格項目的內容
- 控制自己在網格中的位置
1 | .item-boxIn8, .item-boxIn9, .item-boxIn10{ |
自動響應式排列
- auto-fill
- 不隨容器區域改變
- minmax
- 最小和最大尺寸
1 | .warp30 { |
- auto-fit
- 隨容器區域改變
1 | .warp31 { |