文檔流、浮動布局、流式布局、定位布局、flex布局、響應布局


一、文檔流

1、什么是文檔流

將窗體自上而下分成一行一行,塊級元素從上至下、行內元素在每行中從左至右的順序依次排放元素

2、本質

文檔流本質是 nomal flow (普通流、常規流)

3、BFC(Block Formatting Contxt)

塊級格式化上下文,它是一個獨立的渲染區域,只有Block-level box參與,它規定了內部的Block-level Box如何布局,並且與這個區域外部毫不相干

4、BFC的規則

  •  內部的Box會在垂直方向,一個接一個地放置;
  •  Box自身垂直方向的位置由margin-top決定,屬於同一個BFC的兩個相鄰Box的margin會發生重疊(取最大值);
  •  Box自身水平方向的位置由margin左或右決定(具體已經參照BFC方位),屬於同一個BFC的兩個相鄰Box的margin會發生疊加。

 

二、浮動布局

float: left | right

1、目的

float的目的是讓block同行顯示(在父級規定的寬度內、不完全脫離文檔流)

2、文檔流、完全脫離文檔流、不完全脫離文檔流

1、文檔流:子標簽在父級標簽沒有設置高度時,會自動撐開父級

2、完全脫離文檔流:子標簽不再為父級撐開高度,子標簽高於文檔流,不占用盒子模型的空間,有一個z-index

3、不完全脫離文檔流:這是浮動后的結果,不清浮動,不會撐開父級高度,清浮動后,會重新撐開父級高度

3、清浮動

(1)原因

在子級中使用浮動布局,若是父級有兄弟標簽,會出現布局問題

(2)解決方法

原理:在浮動布局情況下,讓父級獲得合適的高度

復制代碼
/*方法1. 浮動的父級設置高度*/
super {
    height: npx;
}

/*方法2. 浮動的父級設置overflow*/
super {
    overflow: hidden;
}

/*方法3. 浮動的父級兄弟設置clear,一般利用both同時清左右兩邊的浮動*/
brother {
    clear: left | right | both;
}

/*方法4. 浮動的父級偽類清浮動,一般利用both同時清左右兩邊的浮動*/
super:after {
    content: "";
    display: block;
    clear: left | right | both;
}
復制代碼

 

三、流式布局

1、目的

讓布局脫離固定值限制,可以根據頁面情況改變相應發生改變

復制代碼
<style type="text/css">
    .wrap {
        max-width: 1200px;
        min-width: 800px;
        width: 90%;
        height: 600px;
        margin: 0 auto;
        background-color: orange;
    }
</style>
<div class="wrap"></div>
復制代碼

2、常用操作

  •  百分比設置 %    參考最近父級
  •  窗口比設置 vw | vh
  •  字體控制 em | rem  ,em最近設置字體大小的父級規定的字體大小,rem為html字體大小
  流式布局案例

 

四、定位布局

1、目的

讓目標(要被布局的)標簽在指定參考系下任意布局

2、語法

復制代碼
<!-- 基本語法: -->
<!-- 1.通過position設置定位是否開啟 -->
<!-- static:靜態,未定位(默認值) -->
<!-- relative: 相對定位, 未脫離文檔流 -->
<!-- absolute: 絕對定位, 完全脫離文檔流 -->
<!-- fixed: 固定定位, 完全脫離文檔流 -->
<!-- 2.定位開啟后,四個定位方位便會開啟,且四個方位均參與布局 -->
<!-- 如果發生沖突,左右取左,上下取上 -->

position: static | relative | absolute | fixed
布局方位:left | right | top | bottom
復制代碼

 

3、相對定位(relative)

未脫離文檔流,相對布局方位只改變盒子顯示區域,不改變盒子原有位置,

簡單的說相當於靈魂出竅,在原有位置仍然占一塊區域,margin-top改變會影響兄弟盒子

相對定位主要用於給父級定位,從而輔助子級的絕對定位

(1)開啟定位

position relative;

(2)方位布局,方位改變上盒子不會影響下盒子(靈魂出竅),四個方位如果發生沖突,左右取左,上下取上

left:30px;
top:30px;

(3)參考系

相對定位參考系為自身原有位置

(4)案例

  相對布局案例

 

4、絕對定位(absolute)

完全脫離文檔流,有一個z-index可以控制兩個絕對定位的優先級,不在文檔流中占位,也永遠不會撐開父級高度,永遠不會影響兄弟布局,顯示層高於文檔流層

margin依舊可以影響自身布局,但不會影響兄弟布局,margin改變兄弟標簽布局不會改變

(1)開啟定位

position:absolute;

(2)定位布局

left:30px;
top:30px;

(3)參考系

最近的已定位的父級,sup(未定位) -> body(未定位) -> html(文檔窗口)

(4)案例

  絕對定位案例

 

5、固定定位(fixed)

完全脫離文檔流,有一個z-index可以控制兩個絕對定位的優先級,不在文檔流中占位,也永遠不會撐開父級高度,永遠不會影響兄弟布局,顯示層高於文檔流層

margin依舊可以影響自身布局,但不會影響兄弟布局,margin改變兄弟標簽布局不會改變

(1)開啟定位

position:fixed;

(2)定位布局

left:30px;
top:30px;

(3)參考系

頁面窗口

(4)案例

  固定定位案例

 

五、flex布局

1、目的

Flex是Flexible Box的縮寫,意為”彈性布局”,用來為盒狀模型提供最大的靈活性。設為Flex布局以后,子元素的float、clear和vertical-align屬性將失效。

flex可以很好的解決垂直居中問題

