css中常見布局方式有哪些?


CSS中常見布局方式有哪些?下面本篇文章就來給大家介紹一下CSS中的常見布局方式,希望對大家有所幫助。

在介紹CSS布局方式之前我先簡單說明一下html中的三種布局方式:

  • 流動布局(默認)
  • 浮動布局(float)
  • 定位布局(position)

 好了,這里就不詳細介紹這三種布局了,今天我們的重頭戲是探索CSS中常見的布局方式有哪些

一、單列布局

常見的單列布局有兩種:

  • header,content 和 footer 等寬的單列布局
  • header 與 footer 等寬,content 略窄的單列布局

實現第一種方式很簡單,可以將 header , contentfooter 統一設置相等寬度,然后設置 margin:auto 即可實現居中:

<!-- html代碼 -->
<p class="header"></p> 
<p class="content"></p> 
<p class="footer"></p> 

<!-- css代碼 -->
.header{ 
 margin:0 auto; 
 max-width: 960px; 
 height:100px; 

} 
.content{ 
 margin: 0 auto; 
 max-width: 960px; 
 height: 400px; 

} 
.footer{ 
 margin: 0 auto; 
 max-width: 960px; 
 height: 100px; 

}

對於第二種,header 和  footer 可以不用設置寬度,讓其充滿整個屏幕(默認100%),只需將三者的內容設置同一個 width ,然后在通過 margin:auto 讓其內容居中

二、兩列自適應布局

兩列自適應布局是指一列由內容撐開,另一列撐滿剩余寬度的布局方式

實現方式:

  • float+overflow:hidden
  • Flex 布局
  • Grid 布局

1. float+overflow:hidden

實現原理:通過設置 overflow 觸發 BFC ,而 BFC 不會重疊浮動元素

<div class="container">
    <div class="left">left</div>
    <div class="right">right</div>
</div>
<style>
    .container{
        /* 觸發BFC格局 */
        overflow: hidden;
        /* 兼容IE6-瀏覽器 */
        zoom: 1;
    }
    .left{
        float: left;
        background-color: blue;
    }
    .right{
        overflow: hidden;
        zoom: 1;
        background-color: pink;
    }
</style>

注意:上述代碼是左側欄固定,右側自適應。

2. Flex 布局

Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性。任何一個容器都可以指定為 Flex 布局

Flex 布局是2009年W3C提出了一種新布局方案,在現在也得以廣泛使用,特別是移動端最優!

Flex 可以簡便、完整、響應式地實現各種頁面布局

詳細了解 Flex 布局請點擊:Flex布局

/* html同上 */
.container{
    display: flex;
}
.right{
    flex: 1;
}

只需兩行代碼即可完成兩列自適應布局,是不是很香~

3.Grid 布局

Grid布局,是一個基於網格的二維布局系統,目的是用來優化用戶界面設計。

詳細了解Grid布局請點擊:Grid布局

/* html同上 */
.container{
    display: grid;
    grid-template-columns: auto 1fr;
    grid-gap: 20px;
}

 三、三欄布局

 特征:中間列自適應寬度,旁邊兩側固定寬度,實現三欄布局有多種方式:

1.浮動布局

這種布局方式,dom 結構必須是先寫浮動部分,然后再中間塊,否則右浮動塊會掉到下一行。

浮動布局的優點就是比較簡單,兼容性也比較好。但浮動布局是有局限性的,浮動元素脫離文檔流,要做清除浮動,這個處理不好的話,會帶來很多問題,比如父容器高度塌陷等。

HTML代碼:

<div class="main">
    <div class="left"></div>
    <div class="right"></div>
    <div class="center"><h2>浮動布局</h2>
    </div>
</div>

CSS代碼:

/* 清除所有標簽默認樣式 */
*{
    margin: 0;
    padding: 0;
}
.left{
    float: left;
    width: 300px;
    height: 100px;
    background: pink;
}
.right{
    float: right;
    width: 300px;
    height: 100px;
    background: red;
}
.center{
    margin-left: 300px;
    margin-right: 300px;
    background-color: lightblue;
}

效果圖:

在這里給 .center 類設置左右外邊距是因為兩側的浮動元素占300像素,不設置外邊距中間內容多就會出現如下情況:

在前面也說了,浮動實現的三欄布局會使元素脫離文檔流,所以為了不影響其他元素的顯示需要清除浮動:

.main::after{
    content:'';
    display: block;
    clear: both;
}

2.絕對定位布局

HTML代碼:

<div class="main">
    <div class="left"></div>
    <div class="center">中
        絕對定位布局
    </div>
    <div class="right"></div>
</div>

CSS代碼:

*{
    margin: 0;
    padding: 0;
}
.main{
    position: relative;
}
.left{
    position: absolute;
    left: 0;
    width: 300px;
    background-color: red;
}
.center{
    position: absolute;
    left: 300px;
    right: 300px;
    background-color: blue;
}
.right{
    position: absolute;
    right: 0;
    width: 300px;
    background-color: pink;
}

在這里,由於 absolute 是相當於 static 定位以外的第一個父元素進行定位,所以我們要給其父元素添加 position:relative 屬性

絕對定位布局優點就是快捷,設置很方便,而且也不容易出問題。

缺點就是,容器脫離了文檔流,后代元素也脫離了文檔流,高度未知的時候,會有問題,這就導致了這種方法的有效性和可使用性是比較差的。

3.表格布局

table是一種常見的布局方式,他可以將整個頁面按照表格的方式設置為多行多列,但是由於書寫table標簽比較麻煩尤其是涉及到table內嵌table的時候,所以CSS給我們提供了 display:table 的方式可以讓我們方便的使用table布局, 設置子元素為列的屬性為 display:table-cell 

.main{
    width: 100%;
    display: table;
}
.left,.center,.right{
    display: table-cell;
}
.left{
    width: 300px;
    background-color: red;
}
.center{
    background-color: green;
}
.right{
    width: 300px;
    background-color: pink;
}

表格布局的兼容性很好,在 flex 布局不兼容的時候,可以嘗試表格布局。

同樣,不是誰都是完美的,表格布局也存在一定的缺陷:

  • 無法設置欄邊距
  • 對 seo 不友好
  • 當其中一個單元格高度超出的時候,兩側的單元格也是會跟着一起變高的

 4.彈性布局

這里彈性(flex)布局就不再過多解釋,感興趣的小伙伴可以查看阮一峰大佬的詳細教程:Flex布局

.main {
    display: flex;
}
.left{
    width: 400px;
    background-color: red;
}
.center{
    background-color: pink;
    flex: 1;
}
.right{
    background-color: green;
    width: 400px;
}

flexbox 布局是比較完美的一個三欄布局方案,flexbox 的缺點就是 IE10 開始支持,但是 IE10 的是-ms 形式的

5.網格布局

同樣,網格(grid)布局也不再詳細介紹,感興趣的小伙伴請查看:Grid布局

將屬性 display 值設為 grid 或 inline-grid 就創建了一個網格容器,所有容器直接子結點自動成為網格項目。

gird提供了 gird-template-columns、grid-template-rows屬性讓我們設置行和列的高、寬

div{
    display: grid;
    width: 100%;
    grid-template-columns: 300px auto 300px;
    grid-template-rows: 150px;
}

注意:網格布局的兼容性不好。IE10+上支持,而且也僅支持部分屬性。

此外,三列布局還有 聖杯布局雙飛翼布局

以上就是CSS中常見的布局方式了,幾種方式各有各的優點和缺點,沒有一個方法可以說是完美的,可以按照實際情況來選擇使用!🧡💛💚💙💜


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM