經(jīng)典布局之圣杯布局&雙飛翼布局

前言

所謂經(jīng)典转砖,說白了就是古老的東西,但是又是很有用的東西鲸伴。大多數(shù)前端府蔗,還有本菜晋控,都或多或少了解的圣杯布局和雙飛翼布局。

本文只對(duì)這兩種布局進(jìn)行簡單的探討(畢竟本菜真的好菜啊)

不管怎樣姓赤,寫作的好處自然很多赡译,可以鞏固自己的知識(shí),弘揚(yáng)程序猿一貫的樂于分享的精神不铆,也望日后能有溫故而知新的效果蝌焚。

概述

雖然兩種布局名稱不一樣,但圣杯布局和雙飛翼布局效果是一致的誓斥,都是三列布局综看,都是中間寬度自適應(yīng),左右寬度為定值的布局岖食,且都是讓瀏覽器將中間區(qū)塊優(yōu)先渲染。

效果圖如下:


圖1

兩種布局采用的策略

1. 圣杯布局:

html結(jié)構(gòu)

<div id="container">
    <div class="center">center</div>
    <div class="left">left</div>
    <div class="right">right</div>
</div>

1.1 父容器container設(shè)置左右margin 以容納左右兩列舞吭,container的width不設(shè)置泡垃,自適應(yīng)
1.2 三列都設(shè)置左浮動(dòng),center塊設(shè)置width為100%羡鸥,占滿父容器寬度蔑穴;
1.3 然后利用浮動(dòng)元素設(shè)置margin為一定負(fù)值時(shí)會(huì)跳到上一行的特性(注意:如果前面的元素不是浮動(dòng)元素,負(fù)margin是不會(huì)起到跳到上一行的效果的)惧浴,將左邊列的margin-left設(shè)置為-100%存和,也就是父容器的寬度,即center那列的寬度衷旅,將right塊的margin-left設(shè)置為負(fù)的right塊的寬度捐腿,比如right塊的寬度為100px,則設(shè)置margin-left為-100px;
1.4 設(shè)置左邊列和右邊列position為relative柿顶,并設(shè)置左邊列的left為負(fù)的左邊容器留白的寬度茄袖,設(shè)置右邊列的right為容器右邊留白的寬度

2. 雙飛翼布局

html結(jié)構(gòu)

<div id="container2">
    <div class="center2">
        <div class="wrap">center2</div>
    </div>
    <div class="left2">left2</div>
    <div class="right2">right2</div>
</div>

2.1 設(shè)置container2的width為100%
2.2 設(shè)置center2、left2和right2左浮動(dòng)嘁锯,center的width為100%宪祥;
2.3 設(shè)置left2 的margin-left為-100%,right2的margin-left為right2的寬度的負(fù)數(shù)
2.4 設(shè)置wrap 的左右margin分別為left2和right2的寬度家乘,適當(dāng)留出一點(diǎn)間隙蝗羊,width不設(shè)置為自適應(yīng)

完整實(shí)現(xiàn)代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圣杯布局雙飛翼布局</title>
    <style>
        *{
            margin: 0;
            padding:0;
        }
        body{
            text-align: center;
        }

        /*圣杯布局*/
        #container{
            padding:0 210px;
            overflow: hidden;
            font-size: 30px;
        }
        .left,
        .center,
        .right{
            float: left;
        }
        .center{
            width:100%;
            height: 50px;
            background: blue;
        }
        .left{
            position:relative;
            left: -210px;
            width:200px;
            height: 100px;
            margin-left: -100%;
            background: red;
        }
        .right{
            position: relative;
            right: -210px;
            width: 200px;
            height: 100px;
            margin-left: -200px;
            background: green;
        }
        
        /*雙飛翼布局*/
        #container2{
            width:100%;

        }
        .left2,
        .right2,
        .center2{
            float: left;
        }
        .center2{
            width:100%;
            /*height: 200px;*/
            
        }
        .center2 .wrap{
            height: 200px;
            margin-left: 210px;
            margin-right: 210px;
            background: #392;
        }
        .left2{
            width:200px;
            height: 100px;
            background: red;
            margin-left: -100%;
        }
        .right2{
            width:200px;
            height: 100px;
            background: blue;
            margin-left: -200px;
        }
    </style>