2、名詞概念

  • 采用Flex布局的元素,稱為Flex容器(flex container),簡稱”容器”。它的所有子元素自動成為容器成員,稱為Flex項目(flex item),簡稱”項目”。

  • 水平為軸(main axis),主軸的開始位置(與邊框的交叉點)叫做main start,結束位置叫做main end。

  • 垂直為交叉軸(cross axis),交叉軸的開始位置叫做cross start,結束位置叫做cross end。

  • 項目默認沿主軸排列。單個項目占據的主軸空間叫做main size,占據的交叉軸空間叫做cross size。

3、容器屬性

復制代碼
1. flex-direction 屬性 決定主軸的方向(即項目的排列方向)
flex-direction: row | row-reverse | column | column-reverse;
     row(默認值):主軸為水平方向,起點在左端。
     row-reverse:主軸為水平方向,起點在右端。
     column:主軸為垂直方向,起點在上沿。
     column-reverse:主軸為垂直方向,起點在下沿。

2. flex-wrap 屬性 定義,如果一條軸線排不下,如何換行。
flex-wrap: nowrap | wrap | wrap-reverse;
     nowrap(默認):不換行。
     wrap:換行,第一行在上方。
     wrap-reverse:換行,第一行在下方。

3. flex-flow 屬性 是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值為row nowrap。
flex-flow: <flex-direction> <flex-wrap>;

4. justify-content 屬性 定義了項目在主軸上的對齊方式。
justify-content: flex-start | flex-end | center | space-between | space-around;

5. align-items 屬性 定義項目在交叉軸上如何對齊。
align-items: flex-start | flex-end | center | baseline | stretch;

6. align-content 屬性 定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
復制代碼

4、項目屬性

復制代碼
1. order 屬性 定義項目的排列順序。數值越小,排列越靠前,默認為0。
order: <integer>;

2. flex-grow 屬性 定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大。
flex-grow: <number>; /* default 0 */

3. flex-shrink 屬性 定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。
flex-shrink: <number>; /* default 1 */

4. flex-basis 屬性 定義了在分配多余空間之前,項目占據的主軸空間(main size)。
flex-basis: <length> | auto; /* default auto */

5. flex 屬性 是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選。
flex: <flex-grow> <flex-shrink> <flex-basis>

6. align-self 屬性 允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同於stretch。
align-self: auto | flex-start | flex-end | center | baseline | stretch;
復制代碼

5、主要了解

1.將父級display屬性設置為flex,則父級成為container,子級成為item
2.container設置item的排列方向flex-direction
3.item對於container的空間占比flex-grow

6、案例

  flex布局案例

 

六、響應式布局

當響應式布局中樣式塊起作用時,會與正常樣式塊設置協同布局,遵循選擇器的優先級規則

1、目的

設置在不同頁面寬度下的布局,滿足當前屏幕尺寸時,該樣式塊起作用,不滿足時,則樣式塊失效

2、語法

復制代碼
/*當頁面尺寸小於<integer>寬度時的樣式*/
@media only screen and (max-width: <integer>) {
    selector {
        
    }
}


/*當頁面尺寸大於<integer1>寬度,小於<integer2>寬度時的樣式*/
@media only screen and (min-width: <integer1>) and (max-width: <integer2>) {
    selector {
        
    }
}


/*當頁面尺寸大於於<integer3>寬度時的樣式*/
@media only screen and (min-width: <integer>) {
    selector {
        
    }
}
復制代碼

3、原則

(1)采用響應式布局的頁面,基本樣式塊只做共性樣式設置,需要根據頁面尺寸進行適應變化的樣式均有響應式布局處理
(2)要進行響應式布局的頁面要處理所有屏幕尺寸下的樣式塊

4、案例

復制代碼
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>響應式布局</title>
    <style type="text/css">
        /*基本樣式塊*/
        /*.box {
            max-width: 1200px;
            width: 95%;
            margin: 0 auto;
            background-color: red!important;
        }
        .it {
            width: 300px;
            height: 300px;
            font: 900 50px/300px 'STSong';
            text-align: center;
            float: left;
            border-radius: 50%;
            background-color: orange;
        }
        .box:after {
            content: "";
            display: block;
            clear: both;
        }*/
        
        html, body {
            margin: 0;
        }
        .it {
            height: 300px;
            background-color: orange;
            font: 900 50px/300px 'STSong';
            text-align: center;
            border-radius: 50%;
            float: left;
        }
        .box:after {
            content: "";
            display: block;
            clear: both;
        }
        /*屏幕寬度超出1200px*/
        @media only screen and (min-width: 1200px) {
            
            .box {
                background-color: pink;
            }
            .it {
                width: 25%;
            }

            
        }
        /*屏幕寬度間於600至1200px*/
        @media only screen and (min-width: 600px) and (max-width: 1200px) {
            .box {
                background-color: brown;
            }
            .it {
                width: 30%;
                margin: 0 calc(10% / 6);
            }

        }
        /*屏幕寬度小於600px*/
        @media only screen and (max-width: 600px) {
            .box {
                background-color: cyan;
            }
            .it {
                width: 80%;
                margin-left: 10%;
                min-width: 300px;
            }
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="it">1</div>
        <div class="it">2</div>
        <div class="it">3</div>
        <div class="it">4</div>
        <div class="it">5</div>
        <div class="it">6</div>
        <div class="it">7</div>
        <div class="it">8</div>
        <div class="it">9</div>
        <div class="it">10</div>
        <div class="it">11</div>
        <div class="it">12</div>
    </div>
</body>
</html>
復制代碼

 


免責聲明!

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



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