聖盃佈局和雙飛翼佈局是頁面佈局的經常使用佈局方式。二者都是爲了實現兩側寬度固定,中間寬度自適應的三欄佈局,但二者在實現方式上有必定的差異,不過都遵循瞭如下要點:html
<div></div>
標籤
實現方式:bash
<div class="header">Header</div>
<div class="container">
<div class="main">Main</div>
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="footer">Footer</div>
複製代碼
container
包裹的main
、left
、right
三列組成,main
寫在最前面html,body {
margin: 0;
padding: 0;
min-width: 600px;
}
.header {
height: 200px;
background-color: #105B63;
}
.container {
padding: 0 200px 0 200px;
}
.container > div {
float: left;
}
.main {
height: 200px;
width: 100%;
background-color: #DB9E36;
}
.left {
width: 200px;
height: 200px;
margin-left: -100%;
position: relative;
right: 200px;
background-color: #FFFAD5;
}
.right {
width: 200px;
height: 200px;
margin-right: -200px;
background-color: #FFD34E;
}
.footer {
height: 200px;
clear: both;
background-color: #BD4932;
}
複製代碼
<div class="header">Header</div>
<div class="container column">
<div class="main">Main</div>
</div>
<div class="left column">Left</div>
<div class="right column">Right</div>
<div class="footer">Footer</div>
複製代碼
與聖盃佈局相比,雙飛翼HTML只爲main
包裹了div
,這是爲了處理margin中內容被遮蓋的問題。佈局
html,body {
margin: 0;
padding: 0;
}
body {
min-width: 450px;
}
.header {
height: 160px;
background-color: #DB9E36;
}
.container {
width: 100%;
}
.column {
float: left;
}
.main {
height: 200px;
margin: 0 200px 0 200px;
background-color: #105B63;
}
.left {
width: 200px;
height: 200px;
margin-left: -100%;
background-color: #FFD34E;
}
.right {
width: 200px;
height: 200px;
margin-left: -200px;
background-color: #BD4932;
}
.footer {
height: 200px;
clear: both;
background-color: #FFFAD5;
}
複製代碼
爲三個column
設置float,採用負邊距將左、右測部分定外到container
的margin留的空白處。 相比聖盃佈局,雙飛翼不比設置左右部分的position: relative
,也不比設置left、right值,簡單了很多,但聖盃佈局的DOM結構更加直觀和天然。flex
Flex佈局又稱彈性佈局,在實現上更簡單和實用。ui
<div class="header">Header</div>
<div class="container">
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
</div>
<div class="footer">Footer</div>
複製代碼
html,body {
margin: 0;
padding: 0;
}
.header {
height: 200px;
background-color: #105B63;
}
.container {
height: 200px;
display: flex;
}
.left {
width: 200px;
background-color: #FFFAD5;
}
.main {
flex: 1;
background-color: #FFD34E;
}
.right {
width: 200px;
background-color: #BD4932;
}
.footer {
height: 200px;
background-color: #DB9E36;
}
複製代碼
本質上是利用flex: 1
這個屬性,使中間部分main能夠自適應。spa