圣杯布局和雙飛翼布局(前端面試必看)

事實上弛随,圣杯布局其實和雙飛翼布局是一回事。它們實現(xiàn)的都是三欄布局狱庇,兩邊的盒子寬度固定惊畏,中間盒子自適應(yīng),也就是我們常說的固比固布局密任。它們實現(xiàn)的效果是一樣的颜启,差別在于其實現(xiàn)的思想。

圣杯布局的出現(xiàn)是來自于a list part上的一篇文章In Search of the Holy Grail批什。比起雙飛翼布局农曲,它的起源不是源于對頁面的形象表達(dá)社搅。在西方驻债,圣杯是表達(dá)“渴求之物”的意思乳规。而雙飛翼布局則是源于淘寶的UED,可以說是靈感來自于頁面渲染合呐。一起來看看淘寶的頭部實現(xiàn):

image.png

通過縮放頁面就可以發(fā)現(xiàn)暮的,隨著頁面的寬度的變化,這三欄布局是中間盒子優(yōu)先渲染淌实,兩邊的盒子框子固定不變冻辩,即使頁面寬度變小,也不影響我們的瀏覽拆祈。注意:當(dāng)你縮放頁面的時候恨闪,寬度不能小于700PX,為了安全起見放坏,最好還是給body加一個最小寬度!
如果你有了那么一點(diǎn)理解以后咙咽,我們來看看圣杯布局的實現(xiàn):

第一步:給出HTML結(jié)構(gòu):
<header><h4>Header內(nèi)容區(qū)</h4></header>
<div class="container">
<div class="middle"><h4>中間彈性區(qū)</h4></div>
<div class="left"><h4>左邊欄</h4></div>
<div class="right"><h4>右邊欄</h4></div>
</div>
<footer><h4>Footer內(nèi)容區(qū)</h4></footer>

寫結(jié)構(gòu)的時候要注意,父元素的的三欄務(wù)必先寫中間盒子淤年。因為中間盒子是要被優(yōu)先渲染嘛~并且設(shè)置其自適應(yīng)钧敞,也就是width:100%。

第二步:給出每個盒子的樣式
header{width: 100%;height: 40px;background-color: darkseagreen;}
.container{ height:200px;overflow:hidden;}
.middle{width: 100%;height: 200px; background-color: deeppink;float:left;}
.left{ width: 200px;height: 200px;background-color: blue;float:left;}
.right{width: 200px;height: 200px;background-color: darkorchid;float:left;}
footer{width: 100%; height: 30px;background-color: darkslategray;}

第三步:看此時的效果圖

image.png

大家可以看到麸粮,三欄并沒有在父元素的一行顯示溉苛,就是因為中間盒子我們給了百分之百的寬度。所有左右兩個盒子才會被擠下來弄诲。
那么如何讓它們呈現(xiàn)出一行三列的效果呢愚战?那就要讓左邊的盒子要到中間盒子的最左邊,右邊的盒子到中間盒子的最右邊齐遵。換個想法凤巨,如果中間盒子不是100%的寬度,那么按照文檔流洛搀,左邊的盒子一定會在中間盒子的后面顯示敢茁,接著顯示右邊的盒子。但是現(xiàn)在中間盒子是滿屏了的留美,所以左右兩個盒子被擠到下一行顯示彰檬。我們要做到的是讓左右兩個盒子都上去。此時谎砾,CSS的負(fù)邊距(negative margin)該上陣了逢倍。

第四步:利用負(fù)邊距布局

1.讓左邊的盒子上去

需要設(shè)置其左邊距為負(fù)的中間盒子的寬度,也就是.left {margin-left:-100%;}景图。這樣左盒子才可以往最左邊移動较雕。

2.讓右邊的盒子上去

需要設(shè)置其左邊距為負(fù)的自己的寬度,也就是.right {margin-left:-200px;}。這樣右盒子才可以在一行的最右邊顯示出自己亮蒋。

第五步:看此時的效果圖

image.png

到這里扣典,是不是感覺很有成就感?但是很遺憾的告訴你慎玖,還沒結(jié)束哦贮尖!
我們現(xiàn)在的確是硬性的實現(xiàn)了固比固布局。但是要記住趁怔,中間盒子是自適應(yīng)的寬度湿硝,所以中間盒子里的內(nèi)容會被左右盒子給壓住一部分。
比如現(xiàn)在我給中間盒子加很多的內(nèi)容润努,大家看看效果圖:

