溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

CSS中塊級(jí)格式是什么

發(fā)布時(shí)間:2021-03-16 10:16:24 來源:億速云 閱讀:137 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)CSS中塊級(jí)格式是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

1.BFC 定義

BFC(Block formatting context)直譯為"塊級(jí)格式化上下文"。它是一個(gè)獨(dú)立的渲染區(qū)域,只有Block-level box(塊級(jí)元素)參與, 它規(guī)定了內(nèi)部的Block-level Box如何布局,并且與這個(gè)區(qū)域外部毫不相干.

通俗地來說:創(chuàng)建了 BFC的元素就是一個(gè)獨(dú)立的盒子,里面的子元素不會(huì)在布局上
影響外面的元素(里面怎么布局都不會(huì)影響外部),BFC任然屬于文檔中的普通流

2.BFC的生成:

知道了BFC怎么觸發(fā)BFC
滿足以下條件之一都可以觸發(fā)BFC,變身為BFC

根元素

float屬性不為none

position不為static和relative

overflow不為visible

display為inline-block, table-cell, table-caption, flex, inline-flex

你會(huì)發(fā)現(xiàn)BFC無處不在,只是自己用的時(shí)候不知道而已

3.BFC布局規(guī)則:

變身為BFC后有什么特性呢,以下:

內(nèi)部的Box會(huì)在垂直方向,一個(gè)接一個(gè)地放置。

Box垂直方向的距離由margin決定。屬于同一個(gè)BFC的兩個(gè)相鄰Box的margin會(huì)發(fā)生重疊

每個(gè)元素的margin box的左邊, 與包含塊border box的左邊相接觸(對(duì)于從左往右的格式化,否則相反)。即使存在浮動(dòng)也是如此。

BFC的區(qū)域不會(huì)與float box重疊。

BFC就是頁面上的一個(gè)隔離的獨(dú)立容器,容器里面的子元素不會(huì)影響到外面的元素。反之也如此。

計(jì)算BFC的高度時(shí),浮動(dòng)元素也參與計(jì)算

4.BFC作用:

用起來come boby

1.防止外邊距重疊

bfc導(dǎo)致的屬于同一個(gè)bfc中的子元素的margin重疊(Box垂直方向的距離由margin決定。屬于同一個(gè)BFC的兩個(gè)相鄰Box的margin會(huì)發(fā)生重疊)

問題:由圖可以看到,String1和String2 之間只有20px的margin,按理來說應(yīng)該是40px,但這是在bfc中導(dǎo)致了他們的margin重疊

代碼:

<style>.container1{
        /* 通過overflow:hidden可以創(chuàng)建bfc */
        overflow: hidden;
        background-color: red;
        width: 300px;
    }
    .sub1{
        margin: 20px 0px;
        background-color: #dea;
    }</style><div class="container1">
        <div class="sub1">String1</div>
        <div class="sub1">String2</div></div>

解決方法:我們可以在div外面包裹一層容器,并觸發(fā)該容器生成一個(gè)BFC。那么兩個(gè)div便不屬于同一個(gè)BFC,就不會(huì)發(fā)生margin重疊了。

代碼:

<style>
    .newbfc{
            overflow: hidden;
    }</style><div class="container1">
        <div class="sub1">String1</div>
        <div class="newbfc"><div class="sub1">String2</div></div></div>

2.清除浮動(dòng):

問題:當(dāng)元素的子元素都浮動(dòng)后,會(huì)出現(xiàn)高度坍塌的現(xiàn)象,即父容器的高度不會(huì)被撐開

代碼:

<style>
    .pre2{
        width: 200px;
        border: 2px solid red;
    }
    .float1,.float2{
        width: 100px;
        height: 100px;
        float: left;
    }
    .float1{
        background-color: #dee;
    }
    .float2{
        background-color: #dcc;
    }</style><div class="pre2">
        <div class="float1"></div>
        <div class="float2"></div></div>

解決方法:

bfc的規(guī)則:計(jì)算BFC的高度時(shí),浮動(dòng)元素也參與計(jì)算所以只要將父容器設(shè)置為bfc就可以把子元素包含進(jìn)去:
這個(gè)容器將包含浮動(dòng)的子元素,它的高度將擴(kuò)展到可以包含它的子元素,在這個(gè)BFC,這些元素將會(huì)回到頁面的常規(guī)文檔流。

.pre2{
        width: 200px;
        border: 2px solid red;
        /* 設(shè)置overflow*/
        overflow:hidden;
    }

3.解決布局:防止文字環(huán)繞

代碼:

<style>.container2{
        overflow: hidden;
        width: 200px;
    }
    .box{
        float: left;
        width: 100px;
        height: 30px;
        background-color: #daa;
    }</style><div class="container2">
        <div class="box"></div>
        <p style="background-color: #eea">sdfadsfdff fffffffds fsfffff sfd  fsdsdfsdf fffffff</p></div>

這個(gè)p元素并沒有移動(dòng),但是它卻出現(xiàn)在浮動(dòng)元素的下方。p元素的line boxes(指的是文本行)進(jìn)行了移位。此處line boxes的水平收縮為浮動(dòng)元素提供了空間。

bfc的規(guī)則:每個(gè)元素的margin box的左邊, 與包含塊border box的左邊相接觸(對(duì)于從左往右的格式化,否則相反)。即使存在浮動(dòng)也是如此。

解決這個(gè)問題只要將p元素添加overflow:hidden使其成為一個(gè)新的bfc就可以了

感謝各位的閱讀!關(guān)于“CSS中塊級(jí)格式是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI