最近我朋友在羣裏發了一張圖,說爲何main的寬度100%了,sub仍是能夠覆蓋它呢?看來是時候帶他回憶一波經典的聖盃佈局和雙飛翼佈局了。正好最近看到好多面試題都有提到。 /笑哭css
羣內連接以下圖:html
聖唄佈局和雙飛翼佈局從字面意思來看是這樣的:git
一個像聖盃或者像展翅的禽類這樣的佈局github
通俗的來講就是左右兩欄固定寬度,中間部分自適應的三欄佈局。面試
接下來比較重要了:瀏覽器
我注意到聖盃佈局的left、middle、right都有position: relative;bash
設:佈局
.left width:200px
.right width:220px
複製代碼
那麼下面的這些屬性爲何要存在?ui
.container上面的paddind
.left 的left: -200px;
.right 的right: -220px;
複製代碼
由於不這樣設置 會遮擋middle的內容spa
能夠本身嘗試一下下
聖盃佈局示例代碼以下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>聖盃佈局</title>
<style>
* {
margin: 0;
padding: 0;
}
.header,
.footer {
height: 100px;
line-height: 100px;
background-color: green;
text-align: center;
font-size: 30px;
font-weight: bolder;
}
.footer {
background-color: goldenrod;
}
.container {
padding: 0 220px 0 200px;
overflow: hidden;
}
.left,
.middle,
.right {
position: relative;
float: left;
min-height: 130px;
word-break: break-all;
}
.left {
margin-left: -100%;
left: -200px;
width: 200px;
background-color: red;
}
.right {
margin-left: -220px;
right: -220px;
width: 220px;
background-color: green;
}
.middle {
width: 100%;
background-color: blue;
}
</style>
</head>
<body>
<div class="header">header</div>
<div class="container">
<div class="middle">
<h4>middle</h4>
<p>
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddle
</p>
</div>
<div class="left">
<h4>left</h4>
<p>
leftleftleftleftleftleftleftleftleftleftleftleft
leftleftleftleftleftleftleftleftleftleftleftleft
leftleftleftleftleftleftleftleftleftleftleftleft
</p>
</div>
<div class="right">
<h4>right</h4>
<p>
rightrightrightrightrightrightrightrightrightright
rightrightrightrightrightrightrightrightrightright
rightrightrightrightrightrightright
</p>
</div>
</div>
<div class="footer">footer</div>
</body>
</html>
複製代碼
雙飛翼佈局和聖盃佈局很相似,不過是在middle的div裏又插入一個div,經過調整內部div的margin值,實現中間欄自適應,內容寫到內部div中。
這樣能夠先作好主體部分,而後再將附屬部分放到合適的位置!
接下來與聖盃佈局不同的地方:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>雙飛翼佈局</title>
<style>
* {
margin: 0;
padding: 0;
}
.header,
.footer {
height: 100px;
line-height: 100px;
background-color: green;
text-align: center;
font-size: 30px;
font-weight: bolder;
}
.footer {
background-color: goldenrod;
}
.container {
overflow: hidden;
}
.left,
.middle,
.right {
float: left;
min-height: 130px;
word-break: break-all;
}
.left {
margin-left: -100%;
width: 200px;
background-color: red;
}
.right {
margin-left: -220px;
width: 220px;
background-color: green;
}
.middle {
width: 100%;
height: 100%;
background-color: blue;
}
.inner {
margin: 0 220px 0 200px;
min-height: 130px;
background: blue;
word-break: break-all;
}
</style>
</head>
<body>
<div class="header">header</div>
<div class="container">
<div class="middle">
<div class="inner">
<h4>middle</h4>
<p>
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddlemiddlemiddlemiddle
middlemiddlemiddlemiddlemiddle
</p>
</div>
</div>
<div class="left">
<h4>left</h4>
<p>
leftleftleftleftleftleftleftleftleftleftleftleft
leftleftleftleftleftleftleftleftleftleftleftleft
leftleftleftleftleftleftleftleftleftleftleftleft
</p>
</div>
<div class="right">
<h4>right</h4>
<p>
rightrightrightrightrightrightrightrightrightright
rightrightrightrightrightrightrightrightrightright
rightrightrightrightrightrightright
</p>
</div>
</div>
<div class="footer">footer</div>
</body>
</html>
複製代碼
聖盃佈局在DOM結構上顯得更加直觀和天然;
雙飛翼佈局省去了不少css,並且因爲不用使用定位,能夠得到比聖盃佈局更小最小寬度;
說到這裏須要注意一下 因爲雙飛翼佈局會一直隨着瀏覽器可視區域寬度減少從而不斷擠壓中間部分寬度。
因此須要設置給頁面一個min-width > LeftWidth + RightWidth;
還有一件事就是他們在單獨部份內容擴充的時候,童鞋們可能發現了 底部會良莠不齊。
在個人老師那裏知道了最簡單的解決辦法 / 笑哭
給left、middle、right設置上 padding-bottom: 9999px; margin-bottom: -9999px;
就讓他變得無限高,可是又給他送回去了。真的是讓我腦洞大開!!!