# grid 使用筆記
**基本設定**
```
<div class="container">
<div class="item one">1</div>
<div class="item two">2</div>
<div class="item three">3</div>
<div class="item four">4</div>
<div class="item five">5</div>
<div class="item six">6</div>
</div>
```
```
.container{
display:grid;
grid-auto-flow:column;
grid-template-columns:repeat(auto-fit,1fr);
grid-template-rows: 250px 250px;
}
```
## grid-template-rows & grid-template-columns
**grid-template-rows**
是由上到下的網格
![](https://i.imgur.com/aaoDqPy.png)
**grid-template-columns**
是由左到右的橫向格線
![](https://i.imgur.com/dbtbfnC.png)
可以使用這兩個屬性來劃出網格,常使用
* px, %, auto。
e.x.
```
grid-template-columns:100px 50% auto;
```
* fr
e.x
```
grid-template-columns:1fr 1fr 1fr;
```
剩餘的空間被分成三份,每個columns平均被分到一分。
* minmax()
e.x.
```
grid-template-columns:50px minmax(100px, 3fr) 50px;
```
中間哪格最小是100px, 最大會被分到3份。
* repeat()
e.x
```
grid-template-columns: repeat(5, 1fr);
```
重複五次,每一份
* auto-fit, auto-fill
e.x.
```
grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));
```
在使用 repeat() 時,如果不確定自己要的重複次數,可以使用 auto-fill 或 auto-fit 來盡量放入重複的track
另外這兩個的差別有
**i. auto-fill**
盡量放入重複的track
![](https://i.imgur.com/wC6dVMp.png)
![](https://i.imgur.com/bWnJiLC.png)
**多出的四格也會被畫出來**
接下來
![](https://i.imgur.com/8ULlvra.png)
如果改成每格為1fr且最小為70px
變成7x2的網格,因為70px可以再500px的空間中被分成七格,剩下的10px平均分配給每一格所以出現71.43
**ii. auto-fit**
盡量放入重複的track, 但空白的track的size會被設定為0px, 並折疊起來
![](https://i.imgur.com/kyZHkzQ.png)
![](https://i.imgur.com/jJTy4Aj.png)
多出的四格被折起來了
接著
![](https://i.imgur.com/Co658H4.png)
一樣改成auto-fit且minmax(70px,1fr)
變成6x2的網格,70px x 6= 420px ,剩餘空間=500-420 = 80, 80/6= 13.3 然後平均分配給每一格。
## grid-template-areas & grid-area
用起來很像是設定好大格局再把設定好的元件放進來,用法滿直覺的,常見使用方式是在父層設定grid-template-areas並寫出布局
e.x.
```
grid-template-areas:
"header header header"
"main main aside"
"footer footer footer";
```
然後在各對應的子層設定grid-area,命名成相對應的名子
個人覺得在變版上使用很方便直接在父層修改排列組合就行
## grid-auto-flow: row | column;
**grid-auto-flow: row;**
先佔滿整"行"
![](https://i.imgur.com/Qh5UP8t.png)
**grid-auto-flow: column;**
先佔滿整"列"
![](https://i.imgur.com/HFlHKtG.png)
如果有設定grid-template-rows將會折成兩行
[CodePen](https://codepen.io/danielgg1024/pen/abyYRRj?editors=1100)