一、justify-content对齐问题描述
在CSS flex布局中,justify-content
属性可以控制列表的水平对齐方式,例如space-between
值可以实现两端对齐。
但是,如果最后一行的列表的个数不满,则就会出现最后一行没有完全垂直对齐的问题。
如下代码:
1. .container {
2. display: flex;
3. justify-content: space-between;
4. flex-wrap: wrap;
5. }
6. .list {
7. width: 24%; height: 100px;
8. background-color: skyblue;
9. margin-top: 15px;
10. }
然后列表的个数不多不少正好7个:
1. <div class="container">
2. <div class="list"></div>
3. <div class="list"></div>
4. <div class="list"></div>
5. <div class="list"></div>
6. <div class="list"></div>
7. <div class="list"></div>
8. <div class="list"></div>
9. </div>
二、解决方法
根据个数最后一个元素动态margin
由于每一列的数目都是固定的,因此,我们可以计算出不同个数列表应当多大的margin
值才能保证完全左对齐。
例如,假设每行4个元素,结果最后一行只有3个元素,则最后一个元素的margin-right
大小是“列表宽度+间隙大小”的话,那最后3个元素也是可以完美左对齐的。
例如:
.list:last-child:nth-child(4n - 1)
说明最后一行,要么3个元素,要么7个元素…….list:last-child:nth-child(4n - 2)
说明最后一行,要么2个元素,要么6个元素……
在本例中,一行就4个元素,因此,我们可以有如下CSS设置:
1. .container {
2. display: flex;
3. /* 两端对齐 */
4. justify-content: space-between;
5. flex-wrap: wrap;
6. }
7. .list {
8. width: 24%; height: 100px;
9. background-color: skyblue;
10. margin-top: 15px;
11. }
12. /* 如果最后一行是3个元素 */
13. .list:last-child:nth-child(4n - 1) {
14. margin-right: calc(24% + 4% / 3);
15. }
16. /* 如果最后一行是2个元素 */
17. .list:last-child:nth-child(4n - 2) {
18. margin-right: calc(48% + 8% / 3);
19. }
效果如下:
详细见:让CSS flex布局最后一行列表左对齐的N种方法