</head>
<body>
    <h2>圣杯布局</h2>
    <div id="container">
        <div class="center">center</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>

    <br><br>
    <h2>雙飛翼布局</h2>
    <div id="container2">
        <div class="center2">
            <div class="wrap">center2</div>
        </div>
        <div class="left2">left2</div>
        <div class="right2">right2</div>
    </div>
</body>
</html>

效果:


圖2

討論兩種布局的區(qū)別

從html上看,雙飛翼布局多了一個(gè)標(biāo)簽
從css上看仁锯,明顯地雙飛翼布局的css代碼更少

而且耀找,圣杯布局暴露出一個(gè)問題:


圖3

這個(gè)圖為瀏覽器窗口縮小到一定大小的時(shí)候,圣杯布局出現(xiàn)排版錯(cuò)亂的現(xiàn)象业崖,原因是圣杯布局的中間那塊寬度是自適應(yīng)的涯呻,瀏覽器縮小到中間的那塊寬度小于左右兩塊時(shí)凉驻,左邊的那塊margin-left不足以跑到上一行,因此出現(xiàn)了排版錯(cuò)亂的現(xiàn)象复罐。解決的辦法為container 設(shè)置min-width為左右兩塊的寬度較大者涝登。但是,這樣看來效诅,明顯是使用雙飛翼布局更優(yōu)胀滚。本人推薦用雙飛翼布局的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乱投,一起剝皮案震驚了整個(gè)濱河市咽笼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戚炫,老刑警劉巖剑刑,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異双肤,居然都是意外死亡施掏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門茅糜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來七芭,“玉大人,你說我怎么就攤上這事蔑赘±瓴担” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵缩赛,是天一觀的道長耙箍。 經(jīng)常有香客問我,道長酥馍,這世上最難降的妖魔是什么究西? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮物喷,結(jié)果婚禮上卤材,老公的妹妹穿的比我還像新娘。我一直安慰自己峦失,他們只是感情好扇丛,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尉辑,像睡著了一般帆精。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天卓练,我揣著相機(jī)與錄音隘蝎,去河邊找鬼。 笑死襟企,一個(gè)胖子當(dāng)著我的面吹牛嘱么,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽悼,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼曼振,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蔚龙?” 一聲冷哼從身側(cè)響起冰评,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎木羹,沒想到半個(gè)月后甲雅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坑填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年抛人,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穷遂。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖娱据,靈堂內(nèi)的尸體忽然破棺而出蚪黑,到底是詐尸還是另有隱情,我是刑警寧澤中剩,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布忌穿,位于F島的核電站,受9級(jí)特大地震影響结啼,放射性物質(zhì)發(fā)生泄漏掠剑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一郊愧、第九天 我趴在偏房一處隱蔽的房頂上張望朴译。 院中可真熱鬧,春花似錦属铁、人聲如沸眠寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盯拱。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狡逢,已是汗流浹背宁舰。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奢浑,地道東北人蛮艰。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像殷费,于是被迫代替她去往敵國和親印荔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案详羡? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,761評(píng)論 1 92
  • 在百度前端技術(shù)學(xué)院2016的春季任務(wù)中仍律,第一階段系列任務(wù)作為基礎(chǔ)練習(xí),主要是讓學(xué)員熟練html及css实柠。其中水泉,ta...
    夜來小星閱讀 542評(píng)論 0 7
  • 1.瀑布流布局 思路:要求:當(dāng)圖片寬度相同份殿,高度不同時(shí);如何做一面圖片墻嗽交;每次圖片加載到每列最低的位置卿嘲;1.圖片的...
    饑人谷_楠柒閱讀 2,465評(píng)論 2 54
  • 在前端布局中,事實(shí)上夫壁,圣杯布局其實(shí)和雙飛翼布局是一回事拾枣。它們實(shí)現(xiàn)的都是三欄布局,兩邊的盒子寬度固定盒让,中間盒子自適應(yīng)...
    風(fēng)銘閱讀 1,468評(píng)論 1 6
  • 三欄式布局 涉及浮動(dòng)和清除浮動(dòng)梅肤,主要講解“圣杯”和“雙飛翼”兩種解決方法。這兩種方法實(shí)現(xiàn)的都是三欄布局邑茄,兩邊的盒子...
    紫電倚青霜閱讀 2,374評(píng)論 0 6