BFC
全稱:Block Formatting Context
, 名爲 "塊級格式化上下文"。css
W3C
官方解釋爲:BFC
它決定了元素如何對其內容進行定位,以及與其它元素的關係和相互做用,當涉及到可視化佈局時,Block Formatting Context
提供了一個環境,HTML
在這個環境中按照必定的規則進行佈局。html
簡單來講就是,BFC
是一個徹底獨立的空間(佈局環境),讓空間裏的子元素不會影響到外面的佈局。那麼怎麼使用BFC
呢,BFC
能夠看作是一個CSS
元素屬性前端
這裏簡單列舉幾個觸發BFC
使用的CSS
屬性git
BFC
就是一個塊級元素,塊級元素會在垂直方向一個接一個的排列BFC
就是頁面中的一個隔離的獨立容器,容器裏的標籤不會影響到外部標籤BFC
的兩個相鄰的標籤外邊距會發生重疊BFC
的高度時,浮動元素也參與計算<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>高度塌陷</title>
<style> .box { margin: 100px; width: 100px; height: 100px; background: red; float: left; } .container { background: #000; } </style>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
</div>
</body>
</html>
複製代碼
效果:github
能夠看到上面效果給box
設置完float
結果脫離文檔流,使container
高度沒有被撐開,從而背景顏色沒有顏色出來,解決此問題能夠給container
觸發BFC
,上面咱們所說到的觸發BFC
屬性均可以設置。npm
修改代碼markdown
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>高度塌陷</title>
<style> .box { margin: 100px; width: 100px; height: 100px; background: red; float: left; } .container { background: #000; display: inline-block; } </style>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
</div>
</body>
</html>
複製代碼
效果:數據結構
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style> .box { margin: 10px; width: 100px; height: 100px; background: #000; } </style>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
</div>
</body>
</html>
複製代碼
效果:app
能夠看到上面咱們爲兩個盒子的margin
外邊距設置的是10px
,可結果顯示兩個盒子之間只有10px
的距離,這就致使了margin
塌陷問題,這時margin
邊距的結果爲最大值,而不是合,爲了解決此問題可使用BFC
規則(爲元素包裹一個盒子造成一個徹底獨立的空間,作到裏面元素不受外面佈局影響),或者簡單粗暴方法一個設置margin
,一個設置padding
。ide
修改代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Margin邊距重疊</title>
<style> .box { margin: 10px; width: 100px; height: 100px; background: #000; } </style>
</head>
<body>
<div class="container">
<div class="box"></div>
<p><div class="box"></div></p>
</div>
</body>
</html>
複製代碼
效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>兩欄佈局</title>
<style> div { width: 200px; height: 100px; border: 1px solid red; } </style>
</head>
<body>
<div style="float: left;">
兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局
</div>
<div style="width: 300px;">
我是蛙人,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭
</div>
</body>
</html>
複製代碼
效果:
能夠看到上面元素,第二個div
元素爲300px
寬度,可是被第一個div
元素設置Float
脫離文檔流給覆蓋上去了,解決此方法咱們能夠把第二個div
元素設置爲一個BFC
。
修改代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>兩欄佈局</title>
<style> div { width: 200px; height: 100px; border: 1px solid red; } </style>
</head>
<body>
<div style="float: left;">
兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局兩欄佈局
</div>
<div style="width: 300px;display:flex;">
我是蛙人,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭,若有幫助請點個贊叭
</div>
</body>
</html>
複製代碼
效果:
謝謝你讀完本篇文章,但願對你能有所幫助,若有問題歡迎各位指正。
我是蛙人(✿◡‿◡),若是以爲寫得能夠的話,請點個贊吧❤。
感興趣的小夥伴能夠加入 [ 前端娛樂圈交流羣 ] 歡迎你們一塊兒來交流討論
寫做不易,「點贊」+「在看」+「轉發」 謝謝支持❤
《聊聊什麼是CommonJs和Es Module及它們的區別》
《【建議收藏】分享一些工做中經常使用的Git命令及特殊問題場景怎麼解決》