背景 常見的一個圖文列表設計,通常是這樣的,兩端頂著容器,中間的間距平均分,如下圖的某東商品列表的設計: 列表是這樣自適應的,當視窗足夠放多少個商品就放多少個,然後各個商品項目之間的間距平均分。由於每個人的視窗都可能不同,因此所看到的間距或者每一行的個數都會不同。 方案 想到這種設計,我們學過fle ...
背景
常見的一個圖文列表設計,通常是這樣的,兩端頂著容器,中間的間距平均分,如下圖的某東商品列表的設計:
列表是這樣自適應的,當視窗足夠放多少個商品就放多少個,然後各個商品項目之間的間距平均分。由於每個人的視窗都可能不同,因此所看到的間距或者每一行的個數都會不同。
方案
想到這種設計,我們學過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