前言
最近我朋友在群裡發了一張圖,說為什麼main的寬度100%了,sub還是可以覆蓋它呢?看來是時候帶他回憶一波經典的聖盃佈局和雙飛翼佈局了。正好最近看到好多面試題都有提到。 /笑哭
群內連結如下圖:
字面意思
聖唄佈局和雙飛翼佈局從字面意思來看是這樣的:
一個像聖盃或者像展翅的禽類這樣的佈局
通俗的來說就是左右兩欄固定寬度,中間部分自適應的三欄佈局。
聖盃佈局
- 首先把left、middle、right都放出來
- 給它們三個設定上float: left, 脫離文件流;
- 一定記得給container設定上overflow: hidden; 可以形成BFC撐開文件
- left、right設定上各自的寬度
- middle設定width: 100%;
接下來比較重要了:
- 給left、middle、right設定position: relative;
- left設定 left: -leftWidth, right設定 right: -rightWidth;
- container設定padding: 0, rightWidth, 0, leftWidth;
我注意到聖盃佈局的left、middle、right都有position: relative;
設:
.left width:200px
.right width:220px
複製程式碼
那麼下面的這些屬性為什麼要存在?
.container上面的paddind
.left 的left: -200px;
.right 的right: -220px;
複製程式碼
因為不這樣設定 會遮擋middle的內容
可以自己嘗試一下下
聖盃佈局示例程式碼如下:
<!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>
複製程式碼
困了,明天4.12到公司繼續寫雙飛翼佈局的理解 和 它們之間的區別
未完待續。。。