当前第2页 返回上一页
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | window.onload = function () {
waterFall( 'main' , 'box' )
}
function waterFall(main, box) { var main = document.getElementById(main); var boxs = main.getElementsByClassName(box); var boxWidth = boxs[0].offsetWidth;
var mainWidh = main.offsetWidth;
var cols = Math. floor (mainWidh / boxWidth);
var heightArr = [];
for ( var i = 0; i < boxs.length; i++) { var boxHeight = boxs[i].offsetHeight; if (i < cols) {
boxs[i].style.top = '0px' ;
boxs[i].style.left = i * boxWidth + 'px' ;
} else {
var minBoxHeight = Math.min.apply(this, heightArr);
var minBoxIndex = getIndex(minBoxHeight, heightArr);
boxs[i].style.top = minBoxHeight + 'px' ;
boxs[i].style.left = minBoxIndex * boxWidth + 'px' ;
heightArr[minBoxIndex] += boxHeight;
}
}
}
function getIndex(val, arr) { for ( var i in arr) { if (val == arr[i]) { return i;
}
}
}
|
这种方案一开始给 .box 设置了 position: absolute;
所以在打开页面的时候,如果页面性能较差,可能会出现所有数据块堆叠在一起的情况
可以将 .box 的 position: absolute 替换为 float: left,然后在 js 添加定位样式的时候,再补上 position: absolute,视觉上会有所改观
二、纯 CSS3 实现瀑布流
CSS3 中新增了一个属性 column,可以通过规定列数 column-count,让浏览器自适应布局
只需要删除上面的 JavaScript 部分,然后修改 #main 和 .box:
1 2 3 4 5 6 7 8 9 10 11 12 | #main {
width: 1280px;
margin: 0 auto;
-webkit-column- count : 5;
column- count : 5;
-webkit-column-gap: 0;
column-gap: 0;
}.box {
padding: 7px;
box-sizing: border-box;
width: 256px;
}
|
但通过这种方式实现的瀑布流,实际上是按照纵向排列的,而之前的经典方案是按照横向排列的
作为一个 CSS3 的新属性,只有 IE10 及以上的浏览器才支持 column
相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
相关阅读:
怎样定义内联元素span的最小高度
html area图片热点如何使用
iframe的去边框和无边框有哪些操作方式
怎样用image来提交form
以上就是实现瀑布流布局的俩种方法的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
h5正常文本框提示语的实现方法
canvas处理图片的方法
html5有哪些清空画布的方法
flex布局和传统的布局有什么不同
h5有哪些清空画布方法
集成ueditor富文本编辑器的方法
javascript中map方法怎么用
写好接口文档的方法
html的表格应该怎样布局
h5表单验证有哪些方法
更多相关阅读请进入《方法》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 实现瀑布流布局的俩种方法