美文网首页
瀑布流布局

瀑布流布局

作者: 咩咩咩1024 | 来源:发表于2016-11-24 11:34 被阅读33次

一、瀑布流的布局原理是什么?

1.计算出浏览器可以横向排列元素的个数(元素的宽度都是相同的):浏览器的宽度/元素的宽度;如果元素有内外边距和边框,可以通过outerWidth(true)获取。排列元素使用绝对定位position:absolute,其父元素使用相对定位position:reletive
2.定义一个用于存放元素高度和的数组,遍历该数组找到数组中最小高度的元素,根据该元素的下标计算出topleft值。然后使用jQuery的css ()方法把下一行第一个元素放到该最小高度元素的下面。
3.重新定义数组的高度,并遍历,放置元素。
4.示范代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #ct{
            position: relative;
        }
        #ct:after{
            content: "";
            display: block;
            clear: both;
        }
        .item{
            /*position: absolute;*/
            width: 200px;
            margin-right: 10px;
            margin-top: 10px;
            transition: all 1s;
            float: left;
        }
        .wrap1{
            background: pink;
            height: 320px;
        }
        .wrap2{
            background: green;
            height: 200px;
        }
        .wrap3{
            background: blue;
            height: 380px;
        }
    </style>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>
</head>
<body>
    <div id="ct">
        <div class="item wrap1">1</div>
        <div class="item wrap2">2</div>
        <div class="item wrap3">3</div>
        <div class="item wrap2">4</div>
        <div class="item wrap1">5</div>
        <div class="item wrap3">6</div>
        <div class="item wrap1">7</div>
        <div class="item wrap3">8</div>
        <div class="item wrap2">9</div>
        <div class="item wrap3">10</div>
        <div class="item wrap1">11</div>
        <div class="item wrap1">12</div>
        <div class="item wrap3">13</div>
        <div class="item wrap3">14</div>
        <div class="item wrap1">15</div>
        <div class="item wrap2">16</div>
        <div class="item wrap3">17</div>
        <div class="item wrap2">18</div>
        <div class="item wrap3">19</div>
        <div class="item wrap1">20</div>
        <div class="item wrap2">21</div>
    </div>
    <script>
        $(window).on("load",function(){
            waterfall();
        });

        function waterfall(){
            var $items=$(".item"), //获取元素item
                $itemWidth=$items.eq(0).outerWidth(true), //一个item的宽度
                $cols=Math.floor($(window).width()/$itemWidth); //一行所占的列数

            $("#ct").width($itemWidth*$cols).css("margin","0 auto");
            //设置元素ct的宽度并居中
            
            var hArr=[]; //声明一个空数组,把前6个元素的高度放进该数组

            $items.each(function(index,value){ 
            //遍历每个元素,并接收两个参数分别是元素的索引和元素的值
                var $itemHeigth=$items.eq(index).outerHeight(true);
                // 对应元素的高度
                
                if(index<$cols){  //此时操作的是前六张照片
                    hArr[index]=$itemHeigth; //数组索引对应元素的高度
                }else{
                    var $minHeight=Math.min.apply(null,hArr); //获取数组内高度最低的元素
                    var $minHeightIndex=$.inArray($minHeight,hArr); //获取数组内高度最低元素对应的索引
                    $(value).css({  //将value转换为jQuery对象,并设置样式
                        "position":"absolute",
                        "top":$minHeight+"px",
                        "left":$minHeightIndex*$itemWidth+"px"
                    })
                    hArr[$minHeightIndex]+=$items.eq(index).outerHeight(true);
                    //重新定义数组内个元素的高度
                }
            }); 
        }
    </script>
</body>
</html>

5.还有一种方法是用css3属性也可以实现瀑布流的做法。这种做法的特点是不需要计算窗口的宽度,浏览器会自动计算,只需要设置元素的列宽,代码少,性能很高。缺点就是列宽随着浏览器窗口大小进行改变,用户体验不好。还有一点就是css3的做法图片是按照垂直顺序排列的,打乱了图片的显示顺序。
css3瀑布流

本文版权归本人和饥人谷所有,转载请注明来源。

相关文章

  • 瀑布流布局 的学习

    1- 实现瀑布流布局效果 瀑布流效果瀑布流代码木桶布局效果木桶布局代码瀑布流布局 2- 实现一个新闻瀑布流新闻...

  • 瀑布流、木桶布局

    瀑布流 瀑布流效果代码 木桶布局 木桶布局效果(加载有点慢)代码

  • 瀑布流照片墙布局

    title: 瀑布流照片墙布局 瀑布流概念 瀑布流布局是错落式的布局方式。它有一个特点,整个布局以列为单位,下一个...

  • CSS经典布局

    圣杯布局 瀑布流

  • 瀑布流

    瀑布流布局瀑布流jsonp新闻页

  • 瀑布流布局_木桶布局

    题目1: 实现一个瀑布流布局效果 瀑布流 题目2:实现木桶布局效果 木桶布局 题目3:**实现一个新闻瀑布流新闻网...

  • 瀑布流和懒加载结合

    实现一个瀑布流布局效果 瀑布流

  • 瀑布流

    什么是瀑布流: 欣赏 pinterest 样式分析 瀑布流,又被称作为瀑布流式布局,是一种比较流行的网站页面布局方...

  • 瀑布流

    1、什么是瀑布流 瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚...

  • 瀑布流的三种实现

    先来欣赏三个瀑布流的网站 pinterest 淘宝爱逛街 蘑菇街 什么是瀑布流? 瀑布流,又称瀑布流式布局。 这种...

网友评论

      本文标题:瀑布流布局

      本文链接:https://www.haomeiwen.com/subject/hryvpttx.html