瀑布流实现三种方式和优缺点对比
1.css样式-column方式
- 图片效果展示:

- 样式
.content {
width: 100%;
column-count: 2;
column-gap: 20rpx;
}
.content .item{
width: 100%;
break-inside: avoid;
}
<view class="content">
<view class="item" style="height:100rpx;">
1
</view>
<view class="item" style="height:200rpx;">
2
</view>
<view class="item" style="height:300rpx;">
3
</view>
<view class="item" style="height:200rpx;">
4
</view>
<view class="item" style="height:500rpx;">
5
</view>
<view class="item" style="height:400rpx;">
6
</view>
</view>
- 特点:最简单实现瀑布流的方式,按列的顺序展示,先排左边列再排右边列。
- 缺点:加载数据后顺序会发生改变,屏幕闪动,影响展示。
2.css样式-flex方式
- 图片效果展示:

- css样式
.masonry {
display: flex;
flex-flow: column wrap;
align-content: space-between;
height: 665px;
background-color: #f7f7f7;
border-radius: 3px;
padding: 20px;
width: 60%;
margin: 40px auto;
counter-reset: items;
}
.item {
width: 32%;
position: relative;
margin-bottom: 2%;
border-radius: 3px;
background-color: #a1cbfa;
border: 1px solid #4290e2;
box-shadow: 0 2px 2px rgba(0, 90, 250, 0.05), 0 4px 4px rgba(0, 90, 250, 0.05), 0 8px 8px rgba(0, 90, 250, 0.05), 0 16px 16px rgba(0, 90, 250, 0.05);
color: #fff;
padding: 15px;
box-sizing: border-box;
}
.item::before {
counter-increment: items;
content: counter(items);
}
.item:nth-child(3n+1) {
order: 1;
}
.item:nth-child(3n+2) {
order: 2;
}
.item:nth-child(3n) {
order: 3;
}
.container::before,
.container::after {
content: "";
flex-basis: 100%;
width: 0;
order: 2;
}
body {
font-family: sans-serif;
}
h3 {
text-align: center;
}
<div class="masonry">
<div class="item" style="height: 140px"></div>
<div class="item" style="height: 190px"></div>
<div class="item" style="height: 170px"></div>
<div class="item" style="height: 120px"></div>
<div class="item" style="height: 160px"></div>
<div class="item" style="height: 180px"></div>
<div class="item" style="height: 140px"></div>
<div class="item" style="height: 150px"></div>
<div class="item" style="height: 170px"></div>
<div class="item" style="height: 170px"></div>
</div>
- 特点:较简单实现瀑布流的方式,按行的顺序展示,左右左右依次排列。
- 缺点:需要固定高度。
3.js方式