CSS Grid 佈局系統能夠幫助我們輕鬆控制網格中元素位置和大小,跟 Flex 比較:
- Flex:一維佈局系統,主要用於單行或是單列的對齊跟排列
- Grid:二維網格系統,提供更豐富靈活的佈局控制,同時操控「欄(column)」跟「列(row)」,適合用於複雜度高的網頁版型
常用屬性
外層容器
display
:定義容器類型(grid
/inline-grid
/subgrid
)grid-template-columns
:定義網格欄的大小和數量grid-template-rows
:定義網格列的大小和數量grid-gap
/grid-column-gap
/grid-row-gap
:設定網格間的間距grid-template-areas
:定義網格空間位置,由單個或數個字串組成,搭配grid-area
使用justify-items
/align-items
/place-items
:定義所有元素的對齊方式,同 flex 用法
內層元素
grid-column
/grid-column-start
/grid-column-end
:控制元素在網格中所佔欄空間位置grid-row
/grid-row-start
/grid-row-end
:控制元素在網格中所佔列空間位置grid-area
:定義元素空間名稱,搭配grid-template-areas
使用justify-self
/align-self
/place-self
:定義單一元素的對齊方式,同 flex 用法
元素自動佈局
grid-auto-columns
:定義預設欄的大小grid-auto-rows
:定義預設列的大小grid-auto-flow
:控制自動佈局的方向和順序
grid-template-columns / grid-template-rows / grid-column / grid-row
外層容器
|
grid-template-columns
與 grid-template-rows
可以指定線段名稱(用 [] 表示),如果不指定,預設會從 1 開始編號,如果輸入 -1,則會從最後一條線開始算起
|
一條線段可以給定多個名稱
|
如果有連續重複寬 / 高,可以使用 repeat(count, value)
簡化
|
搭配 minmax(min-value, max-value)
函式,設定範圍最大與最小值,達成自適應空間效果
|
除了上述範例的單位,也能運用 fr(fraction)單位來分配空間,fr 單位用於將可用空間分為相對比例,能夠自適應容器變化。
以下為例:假設目前容器寬 500px,扣掉 100px,容器內可用空間為 400px,共配置了 4fr,因此 1fr 可以分到 100px
|
內層元素
|
grid-column
/ grid-row
可以帶入以下值:
- line:線段編號
- span
:元素佔欄位數 - span
:元素所在格線名稱 - auto:自動
|
grid-template-areas / grid-areas
外層容器+內層元素
|
justify-items / align-items / justify-self / align-self
用於控制內層元素在容器中的對齊方式,與 flex 用法相同,沒有定義時預設為 stretch
(填滿容器)
元素若未定義位置,預設會是由左至右,由上至下順排,一個元素佔一個網格位置
外層容器統一定義
- align-items
- justify-items
- place-items:合併 align-items 與 justify-items
|
等同於
|
內層元素個別定義
- align-self
- justify-self
- place-self:合併 align-self 與 justify-self
|
grid-auto-columns / grid-auto-rows / grid-auto-flows
當透過內層元素數量超過預先定義的網格數量,或是元素超出網格外,grid-auto-columns / grid-auto-rows 可以協助我們自動定義欄或列的尺寸,範例說明:
|
|
未定義前,畫面呈現如下:
加入 grid-auto-columns 與 grid-auto-rows
|
畫面呈現如下:
grid-auto-flow 用來自動定義網格內元素的排列方式,預設值為 row
,以上面範例作為延伸
|
畫面呈現如下:
完整範例程式碼
參考文章:
https://css-tricks.com/snippets/css/complete-guide-grid/
https://www.casper.tw/css/2017/03/22/css-grid-layout/
https://ithelp.ithome.com.tw/articles/10268087
評論