前言
總括: 不管是三欄布局還是兩欄布局都是我們在平時項目里經(jīng)常使用的哀蘑,也許你不知道什么事三欄布局什么是兩欄布局但實際已經(jīng)在用诚卸,或許你知道三欄布局的一種或兩種方法,但實際操作中也只會依賴那某一種方法绘迁,本文具體的介紹了三欄布局的四種方法合溺,并介紹了它的使用場景。
原文地址:CSS三欄布局的四種方法
知乎專欄&&簡書專題:前端進(jìn)擊者(知乎)&&前端進(jìn)擊者(簡書)
博主博客地址:Damonare的個人博客
年華一去不復(fù)返缀台,事業(yè)放棄再難成辫愉。
正文
所謂三欄布局就是指頁面分為左中右三部分然后對中間一部分做自適應(yīng)的一種布局方式。
1.絕對定位法
HTML代碼如下:
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
CSS代碼如下:
//簡單的進(jìn)行CSS reset
body,html{
height:100%;
padding: 0px;
margin:0px;
}
//左右絕對定位
.left,.right{
position: absolute;
top:0px;
background: red;
height:100%;
}
.left{
left:0;
width:100px;
}
.right{
right:0px;
width:200px;
}
//中間使用margin空出左右元素所占據(jù)的空間
.main{
margin:0px 100px 200px 0px;
height:100%;
background: blue;
}
該方法有個明顯的缺點,就是如果中間欄含有最小寬度限制适荣,或是含有寬度的內(nèi)部元素的妖,當(dāng)瀏覽器寬度小到一定程度,會發(fā)生層重疊的情況高蜂。
2. 圣杯布局
HTML代碼如下:
//注意元素次序
<div class="main">Main</div>
<div class="left">Left</div>
<div class="right">Right</div>
CSS代碼如下:
//習(xí)慣性的CSS reset
body,html{
height:100%;
padding: 0;
margin: 0
}
//父元素body空出左右欄位
body {
padding-left: 100px;
padding-right: 200px;
}
//左邊元素更改
.left {
background: red;
width: 100px;
float: left;
margin-left: -100%;
position: relative;
left: -100px;
height: 100%;
}
//中間部分
.main {
background: blue;
width: 100%;
height: 100%;
float: left;
}
//右邊元素定義
.right {
background: red;
width: 200px;
height: 100%;
float: left;
margin-left: -200px;
position: relative;
right: -200px;
}
相關(guān)解釋如下:
- (1)中間部分需要根據(jù)瀏覽器寬度的變化而變化,所以要用100%,這里設(shè)左中右向左浮動律罢,因為中間100%,左層和右層根本沒有位置上去
- (2)把左層margin負(fù)100后,發(fā)現(xiàn)left上去了误辑,因為負(fù)到出窗口沒位置了沧踏,只能往上挪
- (3)按第二步這個方法,可以得出它只要挪動窗口寬度那么寬就能到最左邊了巾钉,利用負(fù)邊距翘狱,把左右欄定位
- (4)但由于左右欄遮擋住了中間部分,于是采用相對定位方法砰苍,各自相對于自己把自己挪出去潦匈,得到最終結(jié)果
3. 雙飛翼布局
HTML代碼如下:
<div class="main">
<div class="inner">
Main
</div>
</div>
<div class="left">Left</div>
<div class="right">Right</div>
CSS代碼如下:
//CSS reset
body,html {
height:100%;
padding: 0;
margin: 0
}
body {
/*padding-left:100px;*/
/*padding-right:200px;*/
}
.left {
background: red;
width: 100px;
float: left;
margin-left: -100%;
height: 100%;
/*position: relative;*/
/*left:-100px;*/
}
.main {
background: blue;
width: 100%;
float: left;
height: 100%;
}
.right {
background: red;
width: 200px;
float: left;
margin-left: -200px;
height: 100%;
/*position:relative;*/
/*right:-200px;*/
}
//新增inner元素
.inner {
margin-left: 100px;
margin-right: 200px;
}
圣杯布局實際看起來是復(fù)雜的后期維護(hù)性也不是很高,在淘寶UED的探討下赚导,出來了一種新的布局方式就是雙飛翼布局茬缩,代碼如上。增加多一個div就可以不用相對布局了吼旧,只用到了浮動和負(fù)邊距凰锡。和圣杯布局差異的地方已經(jīng)被注釋。
4. 浮動
HTML代碼如下:
//注意元素次序
<div class="left">Left</div>
<div class="right">Right</div>
<div class="main">Main</div>
CSS代碼如下:
//CSS reset
body,html {
height:100%;
padding: 0;
margin: 0
}
//左欄左浮動
.left {
background: red;
width: 100px;
float: left;
height: 100%;
}
//中間自適應(yīng)
.main {
background: blue;
height: 100%;
margin:0px 100px 200px 0px;
}
//右欄右浮動
.right {
background: red;
width: 200px;
float: right;
height: 100%;
}
這種方式代碼足夠簡潔與高效圈暗,也容易理解
后記
四種方法其實只有圣杯布局和雙飛翼布局較難理解掂为,但實際上理解了圣杯布局,雙飛翼布局自然就理解了厂置。