筆記 - CSS Grid 排版系統
本篇學習 CSS grid 排版系統與 Bootstrap 使用。
- Flexbox 一維排版:已有現成內容,微調間距或對其方式(content-out)
- Grid 網格排版:先有排版設計,把元素放進去(layout-in)
Grid system 由一組水平線和一組垂直線交錯組合而成,這些相交而成的線被稱為「欄 (column)」和「列 (row)」,可以想成是隱形的輔助線,用來調整間距和對齊。
Grid 元素宣告
定義 grid container
display: grid
定義 grid items
定義 column 與 row 來形成 grid。以 3 column x 2 row 網格為例
1 | .wrapper { |
單位使用
grid-template-rows
與 grid-template-columns
除了 px 之外,還有其他單位可以使用:
- px, em, rem, %
- fr: fraction, 指 container 剩餘空間分幾等分。當容器寬度改變時,fr 也能彈性縮放
- minmax(min, max): 給定尺寸的最小與最大值
- repeat(times, width): 大量劃定重複性的區塊,例如
repeat(5, 50px)
- auto: 會有兩種行為
- 若搭配其他彈性單位(例如 fr),auto 元素尺寸照內容自動調整
- 搭配固定單位(例如 px),auto 自動延伸填滿剩餘空間
定義間距
grid-gap
在格子之間加入間隔
grid-gap
是 grid-row-gap
與 grid-column-gap
合併,先 row 再 column
1 | grid-gap: 5px 20px; |
操作 item 配置
操作時需要用 grid line 來思考,若希望 item1 橫跨第一條線到第四條線,則寫
1 | .item1 { |
Bootstrap Grid System
Bootstrap 最基本的元素是 container,所以起手式都是把 container div 放在 body 裡面。
1
2
3<body>
<div class="container"></div>
</body>Bootstrap container 默認的設計模式是 Mostly Fluid,表示在不同的 breakpoint 會修改 container 的最大寬度。若將
.container
改為.container-fluid
則使畫面佔據整個 viewport 的寬度 (width: 100%)。Bootstrap grid item 是由 row 包裝 column 而組成,每個 column 就是單個 item,是 row 的直接子元素才能運行。
Bootstrap CSS 默認為 flexbox ,故若 column 沒有指定寬度,每個 column 都是相同寬度。 Bootstrap grid layout 是以 12 個 column 來建構而成,若要指定 column 寬度,就指定類別,例如
.col-4
就會佔據 1/3 的寬度。當 viewport 變小時,grid row 會按比例縮小,每個 column item 會保持相對寬度。
Bootstrap layout 內含 6 個 breakpoint (官網docs > layout > grid),等同 CSS media query 中的
min-width
,表示在該 breakpoint 寬度以上的排版,使用時加入 class 即可。例如.col-sm-8
指在 viewport 寬度 >= 576px 時,item 寬度要 8 個 column 寬。由於 mobile first,bootstrap 設計是為較大的 viewport 寬來設定 media query (跟之前學習的一樣),所以若沒指定都是預設最小 viewport 樣式 (< 576px)。
1 | <div class="container"> |
這樣就只需要加 html 元素類別,不用寫任何一行 CSS 就可以排版了。