W3C對BFC的定義以下: 浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不爲"visiable"的塊級盒子,都會爲他們的內容建立新的BFC(Block Fromatting Context, 即塊級格式上下文)。html
一個HTML元素要建立BFC,則知足下列的任意一個或多個條件便可: 下列方式會建立塊格式化上下文:bash
不適用BFC狀況下,子元素使用浮動,父元素高度會塌陷佈局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.inner {
height: 50px;
width: 50px;
background: green;
float: left;
}
</style>
</head>
<body>
<div class="container">
<div class="inner"></div>
</div>
</body>
</html>
複製代碼
.container {
overflow: hidden;
}
複製代碼
當2個box在同一個BFC容器內,同時使用margin會引發外邊距重合flex
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
overflow: hidden;
}
.inner {
margin: 10px 0;
background: green;
}
</style>
</head>
<body>
<div class="container">
<div class="inner">div1</div>
<div class="inner">div2</div>
<div class="inner">div3</div>
</div>
</body>
</html>
複製代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
overflow: hidden;
}
.inner {
margin: 10px 0;
background: green;
}
.bfc {
overflow: hidden;
}
</style>
</head>
<body>
<div class="container">
<div class="inner">div1</div>
<div class="bfc">
<div class="inner">div2</div>
</div>
<div class="inner">div3</div>
</div>
</body>
</html>
複製代碼
根據規則BFC的區域不會與浮動元素的box重疊,能夠實現自適應兩欄佈局ui
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.left{
width: 500px;
height: 150px;
float: left;
background: rgb(139, 214, 78);
text-align: center;
line-height: 150px;
font-size: 20px;
}
.right{
overflow: hidden;
height: 300px;
background: rgb(170, 54, 236);
text-align: center;
line-height: 300px;
font-size: 40px;
}
</style>
</head>
<body>
<div class="left"></div>
<div class="right"></div>
</body>
</html>
複製代碼
以上都體現了spa
BFC就是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面的元素。反之也如此。3d