Vue2+CSS实现一个瀑布流布局案例

news/2024/11/20 8:26:18/

在练习代码的时候,看到了携程的首页下方的布局还挺好看

就是一个瀑布流的布局效果,在携程上是一共两列布局,然后每个格子的高度都会根据图片的高度做排布

一开始是想使用flex进行布局,先让每个格子各占百分之49,然后贴边留个空隙,一行两个格子然后换行就可以得到这个效果

但是写出来的时候想多了

因为flex布局的话,每行的最高高度一定是受到每行两个格子中最高的那个格子影响,也就是说:左边的高度只有100px的话,右边的是200px,下面那行的格子一定是在200px后面进行布局,然后左边的格子和下面那行就会有100px的距离

而这个瀑布流的效果是前后紧贴着的,所以我用flex布局就不成功了= =

然后翻资料学到了一个用css的多列布局(column)就可以去做到这个效果,就可以不需要跑去Jquery之家去找了

(这里就用vue2+css和模拟一些数据来做啦)


1、准备数据

      listBox: [{id: 1, // 编号images: 'https://img01.yzcdn.cn/vant/cat.jpeg', // 大图headline: '1太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}, {id: 2, // 编号images: 'https://note.mafengwo.net/img/c6/60/d51965185e339ecf184b358a82757b70.jpeg?imageMogr2%2Fthumbnail%2F1360x%2Fstrip%2Fquality%2F90', // 大图headline: '2太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}, {id: 3, // 编号images: 'https://note.mafengwo.net/img/51/a7/149ca089ea04674204100a0178511458.jpeg?imageMogr2%2Fthumbnail%2F1360x%2Fstrip%2Fquality%2F90', // 大图headline: '3太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}, {id: 4, // 编号images: 'https://note.mafengwo.net/img/c7/55/ead3994fbdd95bc77b59feed06a1db0e.jpeg?imageMogr2%2Fthumbnail%2F1360x%2Fstrip%2Fquality%2F90', // 大图headline: '4太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}, {id: 5, // 编号images: 'https://note.mafengwo.net/img/6a/23/3db9f119449633453e2a9b368d1d8023.jpeg?imageMogr2%2Fthumbnail%2F1360x%2Fstrip%2Fquality%2F90', // 大图headline: '5太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}, {id: 6, // 编号images: 'https://note.mafengwo.net/img/20/1d/9cfa0e8bea955ff45890714e2af3ad43.jpeg?imageMogr2%2Fthumbnail%2F1360x%2Fstrip%2Fquality%2F90', // 大图headline: '6太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}, {id: 7, // 编号images: 'https://note.mafengwo.net/img/fd/d1/2f3fb6ab810f86a927d5940175c27f38.jpeg?imageMogr2%2Fthumbnail%2F1360x%2Fstrip%2Fquality%2F90', // 大图headline: '7太湖有座岛,名叫“西山”', // 推荐文本userImg: 'https://p1-q.mafengwo.net/s15/M00/D7/1E/CoUBGV3Sr4yAV2q0AADUzHbBm_Y18.jpeg?imageMogr2%2Fthumbnail%2F%21200x200r%2Fgravity%2FCenter%2Fcrop%2F%21200x200%2Fquality%2F90', // 用户头像userName: '沃趣', // 用户名字pageView: 6666}]

2、渲染结构数据

  <div id="TestContainer"><div class="box" v-for="item in listBox" :key="item.id"><img :src="item.images" alt=""><h5>{{item.headline}}</h5></div></div>

3、在CSS上添加多列布局

1、多列布局需要添加在父盒子身上,也就是在上面的结构中的 #TestContainer这个盒子,box盒子是用来做循环的格子

#TestContainer{margin: 0 auto;width: 98%;background-color: pink;//添加上多列布局column-fill: balance;column-count: 2;column-gap: 1;.box{img{width: 100%;}}
}
</style>
属性描述
column-count指定分几列
column-fill

默认值,根据其他列属性值使列的高度尽可能平衡

(默认值就是balance,这里可以省略不写)

column-gap指定列和列之间的距离间隙

详细看这里

CSS column(多列布局) (biancheng.net)icon-default.png?t=N3I4http://c.biancheng.net/css3/column.html

4、效果

第一眼看上去是没有毛病的,然后在往下拉,会发现

 

 

第四次循环出来的图片和内容被分开的 ,这个就不是我想要的效果了

解决方法:给循环的div添加上这个样式:overflow: auto;

样式完整一点就是这样子

#TestContainer{margin: 0 auto;width: 98%;background-color: pink;//添加上多列布局column-count: 2;column-gap: 1;.box{overflow: auto;img{width: 100%;}}
}

 它的效果就下来了,这样子就完成了一个瀑布流的简单布局思密达~

 


