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

愛生活蔬崩,不愛黑眼圈

稍微了解前端的人都知道铺纽,圣杯布局和雙飛翼布局是前端面試時必問的問題趟咆,因?yàn)樗饶荏w現(xiàn)你懂HTML結(jié)構(gòu)又能體現(xiàn)出你對DIV+CSS布局的掌握呵扛,畢竟我們學(xué)習(xí)CSS主要就是為了更好地布局帶來最好的用戶體驗(yàn)嘛~

事實(shí)上电湘,圣杯布局其實(shí)和雙飛翼布局是一回事隔节。它們實(shí)現(xiàn)的都是三欄布局,兩邊的盒子寬度固定寂呛,中間盒子自適應(yīng)怎诫,也就是我們常說的固比固布局。它們實(shí)現(xiàn)的效果是一樣的贷痪,差別在于其實(shí)現(xiàn)的思想幻妓。

圣杯布局的出現(xiàn)是來自于a list part上的一篇文章In Search of the Holy Grail。比起雙飛翼布局劫拢,它的起源不是源于對頁面的形象表達(dá)肉津。在西方,圣杯是表達(dá)“渴求之物”的意思舱沧。而雙飛翼布局則是源于淘寶的UED妹沙,可以說是靈感來自于頁面渲染。一起來看看淘寶的頭部實(shí)現(xiàn):

雙飛翼布局

通過縮放頁面就可以發(fā)現(xiàn)熟吏,隨著頁面的寬度的變化距糖,這三欄布局是中間盒子優(yōu)先渲染,兩邊的盒子框子固定不變牵寺,即使頁面寬度變小悍引,也不影響我們的瀏覽。注意:當(dāng)你縮放頁面的時候帽氓,寬度不能小于700PX吗铐,為了安全起見,最好還是給body加一個最小寬度!
如果你有了那么一點(diǎn)理解以后杏节,我們來看看圣杯布局的實(shí)現(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àn)橹虚g盒子是要被優(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;}

第三步:看此時的效果圖

中間的三欄并沒有在一行內(nèi)顯示

大家可以看到,三欄并沒有在父元素的一行顯示嫉鲸,就是因?yàn)橹虚g盒子我們給了百分之百的寬度市咽。所有左右兩個盒子才會被擠下來澡刹。
那么如何讓它們呈現(xiàn)出一行三列的效果呢密强?那就要讓左邊的盒子要到中間盒子的最左邊酸员,右邊的盒子到中間盒子的最右邊。換個想法蛀恩,如果中間盒子不是100%的寬度,那么按照文檔流,左邊的盒子一定會在中間盒子的后面顯示拓萌,接著顯示右邊的盒子。但是現(xiàn)在中間盒子是滿屏了的升略,所以左右兩個盒子被擠到下一行顯示微王。我們要做到的是讓左右兩個盒子都上去。此時品嚣,CSS的負(fù)邊距(negative margin)該上陣了炕倘。

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

1.讓左邊的盒子上去

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

2.讓右邊的盒子上去

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

第五步:看此時的效果圖

實(shí)現(xiàn)固比固布局

到這里,是不是感覺很有成就感册养?但是很遺憾的告訴你东帅,還沒結(jié)束哦!
我們現(xiàn)在的確是硬性的實(shí)現(xiàn)了固比固布局球拦。但是要記住靠闭,中間盒子是自適應(yīng)的寬度,所以中間盒子里的內(nèi)容會被左右盒子給壓住一部分坎炼。
比如現(xiàn)在我給中間盒子加很多的內(nèi)容愧膀,大家看看效果圖:
中間盒子的內(nèi)容被蓋住

所以,我們的工作還沒停止谣光。

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

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

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

利用父級的內(nèi)邊距將盒子往中間擠

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

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

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

第七步:看最終效果圖

圣杯布局大功告成啦孙乖!

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


真心希望對你有幫助资厉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厅缺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子酌住,更是在濱河造成了極大的恐慌店归,老刑警劉巖阎抒,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酪我,死亡現(xiàn)場離奇詭異,居然都是意外死亡且叁,警方通過查閱死者的電腦和手機(jī)都哭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逞带,“玉大人欺矫,你說我怎么就攤上這事≌姑ィ” “怎么了穆趴?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遇汞。 經(jīng)常有香客問我未妹,道長,這世上最難降的妖魔是什么空入? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任络它,我火速辦了婚禮,結(jié)果婚禮上歪赢,老公的妹妹穿的比我還像新娘化戳。我一直安慰自己,他們只是感情好埋凯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布点楼。 她就那樣靜靜地躺著,像睡著了一般白对。 火紅的嫁衣襯著肌膚如雪盟步。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天躏结,我揣著相機(jī)與錄音却盘,去河邊找鬼狰域。 笑死,一個胖子當(dāng)著我的面吹牛黄橘,可吹牛的內(nèi)容都是我干的兆览。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼塞关,長吁一口氣:“原來是場噩夢啊……” “哼抬探!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帆赢,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤小压,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后椰于,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怠益,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年瘾婿,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜻牢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡偏陪,死狀恐怖抢呆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笛谦,我是刑警寧澤抱虐,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站饥脑,受9級特大地震影響恳邀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜好啰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一轩娶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧框往,春花似錦鳄抒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秉版,卻和暖如春贤重,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背清焕。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工并蝗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祭犯,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓滚停,卻偏偏與公主長得像沃粗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子键畴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案最盅? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評論 1 92
  • 在前端布局中,事實(shí)上起惕,圣杯布局其實(shí)和雙飛翼布局是一回事涡贱。它們實(shí)現(xiàn)的都是三欄布局,兩邊的盒子寬度固定惹想,中間盒子自適應(yīng)...
    風(fēng)銘閱讀 1,454評論 1 6
  • css中的負(fù)邊距(negative margin)是布局中的一個常用技巧问词,只要運(yùn)用得合理常常會有意想不到的效果。很...
    studystudy閱讀 1,130評論 0 0
  • 兩種布局的由來 這是需求導(dǎo)致勺馆。兩個需求: 一戏售,優(yōu)先加載中間的盒子侨核;二草穆,中間盒子能自適應(yīng)寬度,兩邊盒子不變搓译。為了實(shí)現(xiàn)...
    印象rcj閱讀 440評論 0 0
  • 圣杯布局 在html中悲柱,先把中間的主區(qū)塊middle放在容器的最前面,接著是left些己,最后是right豌鸡。這樣可以先...
    Maggie_77閱讀 412評論 0 0