热门标签 | 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
推荐阅读
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • css,背景,位置,y,background, ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • canvas画图经常发现他是模糊的。解决这个问题主要从两个方面下手。改变canvas渲染的像素情况:画1像素的线条看起来模糊不清,好像更宽的样子。解决方 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • 一、Notification通知是属于桌面性质的通知,在显示器的右下角蹦出二、兼容性IE14以及其他桌面浏览器都支持WebNotification,目前 ... [详细]
  • div#container{width:600px;height:600px;background-color:#00 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 小程序引入外部文件的方式是:import**.wxss;因为业务需要,正在开发的小程序中需要使用iconfont,很容易想到了H5的引 ... [详细]
  • 安卓编年史(4):Android
    安卓0.9显示着横屏的主屏幕——后续一些版本无法实现的一个特性[RonAmadeo供图]尽管从功能上很难将模拟器和操作系统区分开,但安卓0.9是第一个支持横屏显示的版本。更让人惊讶 ... [详细]
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社区 版权所有