五種最多見的CSS頁面佈局

一、前言

  • 本文主要介紹了實現頁面佈局的幾種方法。
  • 以常見的左中右佈局爲例。

2. 代碼實現

  • 公共樣式部分
html * {
      margin: 0;
      padding: 0;
    }
    .layout {
      margin-bottom: 20px;
    }
    .layout article {
      width: 100%;
     }
    .layout article > div {
      min-height: 100px;
    }
    .layout article .left {
      width: 300px;
      background: red;
    }
    .layout article .center {
      background: orange;
    }
    .layout article .right {
      width: 300px;
      background: blue;
    }
複製代碼
  • float佈局。
<!-- 浮動佈局 -->
  <section class="layout float">
    <style>
      .layout.float .left {
        float: left;
      }
      .layout.float .right {
        float: right;
      }
    </style>
    <article class="left-center-right">
      <div class="left"></div>
      <div class="right"></div>
      <div class="center">
        <h2>這是float佈局</h2>
        <p>這是一段文字</p>
        <p>這是一段文字</p>
      </div>
    </article>
  </section>
複製代碼
  • absolute佈局
<!-- 定位佈局 -->
  <section class="layout absolute">
    <style>
      .layout.absolute .left-center-right > div {
        position: absolute;
      }
      .layout.absolute .left {
        left: 0;
      }
      .layout.absolute .center {
        left: 300px;
        right: 300px;
      }
      .layout.absolute .right {
        right: 0;
      }
    </style>
    <article class="left-center-right">
      <div class="left"></div>
      <div class="center">
        <h2>這是absolute佈局</h2>
        <p>這是一段文字</p>
        <p>這是一段文字</p>
      </div>
      <div class="right"></div>
    </article>
  </section>
複製代碼
  • flex佈局
<!-- flex佈局 -->
  <section class="layout flex">
    <style>
      .layout.flex {
        margin-top: 140px;
      }
      .layout.flex .left-center-right{
        display: flex;
      }
      .layout.flex .center {
        flex: 1;
      }
    </style>
    <article class="left-center-right">
      <div class="left"></div>
      <div class="center">
        <h2>這是flex佈局</h2>
        <p>這是一段文字</p>
        <p>這是一段文字</p>
      </div>
      <div class="right"></div>
    </article>
  </section>
複製代碼
  • table佈局
<!-- table佈局 -->
  <section class="layout table">
    <style>
      .layout.table .left-center-right {
        display: table;
        height: 100px;
      }
      .layout.table .left-center-right > div{
        display: table-cell;
      }
    </style>
    <article class="left-center-right">
      <div class="left"></div>
      <div class="center">
        <h2>這是table佈局</h2>
        <p>這是一段文字</p>
        <p>這是一段文字</p>
      </div>
      <div class="right"></div>
    </article>
  </section>
複製代碼
  • grid佈局
<!-- grid佈局 -->
  <section class="layout grid">
    <style>
      .layout.grid .left-center-right {
        display: grid;
        grid-template-columns: 300px auto 300px;
      }
    </style>
    <article class="left-center-right">
      <div class="left"></div>
      <div class="center">
        <h2>這是grid佈局</h2>
        <p>這是一段文字</p>
        <p>這是一段文字</p>
      </div>
      <div class="right"></div>
    </article>
  </section>
複製代碼

三、效果以下

當增長內容時,如圖二:

4. 各類佈局的優缺點

  1. float佈局的兼容性比較好。缺點是如圖二, 解決辦法:給橙色塊添加overflow: hidden(生成了一個BFC)。浮動元素父元素還存在高度塌陷問題,解決方法: 父元素生成一個BFC。
  2. absolute佈局的有點是簡單直接,兼容性好。缺點,脫離了文檔流。
  3. flex佈局的優勢,佈局簡單、靈活,移動端友好;缺點是ie8如下不兼容。
  4. table佈局的優勢是兼容性好,有時候佈局相對簡單。缺點是它是對TABLE標籤的不正規使用,一直以來被你們所詬病。當須要內容高度不一致時並不適應。
  5. grid佈局優勢,是第一個基於二維方向的佈局模塊。它是第一個基於網格的原生布局系統。缺點是對低版本瀏覽器兼容性很差。
相關文章
相關標籤/搜索