CSS理解塊級(jí)格式上下文(BFC)
1.BFC 定義
BFC(Block formatting context)直譯為"塊級(jí)格式化上下文"。它是一個(gè)獨(dú)立的渲染區(qū)域,只有Block-level box(塊級(jí)元素)參與, 它規(guī)定了內(nèi)部的Block-level Box如何布局,并且與這個(gè)區(qū)域外部毫不相干.
通俗地來(lái)說(shuō):創(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無(wú)處不在,只是自己用的時(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就是頁(yè)面上的一個(gè)隔離的獨(dú)立容器,容器里面的子元素不會(huì)影響到外面的元素。反之也如此。
- 計(jì)算BFC的高度時(shí),浮動(dòng)元素也參與計(jì)算
4.BFC作用:
用起來(lái)come boby
1.防止外邊距重疊
bfc導(dǎo)致的屬于同一個(gè)bfc中的子元素的margin重疊(Box垂直方向的距離由margin決定。屬于同一個(gè)BFC的兩個(gè)相鄰Box的margin會(huì)發(fā)生重疊)
問(wèn)題:由圖可以看到,String1和String2 之間只有20px的margin,按理來(lái)說(shuō)應(yīng)該是40px,但這是在bfc中導(dǎo)致了他們的margin重疊

代碼:
<style>
.container1{
/* 通過(guò)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):
問(wèn)題:當(dāng)元素的子元素都浮動(dòng)后,會(huì)出現(xiàn)高度坍塌的現(xiàn)象,即父容器的高度不會(huì)被撐開(kāi)

代碼:
<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ì)回到頁(yè)面的常規(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元素并沒(méi)有移動(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è)問(wèn)題只要將p元素添加overflow:hidden使其成為一個(gè)新的bfc就可以了

總結(jié)
以上所述是小編給大家介紹的CSS理解塊級(jí)格式上下文(BFC)的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
這篇文章主要介紹了10分鐘理解BFC原理及其應(yīng)用的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-01
這篇文章主要介紹了淺析CSS里的BFC和IFC的用法的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-30
這篇文章主要介紹了淺談CSS潛藏著的BFC的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-08css布局之BFC模式(block formatting context)
這篇文章主要介紹了css布局之BFC模式(block formatting context),通過(guò)BFC盒子的一些特性和應(yīng)用場(chǎng)景解釋了BFC模式,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙2017-08-16- 這篇文章主要介紹了CSS布局基礎(chǔ)BFC 的相關(guān)資料,需要的朋友可以參考下2016-07-14
CSS使用BFC規(guī)則布局引發(fā)外層div包裹內(nèi)層div的處理方法
BFC情況下人們通常在div中使用float和margin,這會(huì)經(jīng)常出現(xiàn)一些問(wèn)題,這里就來(lái)看一下CSS使用BFC規(guī)則布局引發(fā)外層div包裹內(nèi)層div的處理方法,需要的朋友可以參考下.2016-06-03




