热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现瀑布流的3种方式

看一下我的HTML结构<divclass=i

看一下我的HTML结构




标题

详情



纯CSS方式

.item-box {
-moz-column-count:2; /* Firefox */ // 2列
-webkit-column-count:2; /* Safari 和 Chrome */ // 2列
column-count:2; // 2列
width: 690px;
margin: 0 auto;
}
.more-subject-item {
width: 330px;
border-radius: 10px;
background-color: #fff;
padding-bottom: 20px;
margin-bottom: 30px;
-moz-page-break-inside: avoid; // 配合完成瀑布流
-webkit-column-break-inside: avoid; // 配合完成瀑布流
break-inside: avoid; // 配合完成瀑布流
}

此方法亲测有效,简单方便,但是好像有兼容问题,部分手机不可用,还没发现什么手机不能用,自己取舍吧
效果:
在这里插入图片描述

js方法

css部分

.item-box {
width: 690px;
margin: 0 auto;
position: relative; // 重点
}
.more-subject-item {
width: 330px;
border-radius: 10px;
background-color: #fff;
padding-bottom: 20px;
margin-bottom: 30px;
margin-right: 30px;
float: left; 重点
}
.more-subject-item:nth-child(2n) {
margin: 0;
}

js部分

mounted() {
this.waterFall(); // 生命周期中调用
},
methods: {
waterFall() {
// 1- 确定图片的宽度 - 滚动条宽度
let columns = 2; //2列
let pageWidth = window.getComputedStyle(this.$refs.itemBox).width; // 取外层盒子的宽度
pageWidth = itemBoxWidth.substring(0,itemBoxWidth.length-2); // 取到的宽度会有px ,所以切割字符串,去掉px
let arr = []; // 存高度的数组
let list = this.$refs.subjectItem; // 获取循环出来的小盒子
for (let i = 0;i var height = window.getComputedStyle(list[i]).height; // 获取每一个盒子的高度
var width = window.getComputedStyle(list[i]).width; // 获取每个盒子的宽度,我的盒子宽度是一样的
height = height.substring(0,height.length-2);
width = width.substring(0,width.length-2);
var itemWidth = pageWidth - width; // 因为我的只有两列且宽度都一样,所以计算第二列的left就可以
if (i let h = Number(height) + 20
arr.push(h);
} else { // 其他行的
var minBoxheight = Math.min.apply(this,arr); // 取数组中最小的值
var minBoxIndex = this.getMinIndex(minBoxheight,arr) // 取数组中最小值得索引
list[i].style.top = minBoxheight + 'px'; // 定位
list[i].style.left = minBoxIndex * itemWidth + 'px'; // 定位
list[i].style.position = 'absolute'; // 定位
// 数组中的最小值要累加当前元素的高度 20 是因为我想要上下元素间距20px
arr[minBoxIndex] = Number(arr[minBoxIndex]) + Number(height) + 20;
}
};
},
// 取指定元素的索引
getMinIndex (value,arr) {
for (var i in arr) {
if (arr[i] == value) {
return i;
}
}
}
}

效果:
在这里插入图片描述
与纯CSS的区别就是,纯CSS是按顺序排列的,js的是随机按照位置大小排列的。

两个数组的方法 (百度用的)





标题

详情






标题

详情




css

.item-box {
width: 690px;
margin: 0 auto;
display: flex;
justify-content: space-between;;
}
.more-subject-item {
width: 330px;
border-radius: 10px;
background-color: #fff;
padding-bottom: 20px;
margin-bottom: 30px;
}
.item-right,.item-left {
display: flex;
flex-direction: column;
}

js

levelListLeft () {
return this.levelList.filter((item,index) => {
return index % 2 == 0;
})
},
levelListRight () {
return this.levelList.filter((item,index) => {
return index % 2 == 1;
})
}

效果:
在这里插入图片描述
以上都是亲测有效的,移动端的方法,不喜勿喷,也欢迎指教


版权声明:本文为weixin_41673550原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41673550/article/details/102976742
推荐阅读
  • 动画队列的设计目的是为了确保一系列任务能够按照预定顺序执行,每个任务只有在其前一个任务完成后才开始。这些任务既可以是同步的,也可以是异步的。本文将探讨jQuery动画系统中的队列机制,并介绍如何使用队列来优化动画效果。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 利用CSS3和React实现数字滚动动画组件
    在前端开发中,数字滚动动画是一个常见的需求。本文将详细介绍如何使用CSS3和React构建一个数字滚动动画组件,包括组件的代码实现和样式设计。如果您对HTML版本感兴趣,欢迎留言获取。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本文详细探讨了JavaScript中四种获取CSS样式的不同方法:style、currentStyle、getComputedStyle和getBoundingClientRect。每种方法的适用场景及其兼容性问题,并提供了解决方案。 ... [详细]
  • Vue项目中应用骨架屏实践
    在当前开发的项目中,由于登录过程涉及多次重定向,导致用户体验不佳。为了改善这一状况,本文介绍了如何使用vue-skeleton-webpack-plugin插件在Vue项目中实现骨架屏,以减少用户感受到的白屏时间。 ... [详细]
  • 在进行微信小程序开发过程中,遇到了需要实现类似微信朋友圈那样的长文本折叠功能的需求。本文将详细探讨其实现方法及注意事项。 ... [详细]
  • 本文基于作者使用Flask框架处理后端逻辑和原生JavaScript及jQuery进行前端开发的经验,详细介绍了如何在前后端之间高效地传输JSON数据。文章不仅涵盖了技术实现细节,还提供了实用的代码示例。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
author-avatar
mobiledu2502936307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有