瀑布流布局

Posted 前端精髓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了瀑布流布局相关的知识,希望对你有一定的参考价值。

要实现的效果如下图:

首先最容易想到的就是分两列,然后把内容添加进行就可以了。

  <style>
    .container 
      display: flex;
      flex-direction: row;
      justify-content: space-between;
      padding: 12px;
    
    .left,.right 
      margin-right: 6px;
      flex: 1;
    
  </style>
  <div class="container">
    <div class="left">
      <div style="height: 50px;background: red;"></div>
      <div style="height: 50px;background: pink;"></div>
    </div>
    <div class="right">
      <div style="height: 80px;background: blue;"></div>
      <div style="height: 50px;background: skyblue;"></div>
    </div>
  </div>

比较麻烦的就是API返回给我们的是一个列表,但是我们需要两个列表,需要JS进行拆分处理。

let left = []
let right = []
let data = [img1, img2, img3]
for (let i = 0; i < data.length; i++) 
  if (i % 2 === 0) 
    left.push(data[i])
   else 
    right.push(data[i])
  

优势:思路清晰简单,只需要更加列数然后添加图片即可,而且图片的顺序可以是从左往右。

CSS3 column 属性

关键思路:

1、column-count:指定列数
3、column-gap: 设置列之间的间距

关键代码:

<template>
  <div class="waterfall-width-column">
    <div class="image-box" v-for="img in imgList" :key="img">
      <img :src="img" alt="" />
    </div>
  </div>
</template>
<style lang="scss" scoped>
.waterfall-width-column 
  column-count: 3;
  column-gap: 10px;
  .image-box 
    img 
      display: block;
      width: 100%;
    
  

</style>

更加简单,不用额外计算,直接使用CSS渲染高效。劣势:图片的顺序是从上向下排列的,这个要看业务需求允不允许了。

以上是关于瀑布流布局的主要内容,如果未能解决你的问题,请参考以下文章

瀑布流布局顶端边距失效是怎么回事

h5瀑布流布局会留白

H5 图片瀑布流布局 - vue

WPF如何实现瀑布流布局?

前端之瀑布流布局(多种实现方案)

css 瀑布流布局问题 高手进