百思不得其解
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>瀑布流</title> </head> <style type="text/css"> *{ margin:0; padding: 0; border-style: none; } body{ background-color:#e4dbe4; } #wrap{ width: auto; height: auto; margin:0 auto; padding:30px; } #wrap>div{ width:280px; height: auto; float: left; margin:10px; box-sizing:border-box; background-color: rgb(255,255,255); border-radius: 5px; padding: 10px; } #wrap >div >img{ width: 100%; } #wrap > div >a{ padding: 10px; display: block; text-decoration: none; color: black; text-align: center; font-weight: bold; font-size: 18px; border-style: none; overflow:hidden; } </style> <body> <div id="wrap"> <div> <img src="images/1.png"> <a href="http://www.imooc.com" target="_blank">第一怪 竹筒当烟袋</a> </div> <div> <img src="images/2.png"> <a href="http://www.imooc.com" target="_blank">第二怪 草帽当锅盖</a> </div> <div> <img src="images/3.png"> <a href="http://www.imooc.com" target="_blank">第三怪 这边下雨那边晒</a> </div> <div> <img src="images/4.png"> <a href="http://www.imooc.com" target="_blank">第四怪 四季服装同穿戴</a> </div> <div> <img src="images/5.png"> <a href="http://www.imooc.com" target="_blank">第五怪 火车没有汽车快</a> </div> <div> <img src="images/6.png"> <a href="http://www.imooc.com" target="_blank">第六怪 火车不通国内通国外</a> </div> <div> <img src="images/7.png"> <a href="http://www.imooc.com" target="_blank">第七怪 老奶爬山比猴快</a> </div> <div> <img src="images/8.png"> <a href="http://www.imooc.com" target="_blank">第八怪 鞋子后面多一块</a> </div> <div> <img src="images/9.png"> <a href="http://www.imooc.com" target="_blank">第九怪 脚趾四季露在外</a> </div> <div> <img src="images/10.png"> <a href="http://www.imooc.com" target="_blank">第十怪 鸡蛋拴着卖</a> </div> <div> <img src="images/11.png"> <a href="http://www.imooc.com" target="_blank">第十一怪 粑粑叫饵块</a> </div> <div> <img src="images/12.png"> <a href="http://www.imooc.com" target="_blank">第十二怪 花生蚕豆数着卖</a> </div> <div> <img src="images/13.png"> <a href="http://www.imooc.com" target="_blank">第十三怪 三个蚊子一盘菜</a> </div> <div> <img src="images/14.png"> <a href="http://www.imooc.com" target="_blank">第十四怪 四个老鼠一麻袋</a> </div> <div> <img src="images/15.png"> <a href="http://www.imooc.com" target="_blank">第十五怪 树上松毛扭着卖</a> </div> <div> <img src="images/16.png"> <a href="http://www.imooc.com" target="_blank">第十六怪 姑娘叫老太</a> </div> <div> <img src="images/17.png"> <a href="http://www.imooc.com" target="_blank">第十七怪 小和尚可以谈恋爱</a> </div> <div> <img src="images/18.png"> <a href="http://www.imooc.com" target="_blank">第十八怪 背着娃娃谈恋爱</a> </div> </div> <script type="text/javascript"> window.onload=function(){ var wrap=document.getElementById('wrap'); //console.log(wrap); var boxes=wrap.getElementsByTagName('div'); watefall(wrap,boxes); }; function watefall(wrap,boxes){ // 获取盒子的宽度加内外边距20 var boxWidth=boxes[0].offsetWidth + 20; // 获取屏幕的宽度 var windowWidth = document.documentElement.clientWidth; // 将屏幕的宽度除以盒子的宽度能获取一行可以放多少个 var colsNumber = Math.floor(windowWidth / boxWidth); // 设置容器的宽度 , 可以居中显示 wrap.style.width=boxWidth*colsNumber +'px'; // 定义一个数组并存储每一列的高度 var everyHeight = new Array(); for (var i = 0; i < boxes.length; i++) { // console.log(i); if(i<colsNumber){ if(i==0){ // console.log(boxes[i].offsetHeight); } everyHeight[i]=boxes[i].offsetHeight+20; // console.log(everyHeight); }else{ var minHeight=Math.min.apply(null,everyHeight); // console.log(Math.min(everyHeight)); // console.log(Math.min.apply(null,everyHeight)); var minIndex = getIndex(minHeight,everyHeight); var leftValue=boxes[minIndex].offsetLeft - 10; boxes[i].style.position='absolute'; boxes[i].style.top=minHeight +'px'; boxes[i].style.left=leftValue +'px'; everyHeight[minIndex] +=boxes[i].offsetHeight; } } }; function getIndex(minHeight ,everyHeight){ for(index in everyHeight){ if(everyHeight[index] == minHeight){ return index; } } } </script> </body> </html>
我在每个div中的a标签设置成了block块级元素,然后给a标签的内边距设置了padding:10px撑了20px出来。div的高度设置是auto自动撑开的,瀑布流布局用js代码获取div的高度boxes[i].offsetHeight竟然获取的a标签没撑开之前的高度? 这是为什么 我想我已经表达的很清楚。求老师指点迷津
2
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕慕子
2019-03-20 18:47:26
同学你好, offsetHeight是获取元素的高度包括元素height、内边距和边框,但是不包括外边距
所以如下方式获取div元素高度, a是它的子元素,这里div的高度是由子元素撑开的,这里获取到的这个高度是包括a占据的高度的(包括其内边距),不过由于offsetHeight的特点,导致没有获取到div的外边距值,整体高度有误差,这里在获取高度之后,添加下外边距值,如下:
同理在获取最小列的高度时,也需要添加这个外边距值,例:
最外层盒子设置内边距导致第一行没有设置定位的元素距离顶部有30px距离,第二行元素设置绝对定位参考的是页面顶部位置,导致第二行与第一行之间没有间距,取消合作的外边距,例:
如果还有不明白的地方可以在问答区提问,老师帮你找到合适的解决方案.
如果解决了你的疑惑,欢迎采纳
祝学习愉快~~~
前端小白入门系列课程
- 参与学习 人
- 提交作业 11218 份
- 解答问题 36713 个
从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星