P粉6800005552023-08-23 09:07:04
在這篇文章中發現了一個很棒的關於如何使用偽選擇器控制剩餘網格項目的方法:Control Leftover Grid Items with Pseudo-selectors
.grid { display: grid; grid-template-columns: repeat(6, 1fr); grid-gap: 20px; margin: 20px; padding: 20px; } .item { grid-column: span 2; background: #AB47BC; padding: 20px; } /* 处理两个孤立项 */ .item:last-child:nth-child(3n - 1) { grid-column-end: -2; } .item:nth-last-child(2):nth-child(3n + 1) { grid-column-end: 4; } /* 处理单个孤立项 */ .item:last-child:nth-child(3n - 2) { grid-column-end: 5; }
<div class="wrapper"> <div class="grid grid--1"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> <div class="grid grid--2"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> </div>
P粉1933074652023-08-23 00:40:23
CSS Grid不適合在整行上進行對齊,因為交叉軌道會阻擋道路。這裡有一個詳細的解釋:
作為替代方案,使用flexbox並設定justify-content: center
。
這將把所有項目打包在行的水平中心。然後,您的邊距將把它們分開。
在完全填滿的行上,justify-content
將無法運作,因為沒有空閒空間可供其工作。
在具有空閒空間的行上(在您的情況下,僅為最後一行),項目將居中顯示。
#container { display: flex; flex-wrap: wrap; justify-content: center; } .item { flex: 0 0 calc(16.66% - 20px); background: teal; color: white; padding: 20px; margin: 10px; } * { box-sizing: border-box; }
<div id="container"> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> <div class="item">Item</div> </div>