http://www.ppmy.cn/news/79399.html

相关文章

【算法】算法学习五:加权图 | 狄克斯特拉算法

文章目录 一、加权图二、负权边三、狄克斯特拉算法3.1 理论知识3.2 案例说明3.3 Python代码实现 一、加权图 加权图是指在图的边上赋予了权重&#xff08;或距离&#xff09;的图。每条边都带有一个数值&#xff0c;表示该边的权重。这种权重可以表示不同的度量&#xff0c;如…

day18文件上传下载与三层架构思想

servlet文件上传 注意事项:在写了响应后,若后面还需要执行代码,需要添加return; apach的servlet3.0提供了文件上传的功能. **在客户端中的jsp如何上传文件:**使用form标签 使用input标签type的file属性 form表单中的的enctype必须加:使用二进制的方式进行传输,否则不能进行…

蓝精灵协会:如何将传统 IP 融入 Web3

作者&#xff1a;Cedric Hervet&#xff0c;联合创始人&#xff0c;创意总监 我和许多项目合作过&#xff0c;并且担任了近 30 年的艺术总监和创意总监。我的方法一直是创造同质化的宇宙&#xff0c;把观众带入并使他们产生梦想。但我也曾系统地寻找过那份额外的感动&#xff1…

NeRF-VAE:将场景看作一个分布【ICML‘2021】

文章目录 GQN网络介绍Amortized InferenceNeRF-VAE GQN网络介绍 论文标题&#xff1a;Neural scene representation and rendering 作者&#xff1a;S. M. Ali Eslami, Danilo Jimenez Rezende, et al. 期刊&#xff1a;Science 发表时间&#xff1a;2018/06/15 该文章提出…

map reduce实现累加器

需求&#xff1a;数组长度为100&#xff0c;每一项为对应下标&#xff0c;累加求和。 切题思路&#xff1a; 1.如何声明一个长度为100的数组&#xff1f;答&#xff1a;new Array(100) 2.数组每一项如何比前一项1 答&#xff1a;map(item,index)index为数组下标&#xff0c;…

清晰易懂IoC

1.IoC的目的在于让服务端的代码不需要改动 这段代码的问题在于&#xff0c;如果想要调用不同的dao层&#xff0c;就需要在服务端的代码Service层中进行改动 比如要调用dao1&#xff0c;Service层代码就是Dao dao1new Dao1() 比如要调用dao2&#xff0c;Service层代码就是Dao …

Qt 数据库使用小结---以QSQLITE为例

背景&#xff1a; 1、前面一直在使用的是MYSQL数据库。忽然有一次&#xff0c;去客户工控机上装MYSql发现安装一直报错&#xff0c; 最后&#xff0c;不得已&#xff0c;改用SQLITE2、我使用的是QT自带的QSQLITE&#xff0c;因为&#xff0c;安装QT时自带的就是这个数据库。 …

logstash同步数据从kafka到es集群

背景&#xff1a;需求是这样的&#xff0c;原始文件是txt文件&#xff08;每天300个文件&#xff09;&#xff0c;最终想要的结果是每天将txt中的数据加载到es中&#xff0c;开始的想法是通过logstash加载数据到es中&#xff0c;但是对logstash不太熟悉&#xff0c;不知道怎么讲…