形式一:column-count实现
这种实现形式的毛病是:图片是先从上到下排列,再从左到右排列的
<!DOCTYPE html><html> <head></head> <style> .pubuliu { column-count: 4; list-style: none; counter-reset: item; } .pubuliu li { break-inside: avoid; margin-bottom: 4px; } .pubuliu li::before { display: block; counter-increment:item; content: counter(item); color:black; } .h100 { height: 100px; background:yellow; } .h200 { height: 200px; background: red; } .h300 { height: 300px; background:violet; } .h400 { height: 400px; background:tomato; } </style> <body> <ul class="pubuliu"> <li class="h100"></li> <li class="h400"></li> <li class="h300"></li> <li class="h100"></li> <li class="h200"></li> <li class="h100"></li> <li class="h400"></li> <li class="h300"></li> <li class="h100"></li> <li class="h200"></li> </ul> </body></html>
形式二:flex布局+巧用order属性实现
这种形式能够实现从左到右
毛病:须要事后设定flex容器的高度,保障想要列数,且调整页面大小时会呈现一些间距过大的问题
<!DOCTYPE html><html> <head></head> <style> .pubuliu { display: flex; flex-direction: column; flex-wrap: wrap; height:800px; list-style: none; counter-reset: item; } .pubuliu li { margin-bottom: 4px; } .pubuliu li::before { display: block; counter-increment:item; content: counter(item); color:black; } .pubuliu li:nth-child(4n+1) { order: 1; } .pubuliu li:nth-child(4n+2) { order: 2; } .pubuliu li:nth-child(4n+3) { order: 3; } .pubuliu li:nth-child(4n+4) { order: 4; } .h100 { height: 100px; background:yellow; } .h200 { height: 200px; background: red; } .h300 { height: 300px; background:violet; } .h400 { height: 400px; background:tomato; } </style> <body> <ul class="pubuliu"> <li class="h100"></li> <li class="h400"></li> <li class="h300"></li> <li class="h100"></li> <li class="h200"></li> <li class="h100"></li> <li class="h400"></li> <li class="h300"></li> <li class="h100"></li> <li class="h200"></li> </ul> </body></html>