【轉】css_經典佈局問題-三欄佈局

寫在前面的話css

較常見的佈局問題 - 三欄佈局,左右兩側固定寬度,中間內容自適應html

一篇相似的佈局問題-兩欄佈局 詳情請戳css3


【轉自】程序員的程程序員


1. 浮動佈局

<!--浮動佈局  -->
    <section class="layout float">
      <style media="screen">
      .layout.float .left{
        float:left;
        width:300px;
        background: red;
      }
      .layout.float .center{
        background: yellow;
      }
      .layout.float .right{
        float:right;
        width:300px;
        background: blue;
      }
      </style>
      <h1>三欄佈局</h1>
      <article class="left-right-center">
        <div class="left"></div>
        <div class="right"></div>
        <div class="center">
          <h2>浮動解決方案</h2>
          1.這是三欄佈局的浮動解決方案;
          2.這是三欄佈局的浮動解決方案;
        </div>
      </article>
    </section>

浮動佈局是有侷限性的,浮動元素是脫離文檔流,要作清除浮動,這個處理很差的話,會帶來不少問題,好比高度塌陷等。
浮動佈局的優勢就是比較簡單,兼容性也比較好。只要清除浮動作的好,是沒有什麼問題的。瀏覽器

2. 絕對定位佈局

<section class="layout absolute">
      <style>
        .layout.absolute .left-center-right>div{
          position: absolute;
        }
        .layout.absolute .left{
          left:0;
          width: 300px;
          background: red;
        }
        .layout.absolute .center{
          left: 300px;
          right: 300px;
          background: yellow;
        }
        .layout.absolute .right{
          right:0;
          width: 300px;
          background: blue;
        }
      </style>
      <h1>三欄佈局</h1>
      <article class="left-center-right">
        <div class="left"></div>
        <div class="center">
          <h2>絕對定位解決方案</h2>
          1.這是三欄佈局的絕對定位解決方案;
          2.這是三欄佈局的絕對定位解決方案;
        </div>
        <div class="right"></div>
      </article>
    </section>

絕對定位佈局優勢,很快捷,設置很方便,並且也不容易出問題,你能夠很快的就能想出這種佈局方式。
缺點就是,絕對定位是脫離文檔流的,意味着下面的全部子元素也會脫離文檔流,這就致使了這種方法的有效性和可以使用性是比較差的。佈局

3. flex佈局

<section class="layout flexbox">
      <style>
        .layout.flexbox{
          margin-top: 110px;
        }
        .layout.flexbox .left-center-right{
          display: flex;
        }
        .layout.flexbox .left{
          width: 300px;
          background: red;
        }
        .layout.flexbox .center{
          flex:1;
          background: yellow;
        }
        .layout.flexbox .right{
          width: 300px;
          background: blue;
        }
      </style>
      <h1>三欄佈局</h1>
      <article class="left-center-right">
        <div class="left"></div>
        <div class="center">
          <h2>flexbox解決方案</h2>
          1.這是三欄佈局的felx解決方案;
          2.這是三欄佈局的flex解決方案;
        </div>
        <div class="right"></div>
      </article>
    </section>

flexbox佈局是css3裏新出的一個,它就是爲了解決上述兩種方式的不足出現的,是比較完美的一個。目前移動端的佈局也都是用flexbox。
flexbox的缺點就是不能兼容IE8及如下瀏覽器。學習

4. 表格佈局

<section class="layout table">
      <style>
        .layout.table .left-center-right{
          width:100%;
          height: 100px;
          display: table;
        }
        .layout.table .left-center-right>div{
          display: table-cell;
        }
        .layout.table .left{
          width: 300px;
          background: red;
        }
        .layout.table .center{
          background: yellow;
        }
        .layout.table .right{
          width: 300px;
          background: blue;
        }
      </style>
      <h1>三欄佈局</h1>
      <article class="left-center-right">
        <div class="left"></div>
        <div class="center">
          <h2>表格佈局解決方案</h2>
          1.這是三欄佈局的表格解決方案;
          2.這是三欄佈局的表格解決方案;
        </div>
        <div class="right"></div>
      </article>
    </section>

表格佈局在歷史上遭到不少人的摒棄,說表格佈局麻煩,操做比較繁瑣,其實這是一種誤解,在不少場景中,表格佈局仍是很適用的,好比這個三欄佈局,用表格佈局就輕易寫出來了。還有表格佈局的兼容性很好,在flex佈局不兼容的時候,能夠嘗試表格佈局。
表格佈局也是有缺陷的,當其中一個單元格高度超出的時候,兩側的單元格也是會跟着一塊兒變高的,而有時候這種效果不是咱們想要的。flex

5. 網格佈局

<section class="layout grid">
      <style>
        .layout.grid .left-center-right{
          width:100%;
          display: grid;
          grid-template-rows: 100px;
          grid-template-columns: 300px auto 300px;
        }
        .layout.grid .left-center-right>div{

        }
        .layout.grid .left{
          width: 300px;
          background: red;
        }
        .layout.grid .center{
          background: yellow;
        }
        .layout.grid .right{

          background: blue;
        }
      </style>
      <h1>三欄佈局</h1>
      <article class="left-center-right">
        <div class="left"></div>
        <div class="center">
          <h2>網格佈局解決方案</h2>
          1.這是三欄佈局的網格佈局解決方案;
          2.這是三欄佈局的網格佈局解決方案;
        </div>
        <div class="right"></div>
      </article>
    </section>

網格佈局也是新出的一種佈局方式,若是你答出這種方式,也就證實了你的實力,證實你對技術熱點是有追求的,也說明你有很強的學習能力。flexbox

相關文章
相關標籤/搜索