当前第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
以上就是实现瀑布流布局的俩种方法的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
javascript的方法是函数吗
html中表格动态添加的方法
html中引入外部页面的方法
@import怎么引入css文件?有什么方法
javascript中创建对象的方法有哪几种
elementui的默认样式修改方法分享
用css制作立体导航栏的方法
高手教您如何取消(加上)下划线样式?两大方法汇总
jquery中如何实现toggle方法
下载新浪微博视频和秒拍视频的方法
更多相关阅读请进入《方法》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 实现瀑布流布局的俩种方法