# css实现瀑布流布局

最近在实现一个瀑布流布局,查了一些资料,总结一下实现的方法。
所谓瀑布流就是类似下面这种。 img

# float实现

最简单的方式当然是通过浮动来实现了。
比如我的HTML结构:

.container:after{
  clear: both;
  content: '';
  height: 0;
  visibility: hidden;
  display: block;
}
.item{
  width: 50%;
  float: left;
}
@media screen and (min-width: 400px){
  .item{
    width: 25%;
    float: left;
  }
}

<div class='container'>
  <div class='item'></div>
  <div class='item'></div>
  <div class='item'></div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

通过这种方式实现的瀑布流,可以通过媒体查询设置显示的瀑布流行数,然而存在一定的缺陷,在某些情况下图片会被顶下去,导致留白,不是很完美。

# multi-columns

最早multi-columns是实现文章的多列排列,也可以拿来实现瀑布流

.container{
  column-count: 5;
}
.item{
  break-inside: avoid;
  box-sizing: border-box;
  padding: 5px;
}
@media screen and (min-width: 400px){
  .container{
    column-count: 4;
  }
}

<div class='container'>
  <div class='item'></div>
  <div class='item'></div>
  <div class='item'></div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

这种实现方式算是比较简单,而且没什么副作用。

# 总结

参考链接纯CSS实现瀑布流布局