1. 程式人生 > >grid網格佈局使用

grid網格佈局使用

## 定義 grid佈局是指對網頁進行劃分成一個一個網格,然後根據自己的要求,可以任意組合。 ![](https://user-gold-cdn.xitu.io/2020/7/29/1739979e6dd7a691?w=215&h=164&f=png&s=6967) 以前寫類似的功能,很麻煩,需要寫很多的CSS去控制,有了grid就很方便了,可以隨意進行組合。 跟flex有很多地方相似,包括有部分屬性。不同的地方也很突出,尤其是flex是一維,只有橫向。而grid是有橫向和縱向。另外grid功能要更強大點。 ![](https://user-gold-cdn.xitu.io/2020/7/29/173997a65f3f8b89?w=227&h=234&f=png&s=12751) ![](https://user-gold-cdn.xitu.io/2020/7/29/173997b1578c1160?w=986&h=978&f=png&s=73074) ## 基本屬性 ### display 通過對父元素進行設定display:grid,表示裡面包裹的元素全是網格佈局。 ``` display:grid ``` ### grid-template-columns/grid-template-cols grid-template-columns:表示每行的寬度,有幾個表示每行有幾列,多出部分會往下排列 grid-template-cols:表示每列的寬度 ``` .grid{ display: grid; grid-template-columns: 50px 50px 50px 50px; grid-template-rows: 50px 50px 50px 50px; } ``` 以上的程式碼表示橫向的每個item寬度和高度是50px,多出一個就會被自動排佈下去。 ![](https://user-gold-cdn.xitu.io/2020/7/29/173997ce2faa4474?w=220&h=164&f=png&s=6944) #### 單位 單位既可以是px,也可以是百分比,或者用auto - px ``` .grid{ display: grid; grid-template-columns: 50px 50px 50px 50px; grid-template-rows: 50px 50px 50px 50px; } ``` ![](https://user-gold-cdn.xitu.io/2020/7/29/173997e8f42adc00?w=212&h=165&f=png&s=6941) - 百分比 ``` .grid{ display: grid; grid-template-columns: 33.33% 33.33% 33.33%; grid-template-rows: 33.33% 33.33% 33.33%; } ``` ![](https://user-gold-cdn.xitu.io/2020/7/29/173997e39a62c103?w=804&h=160&f=png&s=8893) - auto 表示寬度或高度是剩餘的部分 ``` .grid{ display: grid; grid-template-columns: 33.33% 10% auto; grid-template-rows: 33.33% 20% auto; } ``` ![](https://user-gold-cdn.xitu.io/2020/7/29/173997f7f9b330f3?w=827&h=158&f=png&s=8816) #### repeat() repeat()用來處理幾個item寬度相同的時候,避免寫相同的數值,或者是重複某種模式 ``` .grid{ display: grid; grid-template-columns: repeat(3,20%); grid-template-rows: repeat(3,20%); } ``` ![](https://user-gold-cdn.xitu.io/2020/7/29/1739996dfeea1bcb?w=759&h=150&f=png&s=8646) ``` .grid{ display: grid; grid-template-columns: repeat(3,100px 50px 100px); grid-template-rows: repeat(3,100px 50px 100px); } ``` ![](https://user-gold-cdn.xitu.io/2020/7/29/1739980833b0ab37?w=766&h=114&f=png&s=7894) #### auto-fill 當容器的寬度不確定,但是item的寬度確定,一行儘可能多的容納item,這時可以使用auto-fill ``` .grid{ display: grid; grid-template-columns: repeat(auto-fill,100px); } ``` ![](https://user-gold-cdn.xitu.io/2020/7/29/17399816f897ffa1?w=512&h=110&f=png&s=7306) #### fr 方便表示比例關係,使用fr來表示 ``` .grid{ display: grid; grid-template-columns: 1fr 2fr; } ``` 這表示後者是前者的2倍 ![](https://user-gold-cdn.xitu.io/2020/7/29/17399842a4c6207e?w=571&h=262&f=png&s=9485) fr也可跟px結合,會更方便 ``` .grid{ display: grid; grid-template-columns:100px 1fr 2fr; } ``` 上面程式碼表示第一列是100px,第二列是第三列的一半。 ![](https://user-gold-cdn.xitu.io/2020/7/29/173998511f6fc3b9?w=570&h=163&f=png&s=8230) #### minmax 表示最大值最小值 ``` .grid{ display: grid; grid-template-columns:1fr 2fr minmax(100px,1fr); } ``` 上面程式碼表示,最小值不小於100px,最大值不大於1fr ![](https://user-gold-cdn.xitu.io/2020/7/29/173998750ac3f848?w=554&h=160&f=png&s=8092) ### row-gap,column-gap,gap row-gap:每行之間的間距 column-gap:每列之間的間距 gap:縮寫行/列間距 ``` .grid{ display: grid; grid-template-columns:1fr 2fr 1fr; row-gap: 10px; column-gap: 10px; } ``` 或者簡便的寫法:gap ``` .grid{ display: grid; grid-template-columns:1fr 2fr 1fr; gap: 10px; } ``` 上面程式碼表示行/列之間的間隔是10px ![](https://user-gold-cdn.xitu.io/2020/7/29/1739989fc7a089aa?w=625&h=180&f=png&s=8836) ### grid-area/grid-template-area grid-area和grid-template-area,用來劃分區域,grid-area用來指定item的名稱,grid-template-area根據子區域的名稱來排布,表示展現的方式 ``` .grid{ display: grid; grid-template-columns:100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-template-areas: "div1 div1 div1" "div2 div3 div4" "div5 div6 div7" "div8 div9 div9"; } .div1{ grid-area: div1; background-color: tan; } ``` 上面程式碼表示div區域指代的grid的div1,整個頁面想展示的佈局是如下圖: ![](https://user-gold-cdn.xitu.io/2020/7/29/173998d7f0a8eeb2?w=309&h=360&f=png&s=9385) ### grid-auto-flow 網格佈局一般根據橫向依次排布,如果想豎向排序,可以設定grid-auto-flow ``` .grid{ display: grid; grid-template-columns:100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-auto-flow: column; } ``` 上面的程式碼表示按照豎向排序。 ![](https://user-gold-cdn.xitu.io/2020/7/29/173998f46eeb070e?w=306&h=307&f=png&s=8704) ### justify-items/align-items/place-items justify-items/align-items類似,一個是水平方向上的展示,一個是垂直方向上的展示,屬性一致 ``` start:對齊起始位置 end:對齊結束位置 center:居中展示 stretch:拉伸至整個寬度 ``` justify-items:設定的是item的水平方向展現方式。 ``` .grid{ display: grid; grid-template-columns:100px 100px 100px; grid-template-rows: 100px 100px 100px; justify-items: center; } ``` 上面程式碼表示每個item居中展示 ![](https://user-gold-cdn.xitu.io/2020/7/29/1739990448b1f356?w=310&h=308&f=png&s=11843) align-items:設定的是垂直方向上的展現方式。 ``` .grid{ display: grid; grid-template-columns:100px 100px 100px; grid-template-rows: 100px 100px 100px; align-items: center; } ``` 上面程式碼表示item在垂直方向上居中展示 ![](https://user-gold-cdn.xitu.io/2020/7/29/17399913fecd63a0?w=310&h=313&f=png&s=12173) place-items是align-items和justify-items的結合 ``` place-items: