背景
常見的一個圖文列表設計,通常是這樣的,兩端頂着容器,中間的間距平均分,如下圖的某東商品列表的設計:
列表是這樣自適應的,當視窗足夠放多少個商品就放多少個,然后各個商品項目之間的間距平均分。由於每個人的視窗都可能不同,因此所看到的間距或者每一行的個數都會不同。
方案
想到這種設計,我們學過flex就知道,非常像flex的justify-content: space-between的效果,因此我們自然這樣實現:
.flex {
list-style: none;
margin: 0;
padding: 0;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.demo1 > .flex__item {
flex-basis: 200px;
margin-top: 1rem;
text-align: center;
box-sizing: border-box;
}
.demo1 > .flex__item img {
width: 100%;
}
<ul class="flex demo1">
<li class="flex__item">
<img src="http://via.placeholder.com/100" />
<p>
圖片
</p>
</li>
<li class="flex__item">
<img src="http://via.placeholder.com/100" />
<p>
圖片
</p>
</li>
<li class="flex__item">
<img src="http://via.placeholder.com/100" />
<p>
圖片
</p>
</li>
<li class="flex__item">
<img src="http://via.placeholder.com/100" />
<p>
圖片
</p>
</li>
<li class="flex__item">
<img src="http://via.placeholder.com/100" />
<p>
圖片
</p>
</li>
</ul>
demo: https://jsbin.com/yulevutodo/edit?html,css,output

問題
我們看到效果,最后一行不正確,應該向左對齊才對。
大家有什么好的解決方案(為了保證兼容性,所以不希望用grid等)嗎?
我有一個方案,但是總感覺不是最佳的,希望大家先自己想想,然后再看我的方案,免得被我帶偏了,若有不錯的方案,希望告知,多謝!
我的方案放在這邊了:https://javascript.shop/2020/01/flex-space-between-last-row-alignment
