瀑布流布局的实现方式
要实现的效果如下图:
首先最容易想到的就是分两列,然后把内容添加进去就可以了。
<style>
.container {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 12px;
}
.left {
margin-right: 6px;
flex: 1;
}
.right {
margin-left: 6px;
flex: 1;
}
style>
<div class="container">
<div class="left">
<div class="image-box"><img :src="img" alt="" />div>
<div class="image-box"><img :src="img" alt="" />div>
div>
<div class="right">
<div class="image-box"><img :src="img" alt="" />div>
<div class="image-box"><img :src="img" alt="" />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: 2;
column-gap: 10px;
.image-box {
img {
display: block;
width: 100%;
}
}
}
style>
更加简单,不用额外计算,直接使用CSS渲染高效。劣势:图片的顺序是从上向下排列的,这个要看业务需求允不允许了。
评论