瀑布流布局

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

1.計(jì)算出瀏覽器可以橫向排列元素的個(gè)數(shù)(元素的寬度都是相同的):瀏覽器的寬度/元素的寬度晨缴;如果元素有內(nèi)外邊距和邊框们拙,可以通過(guò)outerWidth(true)獲取装盯。排列元素使用絕對(duì)定位position:absolute,其父元素使用相對(duì)定位position:reletive验夯。
2.定義一個(gè)用于存放元素高度和的數(shù)組猖吴,遍歷該數(shù)組找到數(shù)組中最小高度的元素,根據(jù)該元素的下標(biāo)計(jì)算出topleft值挥转。然后使用jQuery的css ()方法把下一行第一個(gè)元素放到該最小高度元素的下面海蔽。
3.重新定義數(shù)組的高度共屈,并遍歷,放置元素党窜。
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), //一個(gè)item的寬度
                $cols=Math.floor($(window).width()/$itemWidth); //一行所占的列數(shù)

            $("#ct").width($itemWidth*$cols).css("margin","0 auto");
            //設(shè)置元素ct的寬度并居中
            
            var hArr=[]; //聲明一個(gè)空數(shù)組,把前6個(gè)元素的高度放進(jìn)該數(shù)組

            $items.each(function(index,value){ 
            //遍歷每個(gè)元素,并接收兩個(gè)參數(shù)分別是元素的索引和元素的值
                var $itemHeigth=$items.eq(index).outerHeight(true);
                // 對(duì)應(yīng)元素的高度
                
                if(index<$cols){  //此時(shí)操作的是前六張照片
                    hArr[index]=$itemHeigth; //數(shù)組索引對(duì)應(yīng)元素的高度
                }else{
                    var $minHeight=Math.min.apply(null,hArr); //獲取數(shù)組內(nèi)高度最低的元素
                    var $minHeightIndex=$.inArray($minHeight,hArr); //獲取數(shù)組內(nèi)高度最低元素對(duì)應(yīng)的索引
                    $(value).css({  //將value轉(zhuǎn)換為jQuery對(duì)象,并設(shè)置樣式
                        "position":"absolute",
                        "top":$minHeight+"px",
                        "left":$minHeightIndex*$itemWidth+"px"
                    })
                    hArr[$minHeightIndex]+=$items.eq(index).outerHeight(true);
                    //重新定義數(shù)組內(nèi)個(gè)元素的高度
                }
            }); 
        }
    </script>
</body>
</html>

5.還有一種方法是用css3屬性也可以實(shí)現(xiàn)瀑布流的做法拗引。這種做法的特點(diǎn)是不需要計(jì)算窗口的寬度,瀏覽器會(huì)自動(dòng)計(jì)算幌衣,只需要設(shè)置元素的列寬矾削,代碼少,性能很高豁护。缺點(diǎn)就是列寬隨著瀏覽器窗口大小進(jìn)行改變哼凯,用戶體驗(yàn)不好。還有一點(diǎn)就是css3的做法圖片是按照垂直順序排列的楚里,打亂了圖片的顯示順序断部。
css3瀑布流

本文版權(quán)歸本人和饑人谷所有,轉(zhuǎn)載請(qǐng)注明來(lái)源班缎。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝴光,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子达址,更是在濱河造成了極大的恐慌蔑祟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沉唠,死亡現(xiàn)場(chǎng)離奇詭異疆虚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)满葛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門装蓬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人纱扭,你說(shuō)我怎么就攤上這事牍帚。” “怎么了乳蛾?”我有些...
    開(kāi)封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵暗赶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肃叶,道長(zhǎng)蹂随,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任因惭,我火速辦了婚禮岳锁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹦魔。我一直安慰自己激率,他們只是感情好咳燕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著乒躺,像睡著了一般招盲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘉冒,一...
    開(kāi)封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天曹货,我揣著相機(jī)與錄音,去河邊找鬼讳推。 笑死顶籽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的银觅。 我是一名探鬼主播蜕衡,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼设拟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起久脯,我...
    開(kāi)封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纳胧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后帘撰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體跑慕,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年摧找,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了核行。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹬耘,死狀恐怖芝雪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情综苔,我是刑警寧澤惩系,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站如筛,受9級(jí)特大地震影響堡牡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杨刨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一晤柄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妖胀,春花似錦芥颈、人聲如沸惠勒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捉撮。三九已至,卻和暖如春妇垢,著一層夾襖步出監(jiān)牢的瞬間巾遭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工闯估, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灼舍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓涨薪,卻偏偏與公主長(zhǎng)得像骑素,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刚夺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容