幾種常見的 CSS 布局

本文概要

本文將介紹如下幾種常見的布局:

單列布局

兩列自適應(yīng)布局

圣飛布局和雙飛翼布局

偽等高布局

粘連布局

一奋蔚、單列布局

常見的單列布局有兩種:

header,content和footer等寬的單列布局

header與footer等寬,content略窄的單列布局

1.如何實現(xiàn)

對于第一種,先通過對header,content,footer統(tǒng)一設(shè)置width:1000px;或者max-width:1000px(這兩者的區(qū)別是當(dāng)屏幕小于1000px時拳话,前者會出現(xiàn)滾動條,后者則不會种吸,顯示出實際寬度);然后設(shè)置margin:auto實現(xiàn)居中即可得到弃衍。

.header{

margin:0auto;

max-width:960px;

height:100px;

background-color:?blue;

}

.content{

margin:0auto;

max-width:960px;

height:400px;

background-color:?aquamarine;

}

.footer{

margin:0auto;

max-width:960px;

height:100px;

background-color:?aqua;

}

對于第二種,header坚俗、footer的內(nèi)容寬度不設(shè)置镜盯,塊級元素充滿整個屏幕岸裙,但header、content和footer的內(nèi)容區(qū)設(shè)置同一個width速缆,并通過margin:auto實現(xiàn)居中哥桥。

.header{

margin:0auto;

max-width:960px;

height:100px;

background-color:?blue;

}

.nav{

margin:0auto;

max-width:800px;

background-color:?darkgray;

height:50px;

}

.content{

margin:0auto;

max-width:800px;

height:400px;

background-color:?aquamarine;

}

.footer{

margin:0auto;

max-width:960px;

height:100px;

background-color:?aqua;

}

二、兩列自適應(yīng)布局

兩列自適應(yīng)布局是指一列由內(nèi)容撐開激涤,另一列撐滿剩余寬度的布局方式

1.float+overflow:hidden

如果是普通的兩列布局,浮動+普通元素的margin便可以實現(xiàn)判呕,但如果是自適應(yīng)的兩列布局倦踢,利用float+overflow:hidden便可以實現(xiàn),這種辦法主要通過overflow觸發(fā)BFC,而BFC不會重疊浮動元素侠草。由于設(shè)置overflow:hidden并不會觸發(fā)IE6-瀏覽器的haslayout屬性辱挥,所以需要設(shè)置zoom:1來兼容IE6-瀏覽器。具體代碼如下:

left

right

right

.parent{

overflow:?hidden;

zoom:1;

}

.left{

float:?left;

margin-right:20px;

}

.right{

overflow:?hidden;

zoom:1;

}

注意點:如果側(cè)邊欄在右邊時边涕,注意渲染順序晤碘。即在HTML中,先寫側(cè)邊欄后寫主內(nèi)容

2.Flex布局

Flex布局功蜓,也叫彈性盒子布局园爷,區(qū)區(qū)簡單幾行代碼就可以實現(xiàn)各種頁面的的布局。

//html部分同上

.parent{

display:flex;

}

.right?{

margin-left:20px;

flex:1;

}

3.grid布局

Grid布局式撼,是一個基于網(wǎng)格的二維布局系統(tǒng)童社,目的是用來優(yōu)化用戶界面設(shè)計。

//html部分同上

.parent?{

display:grid;

grid-template-columns:auto1fr;

grid-gap:20px

}

三著隆、三欄布局

特征:中間列自適應(yīng)寬度扰楼,旁邊兩側(cè)固定寬度,實現(xiàn)三欄布局有多種方式(可以猛戳實現(xiàn)三欄布局的幾種方法),本文著重介紹圣杯布局和雙飛翼布局美浦。

1.圣杯布局

① 特點

比較特殊的三欄布局弦赖,同樣也是兩邊固定寬度,中間自適應(yīng)浦辨,唯一區(qū)別是dom結(jié)構(gòu)必須是先寫中間列部分蹬竖,這樣實現(xiàn)中間列可以優(yōu)先加載。

.container?{

padding-left:220px;//為左右欄騰出空間

padding-right:220px;

}

