一、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种方法
