簡述
我在這挑戰JS地下城1F-九九乘法中,使用陌生GRID以及HTML、CSS、JS將九九乘法表呈現出來去完成它.
以下簡述GRID…
1F原始檔、1F DEMO
定義與特性
MDN定義:格線是一組水平線和垂直線的交叉集合:一個定義為行(row),另一個定義為列(column)。
你可以讓各元素依照行列的規則放到各格線上
一切都建立要從建立格線容器(grid container)開始
格線佈局具有以下特性 :::
- 尺寸設定具有彈性
- 固定:pixel
- 靈活:百分比、fr(此單位為因grid產生)
- 單元佈置
- 使用行號、名字、目標區域,讓各單元放到精確的位置
- Creation of additional tracks to hold content
- 控制對齊
- 使用z-index控制重疊內容
格線容器
元件要成為格線容器時,需要定義容器的顯示類型。
宣告以後,該元素的所有直接子元素會變成格線單位(grid item)
set to grid or inline-grid
1 | .grid-container { |
格線軌道(Grid Track)
透過 grid-template-columns 與 grid-template-rows 屬性定義了行與列,也定義了格線軌道。
定義的數量代表了多少區塊 ex: 1fr 1fr = 2個區塊
格線軌道定義的單位與方式
- 單位 - fr 、 %、px
1 | A. fr單位 |
單位可以混用
1
2
3
4.grid-container {
display: grid;
grid-template-columns: 500px 1fr 2fr;
}repeat(次數, 值) - 以迴圈表現
1
2
3
4.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
}軌道縮放與 minmax()
希望有高度一定,但又不要跑版的情境,可以用minmax()1
2
3
4
5.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(100px, auto);
}明式與暗式格線
透過 grid-auto-rows 與 grid-auto-columns 屬性,給軌道定義一套大小。1
2
3
4
5.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 200px;
}
圖片來源:MDN
Grid Lines
Note!
當我們定義一個格線(grid),我們是定義一個區塊、一個grid track,而非線條、行.
因為定義track 而產生 line
Positioning items against lines(根據行、線定位項目)
column => 由左線調至右線條,row => 由最上面線條至下方
已 3 X 2 的 grid, column line 有4條, row line有3條,可參照圖片
- grid-column-start
- grid-column-end
- grid-row-start
- grid-row-end
- grid-row (start / end)
- grid-column (start / end)
- grid-area (row-start / column-start / row-end / column-end)
1
2
3
4
5
6
7
8
9
10
11.wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 100px;
}
.box1 {
grid-column-start: 1;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 3;
}
Gutters
Gutters between grid cells can be created using the 「 grid-column-gap」、 「grid-row-gap」、「grid-gap」
Gutters 所指的為下方區塊與區塊間的黃色部分
1 | // 使用方式 |
memo
- 內容器的定位模式,與 flex 使用方式一樣。 ex: justify-self
- nesting :: grid 可以再grid