深入理解聖盃佈局和雙飛翼佈局

前端小然子發表於2019-04-11

前言

最近我朋友在群裡發了一張圖,說為什麼main的寬度100%了,sub還是可以覆蓋它呢?看來是時候帶他回憶一波經典的聖盃佈局和雙飛翼佈局了。正好最近看到好多面試題都有提到。 /笑哭

群內連結如下圖:

深入理解聖盃佈局和雙飛翼佈局

字面意思

聖唄佈局和雙飛翼佈局從字面意思來看是這樣的:

一個像聖盃或者像展翅的禽類這樣的佈局

通俗的來說就是左右兩欄固定寬度,中間部分自適應的三欄佈局。

聖盃佈局

  1. 首先把left、middle、right都放出來
  2. 給它們三個設定上float: left, 脫離文件流;
  3. 一定記得給container設定上overflow: hidden; 可以形成BFC撐開文件
  4. left、right設定上各自的寬度
  5. middle設定width: 100%;

接下來比較重要了:

  1. 給left、middle、right設定position: relative;
  2. left設定 left: -leftWidth, right設定 right: -rightWidth;
  3. 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到公司繼續寫雙飛翼佈局的理解 和 它們之間的區別

未完待續。。。

相關文章