首頁 >web前端 >css教學 >CSS三欄佈局的實作方法總結(程式碼範例)

CSS三欄佈局的實作方法總結(程式碼範例)

不言
不言轉載
2019-01-25 11:48:504172瀏覽

這篇文章帶給大家的內容是關於CSS三欄佈局的實現方法總結(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

對於前端來說,佈局也是必須掌握的,一個好的佈局可以讓頁面看起來更美觀。提到佈局,那就不得不說CSS三欄佈局。這是前端面試常會問到的一個問題,算是基礎題。所謂的三欄佈局,一般是指左右兩邊固定中間自適應,或是中間固定左右兩邊自適應。

左右兩邊固定中間自適應

聖杯佈局

#HTML結構設定

新建一個父元素,包含三個子元素:left、main、right(注意,main在寫在前面,這樣在頁面渲染時會先載入中間,針對面試題優先載入中間部分)

style樣式設定

1、父元素設定高度
 2、三個元素皆設定浮動
 3、中間main部分定寬100%:width: 100%,左右兩邊依產品需求設定寬高
 4、左邊設定margin- left: -100%;右邊設定margin-right: -右盒子寬
 5、父元素設定padding-left: 左盒子寬;padding-right: 右盒子寬
 6、左右盒子相對定位

<div class="container">
  <div class="main f">go aheadgo aheadvgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo ahead</div>
  <div class="left f"></div>
  <div class="right f"></div>
</div>
<style>
  body {
    min-width: 700px;
  }
  .container {
     height: 300px;
     padding: 0 200px 0 200px;
  }
  .f {
     float: left;
  }
  .main {
     width: 100%;
     height: 300px;
     background-color: cornflowerblue;
  }
  .left {
     width: 200px;
     height: 300px;
     background-color: indianred;
     margin-left: -100%;
     position: relative;
     left: -200px;
  }
  .right {
     width: 200px;
     height: 300px;
     background-color: lightgreen;
     margin-left: -200px;
     position: relative;
     right: -200px;
  }
</style>

此佈局受內部元素影響而破壞佈局的機率低,但是當瀏覽器螢幕縮小的一定程度時,左右兩側的內容會掉下來,或發生重疊現象。解決方案,為body加上最小寬度(起碼大於左右兩側寬度總和)

雙飛翼佈局

與聖杯佈局的想法是一致的,只是有一些細微的差別。

HTML結構設定

新建一個父元素,包含三個子元素:left、main、right(注意,main在寫在前面,這樣在頁面渲染時會先載入中間,針對面試題優先載入中間部分)

style樣式設定

1、父元素設定高度
 2、三個元素皆設定浮動
 3、中間main部分定寬100 %:width: 100%,左右兩邊依產品需求設定寬高
 4、中間main部分再加一個盒子inner,放置內容(與聖杯佈局的不同點)
 5、左邊設定margin-left: -100%;右邊設定margin-right: -右盒子寬
 6、新加入盒子,inner,設定左右padding或margin

<div class="container">
   <div class="main f">
      <div class=inner>go aheadgo aheadvgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo ahead</div>
   </div>
   <div class="left f"></div>
   <div class="right f"></div>
</div>
<style>
  .container {
     height: 300px;
  }
  .f {
     float: left;
  }
  .main {
     width: 100%;
     height: 300px;
     background-color: cornflowerblue;
  }
  .left {
     width: 200px;
     height: 300px;
     background-color: indianred;
     margin-left: -100%;
  }
  .right {
     width: 200px;
     height: 300px;
     background-color: lightgreen;
     margin-left: -200px;
  }
  .inner {
    padding: 0 200px 0 200px;
  }
</style>

自身浮動

HTML結構設定

新建三個元素:left、right、main(注意,main寫在後面)

style樣式設定

1、左盒子左浮動,右盒子右浮動
 2、中間部分設定margin或padding值

<div class="left"></div>
<div class="right"></div>
<div class="main">我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容</div>
<style>
    .main {
        margin: 0 200px 0 200px;
        background-color: red;
        height: 200px;
    }
    .left {
        float: left;
        width: 200px;
        background-color: blue;
        height: 200px;
    }
    .right {
        float: right;
        width: 200px;
        background-color: pink;
        height: 200px;
    }
</style>

CSS3新功能:flex

HTML結構設定

新建一個父元素,包含三個子元素:left、main 、right(注意,main寫在中間)

style樣式設定

1、父元素設定寬度為100%,display: flex;
 2、左右兩則依產品需求設定寬高
 3、中間部分設定flex: 1;

<div class="container">
  <div class="left"></div>
  <div class="main">我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容</div>
  <div class="right"></div>
</div>
<style>
    .container {
       width: 100%;
       height: 200px;
       display: flex;
   }
   .main {
       flex: 1;
       background-color: red;
       height: 200px;
   }
   .left {
       width: 200px;
       background-color: blue;
       height: 200px;
   }
   .right {
       width: 200px;
       background-color: pink;
       height: 200px;
   }
</style>

還有其他的寫法,這裡就不一一贅述,只是列舉了一些比較常用的,以及面試可能會問到的情況。 CSS3還有很多好玩的特性,在工作和學習的過程中值得深入研究。

中間固定左右兩邊自適應

浮動負邊距(聖杯佈局)

HTML結構設定

新建一個父元素,包含三個子元素:left、main、right(注意,main寫在中間)

style樣式設定

1、左右兩邊各佔50%的寬度
 2、左負邊距margin-left 佔中間p寬度的一半
 3、右邊負邊距margin-right 也佔中間p寬度的一半

 <div class="container">
   <div class="left"></div>
   <div class="main">我是中间内容</div>
   <div class="right"></div>
 </div>
 <style>
    .main {
        width: 100px;
        text-align: center;
        float: left;
        background-color: lightgreen;
        height: 300px;
    }
    .left {
        height: 300px;
        float: left;
        width: 50%;
        margin-left: -50px;
        background-color: pink;
    }
    .right {
        height: 300px;
        float: right;
        width: 50%;
        margin-right: -50px;
        background-color: cornflowerblue;
    }
 </style>

CSS3新特性:flex

HTML結構設定

新建一個父元素,包含三個子元素:left、main、right

style樣式設定

#1、父元素設定display: flex;flex- direction: row;
 2、左右設定flex-grow: 1,平分剩餘空間

 <div class="container">
   <div class="left"></div>
   <div class="main">我是中间内容</div>
   <div class="right"></div>
 </div>
 <style>
    .container {
        display: flex;
        flex-direction : row;
    }
    .main {
        width: 200px;
        height: 300px;
        text-align: center;
        background-color: lightgreen;
    }
    .left {
        height: 300px;
        flex-grow: 1;
        background-color: pink;
    }
    .right {
        height: 300px;
        flex-grow: 1;
        background-color: cornflowerblue;
    }
 </style>

CSS3特性calc(四則運算)

用於動態計算長度值。要注意的是,運算子前後都需要保留一個空格,例如:width: calc(100% - 50px)。

HTML結構設定

新一個父元素,包含三個子元素:left、main、right

##style樣式設定

1、父元素設置100%寬;

 2、左右設定width: calc(50%, - 中間寬/2)

 <div class="container">
   <div class="left"></div>
   <div class="main">我是中间内容</div>
   <div class="right"></div>
 </div>
 .container {
     width: 100%;
     height: 300px;
 }
 .f {
     float: left;
 }
 .main {
     width: 100px;
     text-align: center;
     background-color: lightgreen;
     height: 300px;
 }
 .left {
     height: 300px;
     background-color: pink;
     width: calc(50% - 50px);  /*平分中间部分的宽度*/
 }
 .right {
     height: 300px;
     background-color: cornflowerblue;
     width: calc(50% - 50px);  /*平分中间部分的宽度*/
 }
路漫漫其修遠兮,沒有別人聰慧,那就堅持不懈努,相信勤能補拙。每天進步一點點,總有一天會邁進一大步。

#

以上是CSS三欄佈局的實作方法總結(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除