作者:無(wú)悔銘
https://segmentfault.com/a/1190000013565024
前端布局非常重要的一環(huán)就是頁(yè)面框架的搭建鞍陨,也是最基礎(chǔ)的一環(huán)。在頁(yè)面框架的搭建之中阻塑,又有居中布局蓝撇、多列布局以及全局布局,今天我們就來(lái)總結(jié)總結(jié)前端干貨中的CSS布局陈莽。
居中布局
水平居中
1)使用inline-block+text-align
(1)原理渤昌、用法
- 原理:先將子框由塊級(jí)元素改變?yōu)樾袃?nèi)塊元素,再通過(guò)設(shè)置行內(nèi)塊元素居中以達(dá)到水平居中走搁。
- 用法:對(duì)子框設(shè)置display:inline-block独柑,對(duì)父框設(shè)置text-align:center。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.child{
display:inline-block;
}
.parent{
text-align:center;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):兼容性好私植,甚至可以兼容ie6忌栅、ie7
- 缺點(diǎn):child里的文字也會(huì)水平居中,可以在.child添加text-align:left;還原
2)使用table+margin
(1)原理兵琳、用法
- 原理:先將子框設(shè)置為塊級(jí)表格來(lái)顯示(類似 <table>)狂秘,再設(shè)置子框居中以達(dá)到水平居中骇径。
- 用法:對(duì)子框設(shè)置display:table,再設(shè)置margin:0 auto者春。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.child {
display:table;
margin:0 auto;
}
(3)優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):只設(shè)置了child破衔,ie8以上都支持
- 缺點(diǎn):不支持ie6、ie7,將div換成table
3)使用absolute+transform
(1)原理钱烟、用法
- 原理:將子框設(shè)置為絕對(duì)定位晰筛,移動(dòng)子框,使子框左側(cè)距離相對(duì)框左側(cè)邊框的距離為相對(duì)框?qū)挾鹊囊话胨┫偻ㄟ^(guò)向左移動(dòng)子框的一半寬度以達(dá)到水平居中读第。當(dāng)然,在此之前拥刻,我們需要設(shè)置父框?yàn)橄鄬?duì)定位怜瞒,使父框成為子框的相對(duì)框。
- 用法:對(duì)父框設(shè)置position:relative般哼,對(duì)子框設(shè)置position:absolute吴汪,left:50%,transform:translateX(-50%)蒸眠。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
position:relative;
}
.child {
position:absolute;
left:50%;
transform:translateX(-50%);
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):居中元素不會(huì)對(duì)其他的產(chǎn)生影響
- 缺點(diǎn):transform屬于css3內(nèi)容漾橙,兼容性存在一定問(wèn)題,高版本瀏覽器需要添加一些前綴
4)使用flex+margin
(1)原理楞卡、用法
- 原理:通過(guò)CSS3中的布局利器flex將子框轉(zhuǎn)換為flex item霜运,再設(shè)置子框居中以達(dá)到居中。
- 用法:先將父框設(shè)置為display:flex蒋腮,再設(shè)置子框margin:0 auto淘捡。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
display:flex;
}
.child {
margin:0 auto;
}
(3)優(yōu)缺點(diǎn)
- 缺點(diǎn):低版本瀏覽器(ie6 ie7 ie8)不支持
5)使用flex+justify-content
(1)原理、用法
- 原理:通過(guò)CSS3中的布局利器flex中的justify-content屬性來(lái)達(dá)到水平居中徽惋。
- 用法:先將父框設(shè)置為display:flex案淋,再設(shè)置justify-content:center。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
display:flex;
justify-content:center;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):設(shè)置parent即可
- 缺點(diǎn):低版本瀏覽器(ie6 ie7 ie8)不支持
垂直居中
1)使用table-cell+vertical-align
(1)原理险绘、用法
- 原理:通過(guò)將父框轉(zhuǎn)化為一個(gè)表格單元格顯示(類似 <td> 和 <th>)踢京,再通過(guò)設(shè)置屬性,使表格單元格內(nèi)容垂直居中以達(dá)到垂直居中宦棺。
- 用法:先將父框設(shè)置為display:table-cell瓣距,再設(shè)置vertical-align:middle。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
display:table-cell;
vertical-align:middle;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):兼容性較好代咸,ie8以上均支持
2)使用absolute+transform
(1)原理蹈丸、用法
- 原理:類似于水平居中時(shí)的absolute+transform原理。將子框設(shè)置為絕對(duì)定位,移動(dòng)子框逻杖,使子框上邊距離相對(duì)框上邊邊框的距離為相對(duì)框高度的一半奋岁,再通過(guò)向上移動(dòng)子框的一半高度以達(dá)到垂直居中。當(dāng)然荸百,在此之前闻伶,我們需要設(shè)置父框?yàn)橄鄬?duì)定位,使父框成為子框的相對(duì)框够话。
- 用法:先將父框設(shè)置為position:relative蓝翰,再設(shè)置子框position:absolute,top:50%女嘲,transform:translateY(-50%)畜份。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
position:relative;
}
.child {
position:absolute;
top:50%;
transform:translateY(-50%);
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):居中元素不會(huì)對(duì)其他的產(chǎn)生影響
- 缺點(diǎn):transform屬于css3內(nèi)容,兼容性存在一定問(wèn)題欣尼,高版本瀏覽器需要添加一些前綴
3)使用flex+align-items
(1)原理爆雹、用法
- 原理:通過(guò)設(shè)置CSS3中的布局利器flex中的屬性align-times,使子框垂直居中愕鼓。
- 用法:先將父框設(shè)置為position:flex顶别,再設(shè)置align-items:center。
(1)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
position:flex;
align-items:center;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):只設(shè)置parent
- 缺點(diǎn):兼容性存在一定問(wèn)題
水平垂直居中
1)使用absolute+transform
(1)原理拒啰、用法
- 原理:將水平居中時(shí)的absolute+transform和垂直居中時(shí)的absolute+transform相結(jié)合。詳見(jiàn):水平居中的3)和垂直居中的2)完慧。
- 見(jiàn)水平居中的3)和垂直居中的2)谋旦。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
position:relative;
}
.child {
position:absolute;
left:50%;
top:50%;
transform:tranplate(-50%,-50%);
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):child元素不會(huì)對(duì)其他元素產(chǎn)生影響
- 缺點(diǎn):兼容性存在一定問(wèn)題
2)使用inline-block+text-align+table-cell+vertical-align
(1)原理、用法
- 原理:使用inline-block+text-align水平居中屈尼,再用table-cell+vertical-align垂直居中册着,將二者結(jié)合起來(lái)。詳見(jiàn):水平居中的1)和垂直居中的1)脾歧。
- 見(jiàn)水平居中的1)和垂直居中的1)甲捏。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
text-align:center;
display:table-cell;
vertical-align:middle;
}
.child {
display:inline-block;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):兼容性較好
3)使用flex+justify-content+align-items
(1)原理、用法
- 原理:通過(guò)設(shè)置CSS3布局利器flex中的justify-content和align-items鞭执,從而達(dá)到水平垂直居中司顿。詳見(jiàn):水平居中的4)和垂直居中的3)。
- 見(jiàn)水平居中的4)和垂直居中的3)兄纺。
(2)代碼實(shí)例
<div class="parent">
<div class="child>DEMO</div>
</div>
.parent {
display:flex;
justify-content:center;
align-items:center;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):只設(shè)置了parent
- 缺點(diǎn):兼容性存在一定問(wèn)題
多列布局
定寬+自適應(yīng)
1)使用float+overflow
(1)原理大溜、用法
- 原理:通過(guò)將左邊框脫離文本流,設(shè)置右邊規(guī)定當(dāng)內(nèi)容溢出元素框時(shí)發(fā)生的事情以達(dá)到多列布局估脆。
- 用法:先將左框設(shè)置為float:left钦奋、width、margin-left,再設(shè)置實(shí)際的右框overflow:hidden付材。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.left {
float:left;
width:100px;
margin-right:20px;
}
.right {
overflow:hidden;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):簡(jiǎn)單
- 缺點(diǎn):不支持ie6
2)使用float+margin
(1)原理朦拖、用法
- 原理:通過(guò)將左框脫離文本流,加上右框向右移動(dòng)一定的距離厌衔,以達(dá)到視覺(jué)上的多列布局璧帝。
- 用法:先將左框設(shè)置為float:left、margin-left葵诈,再設(shè)置右框margin-left裸弦。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.left {
float:left;
width:100px;
}
.right {
margin-left:120px;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):簡(jiǎn)單,易理解
- 缺點(diǎn):兼容性存在一定問(wèn)題作喘,ie6下有3px的bug理疙。right下的p清除浮動(dòng)將產(chǎn)生bug
3)使用float+margin(改良版)
(1)原理、用法
- 原理:在1)的基礎(chǔ)之上泞坦,通過(guò)向右框添加一個(gè)父框窖贤,再加上設(shè)置左、右父框?qū)傩允怪a(chǎn)生BFC以去除bug贰锁。
- 用法:先將左框設(shè)置為float:left赃梧、margin-left、position:relative豌熄,再設(shè)置右父框float:right授嘀、width:100%、margin-left锣险,最后設(shè)置實(shí)際的右框margin-left蹄皱。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="rigth-fix">
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
.left {
float:left;
width:100px;
position:relative;
}
.right-fix {
float:right;
width:100%;
margin-left:-100px;
}
.right {
margin-left:120px;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):簡(jiǎn)單,易理解
4)使用table
(1)原理芯肤、用法
- 原理:通過(guò)將父框設(shè)置為表格巷折,將左右邊框轉(zhuǎn)化為類似于同一行的td,從而達(dá)到多列布局崖咨。
- 用法:先將父框設(shè)置為display:table锻拘、width:100%、table-layout:fixed击蹲,再設(shè)置左右框display:table-cell署拟,最后設(shè)置左框width、padding-right际邻。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.parent {
display:table;
width:100%;
table-layout:fixed;
}
.left {
width:100px;
padding-right:20px;
}
.right,.left {
display:table-cell;
}
5)使用flex
(1)原理芯丧、用法
- 原理:通過(guò)設(shè)置CSS3布局利器flex中的flex屬性以達(dá)到多列布局。
- 用法:先將父框設(shè)置為display:flex世曾,再設(shè)置左框flex:1缨恒,最后設(shè)置左框width谴咸、margin-right。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.parent {
display:flex;
}
.left {
width:100px;
margin-right:20px;
}
.right {
flex:1;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):flex很強(qiáng)大
- 缺點(diǎn):兼容性存在一定問(wèn)題骗露,性能存在一定問(wèn)題
兩列定寬+一列自適應(yīng)
(1)原理岭佳、用法
- 原理:這種情況與兩列定寬查不多。
- 用法:先將左萧锉、中框設(shè)置為float:left珊随、width、margin-right柿隙,再設(shè)置右框overflow:hidden叶洞。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="center">
<p>center</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.left,.center {
float:left;
width:100px;
margin-right:20px;
}
.right {
overflow:hidden;
}
不定寬+自適應(yīng)
1)使用float+overflow
(1)原理、用法
- 原理:這種情況與兩列定寬查不多禀崖。
- 用法:先將左框設(shè)置為float:left衩辟、margin-right,再設(shè)置右框overflow: hidden波附,最后設(shè)置左框中的內(nèi)容width艺晴。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.left{
float: left;
margin-right: 20px;
}
.right{
overflow: hidden;
}
.left p{
width: 200px;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):簡(jiǎn)單
- 缺點(diǎn):ie6下兼容性存在一定問(wèn)題
2)使用table
(1)原理、用法
- 原理:通過(guò)將父框改變?yōu)楸砀竦牛瑢⒆笥铱蜣D(zhuǎn)換為類似于同一行的td以達(dá)到多列布局封寞,設(shè)置父框?qū)挾?00%,給左框子元素一個(gè)固定寬度從而達(dá)到自適應(yīng)仅财。
- 用法:先將父框設(shè)置為display: table狈究、width: 100%,再設(shè)置左盏求、右框display: table-cell谦炒,最后設(shè)置左框width: 0.1%、padding-right以及左框中的內(nèi)容width风喇。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.parent{
display: table; width: 100%;
}
.left,.right{
display: table-cell;
}
.left{
width: 0.1%;
padding-right: 20px;
}
.left p{
width:200px;
}
(3)優(yōu)缺點(diǎn)
- 缺點(diǎn):ie6 ie7不支持
3)使用flex
(1)原理、用法
- 原理:通過(guò)設(shè)置CSS3布局利器flex中的flex屬性以達(dá)到多列布局缕探,加上給左框中的內(nèi)容定寬魂莫、給右框設(shè)置flex達(dá)到不定款+自適應(yīng)。
- 用法:先將父框設(shè)置為display:flex爹耗,再設(shè)置右框flex:1耙考,最后設(shè)置左框margin-right:20px、左框中的內(nèi)容width潭兽。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.parent {
display:flex;
}
.left {
margin-right:20px;
}
.right {
flex:1;
}
.left p{
width: 200px;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):flex很強(qiáng)大
- 缺點(diǎn):兼容性存在一定問(wèn)題倦始,性能存在一定問(wèn)題
兩列不定寬+一列自適應(yīng)
(1)原理、用法
- 原理:這個(gè)情況與一列不定寬+一列自適應(yīng)查不多山卦。
- 用法:先將左鞋邑、中框設(shè)置為float:left、margin-right,再設(shè)置右框overflow:hidden枚碗,最后給左中框中的內(nèi)容設(shè)置width逾一。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="center">
<p>center</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.left,.center{
float: left;
margin-right: 20px;
}
.right{
overflow: hidden;
}
.left p,.center p{
width: 100px;
}
等分布局
[圖片上傳失敗...(image-f9b7a1-1521591082092)]
公式轉(zhuǎn)化:
l = w * n + g * (n-1) -> l = w * n + g * n - g -> l + g = (w + g) * n
[圖片上傳失敗...(image-d990ad-1521591082092)]
因此,我們需要解決兩個(gè)問(wèn)題:
- 如何讓總寬度增加g(即:L+g)
- 如何讓每個(gè)寬包含g(即:w+g)
1)使用float
(1)原理肮雨、用法
- 原理:增大父框的實(shí)際寬度后遵堵,使用CSS3屬性box-sizing進(jìn)行布局的輔助。
- 用法:先將父框設(shè)置為margin-left: -*px怨规,再設(shè)置子框float: left陌宿、width: 25%、padding-left波丰、box-sizing: border-box壳坪。
(2)代碼實(shí)例
<div class="parent">
<div class="column"><p>1</p></div>
<div class="column"><p>2</p></div>
<div class="column"><p>3</p></div>
<div class="column"><p>4</p></div>
</div>
.parent{
margin-left: -20px;//l增加g
}
.column{
float: left;
width: 25%;
padding-left: 20px;
box-sizing: border-box;//包含padding區(qū)域 w+g
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):兼容性較好
- 缺點(diǎn):ie6 ie7百分比兼容存在一定問(wèn)題
2)使用table
(1)原理、用法
- 原理:通過(guò)增加一個(gè)父框的修正框呀舔,增大其寬度弥虐,并將父框轉(zhuǎn)換為table,將子框轉(zhuǎn)換為tabel-cell進(jìn)行布局媚赖。
- 用法:先將父框的修正框設(shè)置為margin-left: -*px霜瘪,再設(shè)置父框display: table、width:100%惧磺、table-layout: fixed颖对,設(shè)置子框display: table-cell、padding-left磨隘。
(2)代碼實(shí)例
<div class="parent-fix">
<div class="parent">
<div class="column"><p>1</p></div>
<div class="column"><p>2</p></div>
<div class="column"><p>3</p></div>
<div class="column"><p>4</p></div>
</div>
</div>
.parent-fix{
margin-left: -20px;//l+g
}
.parent{
display: table;
width:100%;
table-layout: fixed;
}
.column{
display: table-cell;
padding-left: 20px;//w+g
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):結(jié)構(gòu)和塊數(shù)無(wú)關(guān)聯(lián)
- 缺點(diǎn):增加了一層
3)使用flex
(1)原理缤底、用法
- 原理:通過(guò)設(shè)置CSS3布局利器flex中的flex屬性以達(dá)到等分布局。
- 用法:將父框設(shè)置為display: flex番捂,再設(shè)置子框flex: 1个唧,最后設(shè)置子框與子框的間距margin-left。
(2)代碼實(shí)例
<div class="parent">
<div class="column"><p>1</p></div>
<div class="column"><p>2</p></div>
<div class="column"><p>3</p></div>
<div class="column"><p>4</p></div>
</div>
.parent{
display: flex;
}
.column{
flex: 1;
}
.column+.column{
margin-left:20px;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):代碼量少设预,與塊數(shù)無(wú)關(guān)
- 缺點(diǎn):兼容性存在一定問(wèn)題
定寬+自適應(yīng)+兩塊高度一樣高
1)使用float
(1)原理徙歼、用法
- 原理:通過(guò)過(guò)分加大左右子框的高度,輔助超出隱藏鳖枕,以達(dá)到視覺(jué)上的等高魄梯。
- 用法:將父框設(shè)置overflow: hidden,再設(shè)置左右子框padding-bottom: 9999px宾符、margin-bottom: -9999px酿秸,最后設(shè)置左框float: left、width魏烫、margin-right辣苏,右框overflow: hidden肝箱。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
p{
background: none!important;
}
.left,.right{
background: #444;
}
.parent{
overflow: hidden;
}
.left,.right{
padding-bottom: 9999px;
margin-bottom: -9999px;
}
.left{
float: left;
width: 100px;
margin-right: 20px;
}
.right{
overflow: hidden;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):兼容性好
- 缺點(diǎn):偽等高,不是真正意義上的等高
2)使用table
(1)原理考润、用法
- 原理:將父框轉(zhuǎn)化為tabel狭园,將子框轉(zhuǎn)化為tabel-cell布局,以達(dá)到定寬+自適應(yīng)+兩塊高度一樣高糊治。
- 用法:先將父框設(shè)置為display:table唱矛、width:100%、table-layout:fixed井辜,再設(shè)置左右框?yàn)閐isplay:table-cell绎谦,最后設(shè)置左框width、padding-right粥脚。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.parent {
display:table;
width:100%;
table-layout:fixed;
}
.left {
width:100px;
padding-right:20px;
}
.right,.left {
display:table-cell;
}
3)使用flex
(1)原理窃肠、用法
- 原理:通過(guò)設(shè)置CSS3布局利器flex中的flex屬性以達(dá)到定寬+自適應(yīng)+兩塊高度一樣高。
- 用法:將父框設(shè)置為display: flex刷允,再設(shè)置左框width冤留、margin-right,最后設(shè)置右框flex:1树灶。
(2)代碼實(shí)例
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
.parent {
display:flex;
}
.left {
width:100px;
margin-right:20px;
}
.right {
flex:1;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):代碼少纤怒,flex很強(qiáng)大
- 缺點(diǎn):兼容性存在一定問(wèn)題
4)使用display
(1)原理、用法
- 原理:通過(guò)設(shè)置display中的CSS3的-webkit-box屬性以達(dá)到定寬+自適應(yīng)+兩塊高度一樣高天通。
- 用法:將父框設(shè)置為display: -webkit-box泊窘、width: 100%,再設(shè)置左框width像寒、margin-right烘豹,最后設(shè)置右框-webkit-box-flex: 1。
(2)代碼實(shí)例
<div class="parent">
<div class="left">left</div>
<div class="right">right </div>
</div>
.parent {
width: 100%;
display: -webkit-box;
}
.left {
width:100px;
margin-right: 20px;
}
.right {
-webkit-box-flex: 1;
}
(3)優(yōu)缺點(diǎn)
- 缺點(diǎn):兼容性存在較大的問(wèn)題
全屏布局
全屏布局的特點(diǎn)
- 滾動(dòng)條不是全局滾動(dòng)條诺祸,而是出現(xiàn)在內(nèi)容區(qū)域里携悯,往往是主內(nèi)容區(qū)域
- 瀏覽器變大時(shí),撐滿窗口
全屏布局的方法
[圖片上傳失敗...(image-56e6be-1521591082090)]
1)使用position
(1)原理筷笨、用法
- 原理:將上下部分固定蚌卤,中間部分使用定寬+自適應(yīng)+兩塊高度一樣高。
- 用法:見(jiàn)實(shí)例奥秆。
(2)代碼實(shí)例
<div class="parent">
<div class="top">top</div>
<div class="left">left</div>
<div class="right">
<div class="inner">right</div>
</div>
<div class="bottom">bottom</div>
</div>
html,body,.parent{
margin:0;
height:100%;
overflow:hidden;
}
body{
color:white;
}
.top{
position:absolute;
top:0;
left:0;
right:0;
height:100px;
background:blue;
}
.left{
position:absolute;
left:0;
top:100px;
bottom:50px;
width:200px;
background:red;
}
.right{
position:absolute;
left:200px;
top:100px;
bottom:50px;
right:0;
background:pink;
overflow: auto;
}
.right .inner{
min-height: 1000px;
}
.bottom{
position:absolute;
left:0;
right:0;
bottom:0;
height:50px;
background: black;
}
(3)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):兼容性好,ie6下不支持
2)使用flex
(1)原理咸灿、用法
- 原理:通過(guò)靈活使用CSS3布局利器flex中的flex屬性和flex-direction屬性以達(dá)到全屏布局构订。
- 用法:見(jiàn)實(shí)例。
(2)代碼實(shí)例
<div class="parent">
<div class="top">top</div>
<div class="middle">
<div class="left">left</div>
<div class="right">
<div class="inner">right</div>
</div>
</div>
<div class="bottom">bottom</div>
</div>
html,body,.parent{
margin:0;
height:100%;
overflow:hidden;
}
body{
color: white;
}
.parent{
display: flex;
flex-direction: column;
}
.top{
height:100px;
background: blue;
}
.bottom{
height:50px;
background: black;
}
.middle{
flex:1;
display:flex;
}
.left{
width:200px;
background: red;
}
.right{
flex: 1;
overflow: auto;
background:pink;
}
.right .inner{
min-height: 1000px;
}
(3)優(yōu)缺點(diǎn)
- 缺點(diǎn):兼容性差避矢,ie9及ie9以下不兼容
[圖片上傳失敗...(image-333939-1521591082086)]
1)使用flex
(1)原理悼瘾、用法
- 原理:通過(guò)靈活使用CSS3布局利器flex中的flex屬性和flex-direction屬性以達(dá)到全屏布局囊榜。
- 用法:見(jiàn)實(shí)例。
(2)代碼實(shí)例
<div class="parent">
<div class="top">top</div>
<div class="middle">
<div class="left">left</div>
<div class="right">
<div class="inner">right</div>
</div>
</div>
<div class="bottom">bottom</div>
</div>
html,body,.parent{
margin:0;
height:100%;
overflow:hidden;
}
body{
color:white;
}
.parent{
display:flex;
flex-direction:column;
}
.top{
background:blue;
}
.bottom{
background:black;
}
.middle{
flex:1;
display:flex;
}
.left{
background: red;
}
.right{
flex:1;
overflow:auto;
background: pink;
}
.right .inner{
min-height:1000px;
}
全屏布局相關(guān)方案的兼容性亥宿、性能和自適應(yīng)一覽表
方案 | 兼容性 | 性能 | 是否自適應(yīng) |
---|---|---|---|
Position | 好 | 好 | 部分自適應(yīng) |
Flex | 較差 | 差 | 可自適應(yīng) |
Grid | 差 | 較好 | 可自適應(yīng) |
當(dāng)然卸勺,最最最最最后,如果您喜歡這片文章烫扼,可以瘋狂點(diǎn)贊和收藏喔J锴蟆!