image.png

所以,我們的工作還沒停止裁着。

第六步:讓中間自適應(yīng)的盒子安全顯示

首先:利用父級元素設(shè)置左右內(nèi)邊距的值秉沼,把父級的三個子盒子往中間擠矗积。

代碼如下:.container{ padding: 0 200px;} 這里的200px是左右盒子的寬度。
效果如下:

image.png

我們可以看到测砂,左右兩邊的內(nèi)邊距是有了呜投,但是中間盒子上的內(nèi)容還是被壓著。

其次:給左右兩個盒子加一個定位,加了定位之后左右兩個盒子就可以設(shè)置left和right值甜橱。

代碼如下:
.left{ position: relative; left: -200px;}
.right{position: relative;right: -210px;

第七步:看最終效果圖

image.png

現(xiàn)在镊掖,圣杯布局終于搞定了,也實現(xiàn)了我們要的效果,左右側(cè)的盒子固定,中間盒子自適應(yīng)苫昌,而且中間盒子的內(nèi)容完全不受影響。你是不是也懂了呢?


真心希望對你有幫助幸海。


作者:森西悠然
鏈接:http://www.reibang.com/p/f9bcddb0e8b4
來源:簡書
著作權(quán)歸作者所有蜡歹。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處涕烧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末月而,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子议纯,更是在濱河造成了極大的恐慌父款,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異憨攒,居然都是意外死亡世杀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門肝集,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞻坝,“玉大人,你說我怎么就攤上這事杏瞻∷叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵捞挥,是天一觀的道長浮创。 經(jīng)常有香客問我,道長砌函,這世上最難降的妖魔是什么斩披? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮讹俊,結(jié)果婚禮上垦沉,老公的妹妹穿的比我還像新娘。我一直安慰自己仍劈,他們只是感情好乡话,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耳奕,像睡著了一般绑青。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屋群,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天闸婴,我揣著相機(jī)與錄音,去河邊找鬼芍躏。 笑死邪乍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的对竣。 我是一名探鬼主播庇楞,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼否纬!你這毒婦竟也來了吕晌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤临燃,失蹤者是張志新(化名)和其女友劉穎睛驳,沒想到半個月后烙心,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乏沸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年淫茵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬跃。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡匙瘪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝶缀,到底是詐尸還是另有隱情丹喻,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布扼劈,位于F島的核電站驻啤,受9級特大地震影響菲驴,放射性物質(zhì)發(fā)生泄漏荐吵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一赊瞬、第九天 我趴在偏房一處隱蔽的房頂上張望先煎。 院中可真熱鬧,春花似錦巧涧、人聲如沸薯蝎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽占锯。三九已至,卻和暖如春缩筛,著一層夾襖步出監(jiān)牢的瞬間消略,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工瞎抛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺演,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓桐臊,卻偏偏與公主長得像胎撤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子断凶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

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

  • 稍微了解前端的人都知道伤提,圣杯布局和雙飛翼布局是前端面試時必問的問題,因為它既能體現(xiàn)你懂HTML結(jié)構(gòu)又能體現(xiàn)出你對D...
    森西悠然閱讀 77,348評論 46 173
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案认烁? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,751評論 1 92
  • 在前端布局中飘弧,事實上识藤,圣杯布局其實和雙飛翼布局是一回事。它們實現(xiàn)的都是三欄布局次伶,兩邊的盒子寬度固定痴昧,中間盒子自適應(yīng)...
    風(fēng)銘閱讀 1,463評論 1 6
  • 兩種布局的由來 這是需求導(dǎo)致。兩個需求: 一冠王,優(yōu)先加載中間的盒子赶撰;二,中間盒子能自適應(yīng)寬度柱彻,兩邊盒子不變豪娜。為了實現(xiàn)...
    印象rcj閱讀 444評論 0 0
  • css中的負(fù)邊距(negative margin)是布局中的一個常用技巧,只要運(yùn)用得合理常常會有意想不到的效果哟楷。很...
    studystudy閱讀 1,152評論 0 0