CSS grid system part III
Items (Child Elements / 子元素)
預設上,每列、每行都有一個子元素 (item),但你可以使用一些語法讓子元素跨列或是跨行
- grid-column 屬性決定了元素從哪列開始,哪列結束
- ※ 其實是 grid-column-start, grid-column-end 的簡寫
- 使用網格線,或是 span 來定義子元素要跨多少列
1 2 3 4 5 6 7 8
| .item1 { grid-column: 1 / 5; } .item2 { grid-column: 2 / span 3; }
|
- grid-row 屬性是一樣的概念,只是轉換成定義子元素從哪行開始與結束
- ※ 為 grid-row-start, grid-row-end 的簡寫
- 使用網格線,或是 span 來定義子元素要跨多少行
1 2 3 4 5 6 7 8
| .item3 { grid-row: 1 / 4; } .item4 { grid-row: 1 / span 2; }
|
1 2 3 4 5 6 7 8
| .item5 { grid-area: 1 / 2 / 5 / 6; } .item6 { grid-area: 2 / 1 / span 2 / span 3; }
|
- grid-area 的其他用法
- 給子元素指定名稱:grid-area 可以指定每個網格的名稱,讓 grid-template-areas 使用
- 可使用 “.” 來代表沒有命名的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| .item1 { grid-area: myArea; } .grid-container { display: grid; grid-template-areas: 'myArea myArea myArea myArea myArea'; grid-gap: 10px;
}
|
1 2 3 4 5 6 7 8
| <div class="grid-container"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> <div class="item5">5</div> <div class="item6">6</div> </div>
|
+++ Mind Blown Moment +++
1 2 3 4 5 6 7 8 9 10 11 12
| .item1 { grid-area: header;} .item2 { grid-area: menu;} .item3 { grid-area: main;} .item4 { grid-area: right;} .item5 { grid-area: footer;}
.grid-container { grid-template-areas: 'header header header header header header' 'menu main main main right right' 'menu footer footer footer footer footer'; }
|
- 改變子元素順序
- 網格排版法允許我們將元素牌到任何位置
- ※ 即:HTML 標籤的第一個元素,不一定會在網格中先出現
- 搭配 media query 語法,可以大幅改變版面在裝置上的顯示 (響應式設計)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| .item1 { grid-area: 1 / 3 / 2 / 4; } .item2 { grid-area: 2 / 3 / 3 / 4; } .item3 { grid-area: 1 / 1 / 2 / 2; } .item4 { grid-area: 1 / 2 / 2 / 3; } .item5 { grid-area: 2 / 1 / 3 / 2; } .item6 { grid-area: 2 / 2 / 3 / 3; }
@media only screen and (max-width: 500px) { .item1 { grid-area: 1 / span 3 / 2 / 4; } .item2 { grid-area: 3 / 3 / 4 / 4; } .item3 { grid-area: 2 / 1 / 3 / 2; } .item4 { grid-area: 2 / 2 / span 2 / 3; } .item5 { grid-area: 3 / 1 / 4 / 2; } .item6 { grid-area: 2 / 3 / 3 / 4; } }
|