CSS布局的幾種方式


轉載

原文地址:https://blog.csdn.net/zhang6223284/article/details/81909600

一、table 布局

CSS 的布局應該是 CSS 體系中的重中之重了,主要的布局方式有 table 表格布局(早期),float 浮動布局和 flex 布局,還有針對於移動端的響應式布局,不論是工作還是面試都是非常重要的知識。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS 布局</title>
</head>
<style>
.container{
    height:200px;
    width: 200px;
}
.left{
    background-color: red
}
.right{
    background-color: green
}
</style>
<body>
    <table class=container>
        <tbody>
            <tr>
                <td class=left></td>
                <td class=right></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

table 的特性決定了它非常適合用來做布局,並且表格中的內容可以自動居中,這是之前用的特別多的一種布局方式
而且也加入了 display:table;dispaly:table-cell 來支持 teble 布局

但是它也有自身的局限性,比如 table 比其它 html 標記占更多的字節(造成下載時間延遲,占用服務器更多流量資源),table 會阻擋瀏覽器渲染引擎的渲染順序。(會延遲頁面的生成速度,讓用戶等待更久的時間),但是某些情況下,當采用其他方式不能很好的達到自己的效果時,采用 table 布局能適應當前場景。

 二、flex 布局

2.1 盒模型

在介紹 flex 布局之前,我們先了解一下盒模型的概念,這個是 css 最基礎的概念,首先,我們引用一張圖來解釋

這是百度百科里面盒模型的一張圖。首先最中間的是 content 區域,即我們常說的內容區。我們通常設置的 height 和 width 就是設置的這部分的長度。內容區外部是 padding 區域,這部分指的是內容區到邊框的區域,即我們常說的內邊距。然后就是 border 區,border 區本身也是占據空間的。邊框外面是 margin 區,這部分指的是當前元素與其他元素的距離,即常說的外邊距。

首先要明白我們平常說的寬度和高度指的是內容區的寬度和高度。

然后計算一個盒子占用的空間是 content + padding + border + margin

2.2 display / poistion

這里還要介紹兩個屬性,display 和 poistion

display 有如下幾個值

  • block(元素表現為塊級元素,有固定寬高,獨占一行)
  • inline(元素表現為行內元素,不能設置寬高)
  • inline-block (對外表現為行內元素,對內表現為塊級元素)3

position 有如下幾個值

  • static(默認情況,存在文檔流當中)
  • relative(根據元素本身原來所應該處的位置偏移,不會改變布局的計算)
  • absolute(絕對定位,脫離文檔流,不會對別的元素造成影響,相對的是父級最近的 relative 或者 absolute 定位元素)
  • fixed(絕對定位,脫離文檔流,相對於的是屏幕,就是那些浮動的廣告那樣,怎么拉都固定在同一個位置,而 absolute 元素離開屏幕就看不見了)
  • position 的層疊是按順序層疊的,不過可以通過設置 z-index 來改變層疊順序,只有 relative,absolute,fixed 可以設置 z-index。

2.3 flexbox 布局

flexbox 布局即彈性盒子布局,它的特點是盒子本來就是並列的,只需要指定寬度,來看一個經典的三欄布局的例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS 布局</title>
</head>
<style>
.container{
    height:200px;
    width: 200px;
    display: flex
}
.left{
    background-color: red; 
    flex: 1;
}
.middle{
    background-color: yellow; 
    flex: 1;    
}
.right{
    background-color: green;
    flex: 1;
}
</style>
<body>
    <div class=container>
        <div class=left></div>
        <div class=middle></div>
        <div class=right></div>
    </div>
</body>
</html>

有時我們可能需要兩邊定寬,中間自適應,那么可以這樣寫

三、 float 布局

float 布局應該是目前各大網站用的最多的一種布局方式了,但是也特別復雜,這里詳細講一下

首先,什么是浮動?

浮動元素是脫離文檔流的,但不脫離文本流,這是什么意思呢,用過 word 的應該知道有一種圖片環繞的方式是文字環繞吧,就是這種效果。

那么它有什么特點呢

  • 對自身的影響
  1. float 元素可以形成塊,如 span 元素。可以讓行內元素也擁有寬和高,因為塊級元素具有寬高
  2. 浮動元素的位置盡量靠上
  3. 盡量靠左(float:left)或右(float:right),如果那一行滿足不了浮動元素的寬度要求,則元素會往下掉
  • 對兄弟元素的影響
  1. 不影響其他塊級元素的位置
  2. 影響其他塊級元素的文本
  3. 上面貼非 float 元素
  4. 旁邊貼 float 元素或者邊框
  • 對父級元素的影響
  1. 從布局上 “消失”
  2. 高度塌陷

四、響應式布局

4.1 meta 標簽

最簡單的處理方式是加上一個 meta 標簽

<meta name="viewport" content="width=device-width, initial-scale=1">

其中,width = device-width 這一句的意思是讓頁面的寬度等於屏幕的寬度

4.2 使用 rem

rem 指的是 html 元素的 font-size,html 元素的 font-size 默認是 16px,所以 1 rem = 16px;然后根據 rem 來計算各個元素的寬高,然后配合 media query 就可以實現自適應。

4.3 media query

@media screen and (max-width: 360px) {  
     html { font-size: 12px;    }
}

意思就是: 當屏幕的寬度小於等於 360 px 的時候 html 的字體大小為 12 px。

有一個需要注意的點是范圍大的要放在上面,范圍小的放在下面。假設有兩個樣式,一個適應 360px 以下,一個適應 640px 以下,如果 360px 的放在上面,但是小於 360px 同樣滿足小於 640px,這就不是我們想要的結果了,所以范圍大的需要放在上面。

 


免責聲明!

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



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