使用flex布局的痛點
如果使用justify-content: space-between;讓子元素兩端對齊,自動分配中間間距,假設一行4個,如果每一行都是4的倍數那沒任何問題,但如果最后一行是2、3個的時候就會出現下面的狀況:
/* flex布局 兩端對齊 */
display: flex;
flex-wrap: wrap;
justify-content: space-between;

?如何想讓最后一行左對齊是有辦法的,大家可以自行去搜索辦法,能實現但是操作起來有些麻煩,但是如果這種布局使用grid布局的話,就會變的非常容易
同樣的布局,將flex改為grid?
/* grid布局 兩端對齊,最后一行左對齊*/
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 30px;
解釋一下上面的代碼:
display:grid 是轉為網格布局,這個是必須的
grid-template-columns:1fr | px 這是將網格分為幾列,1fr是自適配單位,可以當成柵格
gap:30px 這是網格四周的間隔
注意:這三個屬性是給父容器添加的,子元素,可以不用設置寬度,也不用設置margin間距即可完成如下布局

看,上面的grip布局,最后一行不是4的倍數,但是可以左對齊,不會像flex布局一樣的bug。?
?
深入了解一下grid-template-columns屬性
獨占一行
grid-template-columns: 1fr;
一行分為兩列? 多列只需多寫幾個1fr
grid-template-columns: 1fr 1fr;
?中間固定200px,兩邊自動平均分配
grid-template-columns: 1fr 200px 1fr;
?如果5列的值相同,可以使用repeat()函數,grid-template-columns: repeat(5,1fr)當然將1fr換成固定的px尺寸也可以
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;grid-template-columns: repeat(5,1fr)
響應式布局,auto-fill主軸上指定的寬度或者重復次數是最大可能的正整數,minmax最小值255px、最大值1fr代表剩余空間
grid-template-columns: repeat(auto-fill, minmax(255px, 1fr));
注意:實現這種響應式布局,一定要注意父容器不能使用固定寬度,可以將父容器改為如:80%,這樣就能根據屏幕的寬度,自動展示一行展示幾個了。
grid-row和grid-column可以控制某個元素占領幾份
注意是給開始的盒子設置樣式,并非所有
.layout .box1{grid-row: 1/3;grid-column: 1/3;
}
以grid-row行為例,從第幾列開始 / 第幾列+想占幾個;
?