.left?{

float:?left;

width:200px;

height:400px;

background:?red;

margin-left:-100%;

position:?relative;

left:-220px;

}

.center?{

float:?left;

width:100%;

height:500px;

background:?yellow;

}

.right?{

float:?left;

width:200px;

height:400px;

background:?blue;

margin-left:-200px;

position:?relative;

right:-220px;

}

圣杯布局

② 實現(xiàn)步驟

三個部分都設(shè)定為左浮動流酬,否則左右兩邊內(nèi)容上不去案腺,就不可能與中間列同一行。然后設(shè)置center的寬度為100%(實現(xiàn)中間列內(nèi)容自適應(yīng))康吵,此時劈榨,left和right部分會跳到下一行

通過設(shè)置margin-left為負(fù)值讓left和right部分回到與center部分同一行

通過設(shè)置父容器的padding-left和padding-right,讓左右兩邊留出間隙晦嵌。

通過設(shè)置相對定位同辣,讓left和right部分移動到兩邊拷姿。

③ 缺點

center部分的最小寬度不能小于left部分的寬度,否則會left部分掉到下一行

如果其中一列內(nèi)容高度拉長(如下圖)旱函,其他兩列的背景并不會自動填充响巢。(借助偽等高布局可解決)

④ 偽等高布局

等高布局是指子元素在父元素中高度相等的布局方式。等高布局的實現(xiàn)包括偽等高和真等高,偽等高只是看上去等高而已,真等高是實實在在的等高棒妨。

此處我們通過偽等布局便可解決圣杯布局的第二點缺點踪古,因為背景是在padding區(qū)域顯示的,設(shè)置一個大數(shù)值的padding-bottom券腔,再設(shè)置相同數(shù)值的負(fù)的margin-bottom伏穆,并在所有列外面加上一個容器,并設(shè)置overflow:hidden把溢出背景切掉纷纫。這種可能實現(xiàn)多列等高布局枕扫,并且也能實現(xiàn)列與列之間分隔線效果,結(jié)構(gòu)簡單辱魁,兼容所有瀏覽器烟瞧。新增代碼如下:


.center,

.left,

.right?{

padding-bottom:10000px;

margin-bottom:-10000px;

}

.container?{

padding-left:220px;

padding-right:220px;

overflow:?hidden;//把溢出背景切掉

}

2.雙飛翼布局

① 特點

同樣也是三欄布局,在圣杯布局基礎(chǔ)上進(jìn)一步優(yōu)化染簇,解決了圣杯布局錯亂問題参滴,實現(xiàn)了內(nèi)容與布局的分離。而且任何一欄都可以是最高欄锻弓,不會出問題卵洗。

.container?{

min-width:600px;//確保中間內(nèi)容可以顯示出來,兩倍left寬+right寬

}

.left?{

float:?left;

width:200px;

height:400px;

background:?red;

margin-left:-100%;

}

.center?{

float:?left;

width:100%;

height:500px;

background:?yellow;

}

.center?.inner?{

margin:0200px;//新增部分

}

.right?{

float:?left;

width:200px;

height:400px;

background:?blue;

margin-left:-200px;

}

雙飛翼布局

② 實現(xiàn)步驟(前兩步與圣杯布局一樣)

三個部分都設(shè)定為左浮動弥咪,然后設(shè)置center的寬度為100%过蹂,此時,left和right部分會跳到下一行聚至;

通過設(shè)置margin-left為負(fù)值讓left和right部分回到與center部分同一行酷勺;

center部分增加一個內(nèi)層div,并設(shè)margin: 0 200px扳躬;

③ 缺點

多加一層 dom 樹節(jié)點脆诉,增加渲染樹生成的計算量。

3.兩種布局實現(xiàn)方式對比:

兩種布局方式都是把主列放在文檔流最前面贷币,使主列優(yōu)先加載击胜。

兩種布局方式在實現(xiàn)上也有相同之處,都是讓三列浮動役纹,然后通過負(fù)外邊距形成三列布局偶摔。

兩種布局方式的不同之處在于如何處理中間主列的位置:

圣杯布局是利用父容器的左、右內(nèi)邊距+兩個從列相對定位促脉;

雙飛翼布局是把主列嵌套在一個新的父級塊中利用主列的左辰斋、右外邊距進(jìn)行布局調(diào)整

四策州、粘連布局

1.特點

有一塊內(nèi)容<main>,當(dāng)<main>的高康足夠長的時候宫仗,緊跟在<main>后面的元素<footer>會跟在<main>元素的后面够挂。

當(dāng)<main>元素比較短的時候(比如小于屏幕的高度),我們期望這個<footer>元素能夠“粘連”在屏幕的底部

當(dāng)main足夠長時

當(dāng)main比較短時

具體代碼如下:

main

main

main

footer

*?{

margin:0;

padding:0;

}

html,

body?{

height:100%;//高度一層層繼承下來

}

#wrap?{

min-height:100%;

background:?pink;

text-align:?center;

overflow:?hidden;

}

#wrap?.main?{

padding-bottom:50px;

}

#footer?{

height:50px;

line-height:50px;

background:?deeppink;

text-align:?center;

margin-top:-50px;

}

2.實現(xiàn)步驟

(1)footer必須是一個獨立的結(jié)構(gòu),與wrap沒有任何嵌套關(guān)系

(2)wrap區(qū)域的高度通過設(shè)置min-height藕夫,變?yōu)橐暱诟叨?/p>

(3)footer要使用margin為負(fù)來確定自己的位置

(4)在main區(qū)域需要設(shè)置 padding-bottom孽糖。這也是為了防止負(fù) margin 導(dǎo)致 footer 覆蓋任何實際內(nèi)容。

如果覺得文章對你有些許幫助毅贮,歡迎在我的GitHub博客點贊和關(guān)注办悟,感激不盡!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫩码,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子罪既,更是在濱河造成了極大的恐慌钠右,老刑警劉巖趣钱,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡兼贸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門饥脑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阿蝶,“玉大人,你說我怎么就攤上這事柬甥∫” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵苛蒲,是天一觀的道長卤橄。 經(jīng)常有香客問我,道長臂外,這世上最難降的妖魔是什么窟扑? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮漏健,結(jié)果婚禮上嚎货,老公的妹妹穿的比我還像新娘。我一直安慰自己蔫浆,他們只是感情好殖属,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓦盛,像睡著了一般忱辅。 火紅的嫁衣襯著肌膚如雪七蜘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天墙懂,我揣著相機(jī)與錄音橡卤,去河邊找鬼。 笑死损搬,一個胖子當(dāng)著我的面吹牛碧库,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巧勤,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嵌灰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颅悉?” 一聲冷哼從身側(cè)響起沽瞭,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剩瓶,沒想到半個月后驹溃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡延曙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年豌鹤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枝缔。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡布疙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愿卸,到底是詐尸還是另有隱情灵临,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布趴荸,位于F島的核電站俱诸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赊舶。R本人自食惡果不足惜睁搭,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笼平。 院中可真熱鬧园骆,春花似錦、人聲如沸寓调。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晌涕,卻和暖如春滋捶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背余黎。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工重窟, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惧财。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓巡扇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親垮衷。 傳聞我的和親對象是個殘疾皇子厅翔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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

  • 本文概要 本文將介紹如下幾種常見的布局: 其中實現(xiàn)三欄布局有多種方式,本文著重介紹圣杯布局和雙飛翼布局搀突。另外幾種可...
    浪里行舟閱讀 975評論 4 15
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案刀闷? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,751評論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)仰迁。 注意:講述HT...
    kismetajun閱讀 27,476評論 1 45
  • 1甸昏、垂直對齊 如果你用CSS,則你會有困惑:我該怎么垂直對齊容器中的元素轩勘?現(xiàn)在筒扒,利用CSS3的Transform怯邪,...
    kiddings閱讀 3,164評論 0 11
  • 高中畢業(yè)也有兩年了 晚上和陳媽聊天绊寻,那是遲到的元旦的祝福,她卻說不晚悬秉!十一點了澄步,老師還都是比學(xué)生睡的晚呀! 高一下...
    杜灝閱讀 333評論 3 6