前端布局非常重要的一環(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é)合。詳見:水平居中的3)和垂直居中的2)突那。
- 見水平居中的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)惫霸。詳見:水平居中的1)和垂直居中的1)。
- 見水平居中的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á)到水平垂直居中芝加。詳見:水平居中的4)和垂直居中的3)硅卢。
- 見水平居中的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á)到視覺上的多列布局。
- 用法:先將左框設(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;
}
等分布局
公式轉(zhuǎn)化:
l = w * n + g * (n-1) -> l = w * n + g * n - g -> l + g = (w + g) * n
因此,我們需要解決兩個(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á)到視覺上的等高格粪。
- 用法:將父框設(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í),撐滿窗口
全屏布局的方法
1)使用position
(1)原理仔沿、用法
- 原理:將上下部分固定坐桩,中間部分使用定寬+自適應(yīng)+兩塊高度一樣高。
- 用法:見實(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á)到全屏布局成福。
- 用法:見實(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以下不兼容
1)使用flex
(1)原理奴艾、用法
- 原理:通過(guò)靈活使用CSS3布局利器flex中的flex屬性和flex-direction屬性以達(dá)到全屏布局净当。
- 用法:見實(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) |