<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    分享 42 個常用前端布局方案,建議收藏

    共 28543字,需瀏覽 58分鐘

     ·

    2023-08-16 20:09

    對 CSS 布局掌握程度決定你在Web開發(fā)中的開發(fā)頁面速度。隨著Web技術(shù)的不斷革新,實現(xiàn)各種布局的方式已經(jīng)多得數(shù)不勝數(shù)了。

    本篇文章總結(jié)了四十二種CSS的常見布局,這四十二種布局可以細分為如下幾類:

    • 水平居中
    • 垂直居中
    • 水平垂直居中
    • 兩列布局
    • 三列布局
    • 等分布局
    • Sticky Footer布局
    • 全屏布局

    這些內(nèi)容也正是本篇文章的目錄。

    水平居中

    實現(xiàn)水平布局比較簡單,方法也比較多,這里總結(jié)了7種常用的布局方法,其公共的CSS代碼如下所示:

    .parent { background#ff8787; }
    .child { height300pxwidth300pxbackground#e599f7; }

    其 HTML 結(jié)構(gòu)也是固定的,就是一個父級,其寬度繼承了 <body> 的寬度,還有一個子級,這里是固定的300px*300px,代碼如下:

    <div class="parent">
      <div class="child"></div>
    </div>

    最終的實現(xiàn)效果如下:

    上圖中玫瑰色的塊是父級,隨頁面寬度增加的;淡紫色是子級,相對于父級居中的。

    1. 使用text-align屬性

    若元素為行內(nèi)塊級元素,也就是 display: inline-block 的元素,可以通過為其父元素設(shè)置t ext-align: center 實現(xiàn)水平居中。實現(xiàn)的CSS代碼如下:

    .parent {
      /* 對于子級為 display: inline-block; 可以通過 text-align: center; 實現(xiàn)水平居中 */
      text-align: center;
    }

    .child {
      display: inline-block;
    }

    2. 定寬塊級元素水平居中(方法一)

    對于定寬的的塊級元素實現(xiàn)水平居中,最簡單的一種方式就是 margin: 0 auto;,但是值得注意的是一定需要設(shè)置寬度。實現(xiàn) CSS 代碼如下:

    .child {
      /* 對于定寬的子元素,直接 margin:0 auto; 即可實現(xiàn)水平居中 */
      margin0 auto;
    }

    3. 定寬塊級元素水平居中(方法二)

    對于開啟定位的元素,可以通過 left 屬性 和 margin 實現(xiàn)。實現(xiàn)CSS代碼如下:

    .child {
      /* 開啟定位 */
      position: relative;
      left50%;
      /* margin-left 為 負的寬度的一半 */
      margin-left: -150px;
    }

    4. 定寬塊級元素水平居中(方法三)

    當元素開啟決定定位或者固定定位時, left 屬性和 right 屬性一起設(shè)置就會拉伸元素的寬度,在配合 width 屬性與 margin 屬性就可以實現(xiàn)水平居中。

    實現(xiàn) CSS 代碼如下:

    .parent {
      position: relative;
      height300px;
    }

    .child {
      /* 開啟定位 父相子絕 */
      position: absolute;
      /* 水平拉滿屏幕 */
      left0;
      right0;
      width300px;
      /* 拉滿屏幕之后設(shè)置寬度,最后通過 margin 實現(xiàn)水平居中 */
      margin: auto;
    }

    5. 定寬塊級元素水平居中(方法四)

    當元素開啟決定定位或者固定定位時, left 屬性和 transform 屬性即可實現(xiàn)水平居中。

    實現(xiàn)CSS代碼如下:

    .parent {
      position: relative;
    }

    .child {
      /* 開啟定位 */
      position: absolute;
      /* 該方法類似于 left 于 -margin 的用法,但是該方法不需要手動計算寬度。 */
      left50%;
      transformtranslateX(-50%);
    }

    6. Flex方案

    通過 Flex 可以有很多方式實現(xiàn)這個居中布局的效果。

    實現(xiàn) CSS 代碼如下

    .parent {
      height300px;
      /* 開啟 Flex 布局 */
      display: flex;
      /* 通過 justify-content 屬性實現(xiàn)居中 */
      justify-content: center;
    }

    .child {
      /* 或者 子元素 margin: auto*/
      margin: auto;
    }

    7. Grid方案

    通過Grid實現(xiàn)居中布局比通過Flex實現(xiàn)的方式更多一些。

    實現(xiàn)CSS代碼如下:

    .parent {
      height300px;
      /* 開啟 Grid 布局 */
      display: grid;
      /* 方法一 */
      justify-items: center;
      /* 方法二 */
      justify-content: center;
    }

    .child {
      /* 方法三 子元素 margin: auto*/
      margin: auto;
    }

    以上就是水平居中布局常用的幾種方式。

    垂直居中

    實現(xiàn)垂直布局也是比較簡單的,方法也比較多,這里總結(jié)了6種常用的布局方法,其公共的 CSS 代碼如下所示:

    .parent {
      height500px;
      width300px;
      margin0 auto;
      background-color#ff8787;
    }
    .child {
      width300px;
      height300px;
      background-color#91a7ff;
    }

    其 HTML 結(jié)構(gòu)也是固定的,就是一個父級包裹一個子級,這里的子級是固定的300px*300px,代碼如下:

    <div class="parent">
      <div class="child"></div>
    </div>

    最終的實現(xiàn)效果如下:

    1. 行內(nèi)塊級元素垂直居中

    若元素是行內(nèi)塊級元素, 基本思想是子元素使用display: inline-block, vertical-align: middle;并讓父元素行高等同于高度。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 為父級容器設(shè)置行高 */
      line-height500px;
    }

    .child {
      /* 將子級元素設(shè)置為 inline-block 元素 */
      display: inline-block;
      /* 通過 vertical-align: middle; 實現(xiàn)居中 */
      vertical-align: middle;
    }

    2. 定位方式實現(xiàn)(方法一)

    第一種通過定位的方式實現(xiàn)就比較簡單,實際就是通過top: 50%; margin-top: 等于負的高度的一半就可以實現(xiàn)垂直居中。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 為父級容器開啟相對定位 */
      position: relative;
    }

    .child {
      position: absolute;
      top50%;
      /* margin-top: 等于負高度的一半 */
      margin-top: -150px;
    }

    3. 定位方式實現(xiàn)(方法二)

    第二種通過定位的方式實現(xiàn)實現(xiàn)思路:top 和 bottom 將子元素拉伸至100%,設(shè)置指定的高度,通過margin:auto;即可實現(xiàn)垂直居中。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 為父級容器開啟相對定位 */
      position: relative;
    }

    .child {
      height300px;
      position: absolute;
      /* 垂直拉滿 */
      top0;
      bottom0;
      /* margin: auto 即可實現(xiàn) */
      margin: auto;
    }

    4. 定位方式實現(xiàn)(方法三)

    第三種通過定位的方式就比較靈活,適用于多種場合,使用 top 配合 tansform 即可。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 為父級容器開啟相對定位 */
      position: relative;
    }

    .child {
      position: absolute;
      top50%;
      transformtranslateY(-50%);
    }

    5. Flex方案

    通過 Flex 可以有很多方式實現(xiàn)這個垂直居中布局的效果。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 開啟 flex 布局 */
      display: flex;
      /* 方法一 */
      /* align-items: center; */
    }

    .child {
      /* 方法二 */
      margin: auto;
    }

    通過 Flex 布局實現(xiàn)不僅僅只有上面兩種,這里只介紹最簡單的方式。

    6. Grid方案

    通過 Grid 實現(xiàn)居中布局比通過 Flex 實現(xiàn)的方式更多一些。

    實現(xiàn)CSS代碼如下:

    .parent {
      display: grid;
      /* 方法一 */
      /* align-items: center; */
      /* 方法二 */
      /* align-content: center; */
    }

    .child {
      /* 方法三 */
      /* margin: auto; */
      /* 方法四 */
      align-self: center;
    }

    以上就是垂直居中布局常用的幾種方式。

    水平垂直居中

    實現(xiàn)水平垂直布局基本就是將上面幾種方式結(jié)合使用,這里總結(jié)了7種常用的布局方法,其公共的 CSS 代碼如下所示:

    body {
      margin0;
    }
    .parent {
      height500px;
      width500px;
      background-color#eebefa;
      margin0 auto;
    }
    .child {
      height300px;
      width300px;
      background-color#f783ac;
    }

    其 HTML 結(jié)構(gòu)也是固定的,就是一個父級包裹一個子級,這里的子級是固定的300px*300px,代碼如下:

    <div class="parent">
      <div class="child"></div>
    </div>

    最終的實現(xiàn)效果如下:

    1. 行內(nèi)塊級水平垂直居中方案

    步驟如下:

    • 容器元素行高等于容器高度
    • 通過 text-align: center; 實現(xiàn)水平居中
    • 將子級元素設(shè)置為水平塊級元素
    • 通過 vertical-align: middle; 實現(xiàn)垂直居中

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 1. 設(shè)置行高等于容器高度 */
      line-height500px;
      /* 通過 text-align: center; 實現(xiàn)水平居中 */
      text-align: center;
    }
    .child {
      /* 將子級元素設(shè)置為水平塊級元素 */
      display: inline-block;
      /* 通過 vertical-align: middle; 實現(xiàn)垂直居中 */
      vertical-align: middle;
    }

    2. 定位實現(xiàn)水平垂直居中方案(一)

    步驟如下:

    • 使子元素相對于容器元素定位
    • 子元素開啟絕對定位
    • 設(shè)置該元素的偏移量,值為50% 減去寬度/高度的一半

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 1. 使子元素相對于本元素定位 */
      position: relative;
    }
    .child {
      /* 2. 開啟絕對定位 */
      position: absolute;
      /* 3. 設(shè)置該元素的偏移量,值為 50%減去寬度/高度的一半 */
      leftcalc(50% - 150px);
      topcalc(50% - 150px);
    }

    3. 定位實現(xiàn)水平垂直居中方案(二)

    步驟如下:

    • 使子元素相對于容器元素定位
    • 子元素開啟絕對定位
    • 設(shè)置該元素的偏移量,值為50%
    • 通過外邊距-值的方式將元素移動回去

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 1. 使子元素相對于本元素定位 */
      position: relative;
    }
    .child {
      /* 2. 開啟絕對定位 */
      position: absolute;
      /* 3. 設(shè)置該元素的偏移量,值為 50% */
      left50%;
      top50%;
      margin-left: -150px;
      margin-top: -150px;
    }

    4. 定位實現(xiàn)水平垂直居中方案(三)

    步驟如下:

    • 使子元素相對于容器元素定位
    • 子元素開啟絕對定位
    • 將子元素拉滿整個容器
    • 通過margin:auto實現(xiàn)水平垂直居中

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 1. 使子元素相對于本元素定位 */
      position: relative;
    }
    .child {
      /* 2. 開啟絕對定位 */
      position: absolute;
      /* 3. 將子元素拉滿整個容器 */
      top0;
      left0;
      right0;
      bottom0;
      /* 4. 通過 margin:auto 實現(xiàn)水平垂直居中 */
      margin: auto;
    }

    5. 定位實現(xiàn)水平垂直居中方案(四)

    步驟如下:

    • 使子元素相對于容器元素定位
    • 子元素開啟絕對定位
    • 設(shè)置該元素的偏移量,值為50%
    • 通過 translate 反向偏移的方式,實現(xiàn)居中

    實現(xiàn) CSS 代碼如下:

    .parent {
      /* 1. 使子元素相對于本元素定位 */
      position: relative;
    }
    .child {
      /* 2. 開啟絕對定位 */
      position: absolute;
      /* 3. 設(shè)置該元素的偏移量,值為 50%*/
      left50%;
      top50%;
      /* 通過translate反向偏移的方式,實現(xiàn)居中 */
      transformtranslate(-50%, -50%);
    }

    6. Flex方案

    步驟如下:

    • 將元素設(shè)置為 Flex 布局
    • 通過 justify-content: center 以及 align-items: center 實現(xiàn)或者 margin: auto; 實現(xiàn)。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 1. 將元素設(shè)置為 Flex 布局 */
      display: flex;
      /* 2. 通過 justify-content 以及 align-items: center 實現(xiàn) */
      /* justify-content: center;
      align-items: center; */

    }
    .child {
      /* 或者通過 margin auto 實現(xiàn) */
      margin: auto;
    }

    7. Grid方案

    Grid 方案的實現(xiàn)方式相對來說比較簡單,方式也較多。

    實現(xiàn)CSS代碼如下:

    .parent {
      /* 1. 元素設(shè)置為Grid 元素 */
      display: grid;
      /* 通過 items 屬性實現(xiàn)*/
      /* align-items: center; */
      /* justify-items: center; */
      /* items 的縮寫 */
      /* place-items: center; */

      /* 或者通過 content 屬性 */
      /* align-content: center; */
      /* justify-content: center; */
      /* content 的縮寫 */
      /* place-content: center; */
    }
    .child {
      /* 或者通過 margin auto 實現(xiàn) */
      /* margin: auto; */
      /* 或者通過 self 屬性 */
      /* align-self: center;
      justify-self: center; */

      /* self 的縮寫 */
      place-self: center;
    }

    實現(xiàn)水平垂直居中布局的方式大多是通過上面兩種布局的方式相結(jié)合。

    兩列布局

    所謂的兩列布局就是一列定寬(也有可能由子元素決定寬度),一列自適應的布局。最終效果如下所示:

    這里用到的 HTML 結(jié)構(gòu)如下:

    <!-- 解決高度塌陷 -->
    <div class="container clearfix">
      <div class="left">定寬</div>
      <div class="right">自適應</div>
    </div>

    公共的 CSS 代碼如下:

    body {
      margin0;
    }
    .container {
      height400px;
      background-color#eebefa;
    }
    .left {
      height400px;
      width200px;
      background-color#f783ac;
      font-size70px;
      line-height400px;
      text-align: center;
    }
    .right {
      height400px;
      background-color#c0eb75;
      font-size70px;
      line-height400px;
    }
    /* 清除浮動 */
    .clearfix:after {
      content'';
      display: block;
      height0;
      clear: both;
      visibility: hidden;
    }

    1. float+calc()函數(shù)完成左列定寬右列自適應

    步驟如下:

    • 左邊列開啟浮動
    • 右邊列開啟浮動
    • 右邊列寬度為父級 100%減去左列的寬度

    實現(xiàn)CSS代碼如下:

    .left {
      /* 左邊列開啟浮動 */
      float: left;
    }
    .right {
      /* 右邊列開啟浮動 */
      float: left;
      /* 寬度減去左列的寬度 */
      widthcalc(100% - 200px);
    }

    2. float+margin-left完成左列定寬右列自適應

    步驟如下:

    • 左邊列開啟浮動

    • 通過外邊距的方式使該容器的左邊有左邊列容器的寬度的外邊距

    實現(xiàn)CSS代碼如下:

    .left {
      /* 左邊列開啟浮動 */
      float: left;
    }
    .right {
      /* 通過外邊距的方式使該容器的左邊有200px */
      margin-left200px;
    }

    3. absolute+margin-left完成左列定寬右列自適應

    步驟如下:

    • 開啟定位脫離文檔流
    • 通過外邊距的方式使該容器的左邊有左邊列容器的寬度的外邊距

    實現(xiàn)CSS代碼如下:

    .left {
      /* 開啟定位脫離文檔流 */
      position: absolute;
    }
    .right {
      /* 通過外邊距的方式使該容器的左邊有200px */
      margin-left200px;
    }

    值得注意的是 以上幾種方案左邊列必須定寬,才可以實現(xiàn),下面這幾種方案左邊列可以由子級撐起。

    4. float+overflow完成左列定寬右列自適應

    步驟如下:

    • 左側(cè)元素開始浮動
    • 右側(cè)自適應元素設(shè)置overflow會創(chuàng)建一個BFC完成自適應

    實現(xiàn)CSS代碼如下:

    .left {
      /* 1. 左側(cè)元素開始浮動 */
      float: left;
    }
    .right {
      /* 2. 右側(cè)自適應元素設(shè)置 overflow 會創(chuàng)建一個BFC 完成自適應 */
      overflow: hidden;
    }

    5. Flex方案

    通過Flex布局實現(xiàn)該功能主要是通過 flex 屬性來實現(xiàn)示例代碼如下:

    .container {
      display: flex;
    }
    .right {
      flex1;
      /* flex: 1; 表示 flex-grow: 1; 即該項占所有剩余空間 */
    }

    6. Grid方案

    通過 Grid 布局實現(xiàn)該功能主要是通過template屬性實現(xiàn),具體代碼如下所示:

    .container {
      display: grid;
      /* 將其劃分為兩行,其中一列有本身寬度決定, 一列占剩余寬度*/
      grid-template-columns: auto 1fr;
    }

    三列布局

    三列布局主要分為兩種:

    • 第一種是前兩列定寬,最后一列自適應,這一種本質(zhì)上與兩列布局沒有什么區(qū)別,可以參照兩列布局實現(xiàn)。
    • 第二種是前后兩列定寬,中間自適應,最終效果圖如下

    公共 CSS 如下:

    body {
      margin0;
    }
    .container {
      height400px;
      background-color#eebefa;
    }
    .left {
      height400px;
      width200px;
      background-color#f783ac;
    }
    .content {
      height400px;
      background-color#d9480f;
    }
    .right {
      height400px;
      width200px;
      background-color#c0eb75;
    }
    .left,
    .content,
    .right {
      font-size70px;
      line-height400px;
      text-align: center;
    }
    /* 清除浮動 */
    .clearfix:after {
      content'';
      display: block;
      height0;
      clear: both;
      visibility: hidden;
    }

    HTML 結(jié)構(gòu)如下:

    <!-- 解決高度塌陷 -->
    <div class="container clearfix">
      <div class="left"></div>
      <div class="content">內(nèi)容</div>
      <div class="right"></div>
    </div>

    1. 通過float實現(xiàn)(一)

    實現(xiàn)步驟:

    • 為了完成效果需要調(diào)整HTML結(jié)構(gòu),調(diào)整后如下:
    <!-- 解決高度塌陷 -->
    <div class="container clearfix">
      <div class="left"></div>
      <div class="right"></div>
      <div class="content">內(nèi)容</div>
    </div>

    • 左列容器開啟左浮動
    • 右列容器開啟右浮動
    • 自適應元素設(shè)置overflow會創(chuàng)建一個BFC完成自適應

    實現(xiàn)CSS代碼如下

    .left {
      /* 1. 左列容器開啟左浮動 */
      float: left;
    }
    .content {
      /* 自適應元素設(shè)置 overflow 會創(chuàng)建一個BFC 完成自適應 */
      overflow: hidden;
    }
    .right {
      /* 2. 右列容器開啟右浮動 */
      float: right;
    }

    2. 通過float實現(xiàn)(二)

    實現(xiàn)步驟:

    • 為了完成效果需要調(diào)整 HTML 結(jié)構(gòu),調(diào)整后如下:
    <!-- 解決高度塌陷 -->
    <div class="container clearfix">
      <div class="left"></div>
      <div class="right"></div>
      <div class="content">內(nèi)容</div>
    </div>

    • 左列容器開啟左浮動
    • 右列容器開啟右浮動
    • 使中間自適應的寬度為父級容器減去兩個定寬的列

    實現(xiàn)CSS代碼如下:

    .left {
      /* 1. 左列容器開啟左浮動 */
      float: left;
    }
    .content {
      /* 3. 使中間自適應的寬度為父級容器減去兩個定寬的列 */
      widthcalc(100%-400px);
    }
    .right {
      /* 2. 右列容器開啟右浮動 */
      float: right;
    }

    3. 通過position實現(xiàn)

    實現(xiàn)步驟

    • 左右兩列脫離文檔流,并通過偏移的方式到達自己的區(qū)域
    • 使中間自適應的寬度為父級容器減去兩個定寬的列
    • 通過外邊距將容器往內(nèi)縮小

    實現(xiàn)CSS代碼如下:

    .left {
      /* 1. 左右兩列脫離文檔流,并通過偏移的方式到達自己的區(qū)域 */
      position: absolute;
      left0;
      top0;
    }
    .content {
      /* 2. 使中間自適應的寬度為父級容器減去兩個定寬的列 */
      widthcalc(100%-400px);
      /* 3. 通過外邊距將容器往內(nèi)縮小 */
      margin-right200px;
      margin-left200px;
    }
    .right {
      position: absolute;
      right0;
      top0;
    }

    4. Flex方案

    通過 Flex 布局實現(xiàn)該功能主要是通過 flex 屬性來實現(xiàn)。

    實現(xiàn)CSS代碼如下:

    .container {
      display: flex;
    }
    .right {
      flex1;
      /* flex: 1; 表示 flex-grow: 1; 即該項占所有剩余空間 */
    }

    5. Grid方案

    通過 Grid 布局實現(xiàn)該功能主要是通過 template 屬性實現(xiàn)。

    實現(xiàn)CSS代碼如下:

    .container {
      display: grid;
      /* 將其劃分為兩行,其中一列有本身寬度決定, 一列占剩余寬度*/
      grid-template-columns: auto 1fr auto;
    }

    等分布局

    等分布局就是將一個容器平均分成幾等份,這里以 4 等分為例,主要介紹4種方法。

    公共CSS部分如下:

    body {
      margin0;
    }
    .container {
      height400px;
      background-color#eebefa;
    }
    .item {
      height100%;
    }
    .item1 {
      background-color#eccc68;
    }
    .item2 {
      background-color#a6c1fa;
    }
    .item3 {
      background-color#fa7d90;
    }
    .item4 {
      background-color#b0ff70;
    }
    /* 清除浮動 */
    .clearfix:after {
      content'';
      display: block;
      height0;
      clear: both;
      visibility: hidden;
    }

    公共HTML代碼如下:

    <!-- 父元素清除浮動 -->
    <div class="container clearfix">
      <div class="item item1"></div>
      <div class="item item2"></div>
      <div class="item item3"></div>
      <div class="item item4"></div>
    </div>

    最終的效果如下圖所示:

    1. 浮動+百分比方式

    這種方式比較簡單,開啟浮動,使每個元素占25%的寬度。

    實現(xiàn)CSS代碼如下:

    .item {
      /* 開啟浮動,每個元素占 25% 的寬度 */
      width25%;
      float: left;
    }

    2. 行內(nèi)塊級+百分比方式

    這種方式與上面那種方式類似,不過需要注意的是行內(nèi)塊級元素有一些類似于邊距的幾個像素,導致各25%會超出容器。

    實現(xiàn)CSS代碼如下:

    .item {
      /* 設(shè)置每個元素為行內(nèi)塊級元素,每個元素占 24.5% 的寬度 */
      width24.5%;
      /* 因為行內(nèi)塊級元素有一些類似于邊距的幾個像素,導致各占25會超出容器 */
      display: inline-block;
    }

    3. Flex方案

    通過 Flex 布局實現(xiàn)該功能主要是通過 flex 屬性來實現(xiàn)。

    實現(xiàn)CSS代碼如下:

    .container {
      /* 開啟 flex 布局 */
      display: flex;
    }
    .item {
      /* 每個元素占相同的寬度 */
      flex1;
    }

    4. Grid方案

    通過 Grid 布局實現(xiàn)該功能主要是通過 template 屬性實現(xiàn)。

    實現(xiàn)CSS代碼如下

    .container {
      /* 開啟 grid 布局 */
      display: grid;
      grid-template-columnsrepeat(41fr);
      /* 使用 repeat 函數(shù)生成如下代碼 */
      /* grid-template-columns: 1fr 1fr 1fr 1fr; */
    }

    Sticky Footer布局

    所謂的 Sticky Footer 布局并不是一種新的前端技術(shù)和概念,它就是一種網(wǎng)頁布局。如果頁面內(nèi)容不夠長時,底部欄就會固定到瀏覽器的底部;如果足夠長時,底部欄就后跟隨在內(nèi)容的后面。如下圖所示:

    這里來介紹實現(xiàn)該布局的4種方式

    公共的CSS代碼如下:

    body {
        margin0;
    }
    .container {
        height400px;
        display: flex;
    }
    .left {
        height400px;
        width200px;
        background-color#f759ab;
    }
    .content {
        height400px;
        background-color#52c41a;
        flex1;
    }
    .right {
        height400px;
        width200px;
        background-color#f759ab;
    }
    .left,
    .content,
    .right {
        font-size70px;
        line-height400px;
        text-align: center;
    }
    .header {
        height100px;
        background-color#70a1ff;
    }
    .footer {
        height100px;
        background-color#ff7a45;
    }
    .header,
    .footer {
        line-height100px;
        font-size52px;
        text-align: center;
    }

    公共的HTML如下:

    <div class="main">
        <div class="header">header</div>
        <div class="container">
            <div class="left">left</div>
            <div class="content">content</div>
            <div class="right">right</div>
        </div>
        <div class="footer">footer</div>
    </div>

    1. 絕對定位的方式

    通過絕對定位的方式實現(xiàn)Sticky Footer布局的步驟如下:

    • 設(shè)置最外層容器高度為100%;
    • 讓子元素元素相對于容器元素進行定位,并設(shè)置容器元素最小高度為100%;
    • 在中間區(qū)域設(shè)置padding-bottom為footer的高度 ;
    • 底部欄絕對定位,并一直吸附在底部即可實現(xiàn)。

    實現(xiàn)CSS代碼如下:

    /* 1. 設(shè)置最外層容器為100% */
    html,
    body {
        height100%;
    }
    /* 2. 讓子元素元素相對于容器元素進行定位,并設(shè)置容器元素最小高度為100% */
    .main {
        position: relative;
        min-height100%;
    }
    /* 3. 在中間區(qū)域設(shè)置 padding-bottom 為footer 的高度 */
    .container {
        padding-bottom100px;
    }
    /* 由于開啟了絕對定位,寬度成了自適應,設(shè)置為100% bottom:0 始終保持底部 */
    .footer {
        position: absolute;
        width100%;
        bottom0;
    }

    2. 使用calc函數(shù)實現(xiàn)

    使用 calc 函數(shù)實現(xiàn)的方式會比較簡單,中間的容器最少高度為視口寬度的100% - 頭部和底部兩部分的高度即可完成該功能。

    實現(xiàn)CSS代碼如下:

    .container {
        /* 這里的 中間 部分的容器最少為視口寬度的 100% - 頭部和底部兩部分的高度即可完成該功能 */
        min-heightcalc(100vh - 200px);
    }

    3. Flex方案

    實現(xiàn)步驟如下

    • 開啟 flex 布局
    • 將子元素布局方向修改為垂直排列
    • 設(shè)置最小高度為當前視口,使不管中間部分有多高,始終都可以保持在底部
    • 設(shè)置中間部分容器高度為自適應

    實現(xiàn)CSS代碼如下:

    .main {
        /* 開啟flex布局 */
        display: flex;
        /* 將子元素布局方向修改為垂直排列 */
        flex-flow: column;
        /* 設(shè)置最小高度為當前視口,使不管中間部分有多高,始終都可以保持在底部 */
        min-height100vh;
    }
    .container {
        /* 設(shè)置 中間 部分自適應 */
        flex1;
    }

    4. Grid方案

    實現(xiàn)步驟如下

    • 開啟 grid 布局
    • 置最小高度為當前視口,使不管中間部分有多高,始終都可以保持在底部

    實現(xiàn)CSS代碼如下:

    .main {
        /* 開啟grid布局 */
        display: grid;
        grid-template-rows: auto 1fr auto;
        /* 設(shè)置最小高度為當前視口,使不管中間部分有多高,始終都可以保持在底部 */
        min-height100vh;
    }

    全屏布局

    全部布局主要應用在后臺,主要效果如下所示:

    這里介紹三種全屏布局的實現(xiàn)方法。

    公共的CSS代碼如下:

    body {
      margin0;
    }
    body,
    html,
    .container {
      height100vh;
      box-sizing: border-box;
      text-align: center;
      overflow: hidden;
    }
    .content {
      background-color#52c41a;
      /* * 中間部門的布局可以參考 兩列 三列 布局 */
      display: grid;
      grid-template-columns: auto 1fr;
    }
    .left {
      width240px;
      background-color#52c41a;
      font-size80px;
      line-heightcalc(100vh - 200px);
    }
    .right {
      background-color#f759ab;
      font-size60px;
    }
    .header {
      height100px;
      background-color#70a1ff;
    }
    .footer {
      height100px;
      background-color#ff7a45;
    }
    .header,
    .footer {
      line-height100px;
      font-size52px;
    }

    HTML結(jié)構(gòu)如下:

    <div class="container">
        <div class="header">header</div>
        <div class="content">
            <div class="left">導航</div>
            <div class="right">
                <div class="right-in">自適應,超出高度出現(xiàn)滾動條</div>
            </div>
        </div>
        <div class="footer">footer</div>
    </div>

    1. 使用calc函數(shù)實現(xiàn)

    實現(xiàn)步驟如下:

    • 通過 calc 函數(shù)計算出中間容器的高度。
    • 中間出現(xiàn)滾動條的容器設(shè)置overflow: auto即出現(xiàn)滾動條的時候出現(xiàn)滾動條。

    實現(xiàn)CSS代碼如下:

    .content {
        overflow: hidden;
        /* 通過 calc 計算容器的高度 */
        heightcalc(100vh - 200px);
    }
    .left {
        height100%;
    }
    .right {
        /* 如果超出出現(xiàn)滾動條 */
        overflow: auto;
        height100%;
    }
    .right-in {
        /* 假設(shè)容器內(nèi)有500px的元素 */
        height500px;
    }

    2. Flex 方案

    使用 Flex 方式實現(xiàn)該布局比較簡單。

    實現(xiàn)CSS代碼如下

    .container {
        /* 開啟flex布局 */
        display: flex;
        /* 將子元素布局方向修改為垂直排列 */
        flex-flow: column;
    }
    .content {
        /* 如果超出出現(xiàn)滾動條 */
        overflow: auto;
        /* 設(shè)置 中間 部分自適應 */
        flex1;
    }
    .right-in {
        /* 假設(shè)容器內(nèi)有500px的元素 */
        height500px;
    }

    3. Grid 方案

    grid布局對于這種布局來說,實現(xiàn)起來是非常得心應手的,通過template屬性即可實現(xiàn)。

    實現(xiàn)CSS代碼如下

    .container {
        /* 開啟grid布局 */
        display: grid;
        grid-template-rows: auto 1fr auto;
    }
    .content {
        /* 如果超出出現(xiàn)滾動條 */
        overflow: auto;
    }
    .right-in {
        /* 假設(shè)容器內(nèi)有500px的元素 */
        height500px;
    }


    作者:一碗周 

    https://juejin.cn/post/7028962991345254407


    瀏覽 827
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    黄18禁网站 | 国产加勒比在线看 | 露脸熟女不卡视频 | 俺也来俺也去俺也射 | 超逼视频在线观看 |