BFC(Block formatting context)直譯爲」塊級格式化上下文」。它是一個獨立的渲染區域,只有Block-level box參與, 它規定了內部的Block-level Box如何佈局,而且與這個區域外部絕不相干。 跟BFC相關的概念有Box
,Formatting Conetxt
。css
Box是CSS佈局的基本單位,分爲block-level box和inline-level box,不一樣類型的Box,會參與不一樣的Formating。 block-level box
:當display爲block, list-item, table的元素 inline-level box
:當displayinline, inline-block, inline-table的元素html
Formatting context是頁面中的一塊渲染區域,而且有一套渲染規則,決定其子元素將如何定位,以及其餘元素的關係和相互做用。 常見的Formatting context的有Block fomatting context (簡稱BFC)和 Inline formatting context (簡稱IFC)。ide
利用BFC規則BFC的區域不會與float box重疊
。觸發右邊的元素生成BFC,來實現兩欄佈局。 HTML:
佈局
<body>
<div class="aside"></div>
<div class="main"></div>
</body>
複製代碼
CSS:
flex
html{
height: 100%;
}
body{
margin: 0;
padding: 0;
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
}
.aside{
width: 300px;
height: 100%;
float: left;
background: #f66;
}
.main{
height: 100%;
background: #fcc;
overflow: hidden;
}
複製代碼
利用BFC規則計算BFC的高度時,浮動元素也參與計算
。經過overflow: hidden
觸發父元素生成BFC HTML:
spa
<div class="out">
<div class="in1"></div>
<div class="in2"></div>
</div>
複製代碼
CSS:
code
.out{
width: 500px;
background-color: #666;
overflow: hidden;
}
.in1{
width: 100px;
height: 100px;
float: left;
background-color: #999;
}
.in2{
width: 100px;
height: 100px;
float: left;
background-color: #ccc;
}
複製代碼
利用BFC規則Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊算
,咱們能夠在一個元素外面包裹一層容器,並處罰金該容器生成一個BFC。則和相鄰元素不屬於同一個BFC,就不會發生margin重疊了。 HTML:
orm
<p>Haha</p>
<div class="wrap">
<p>Hehe</p>
</div>
複製代碼
CSS:
htm
.wrap{
overflow: hidden;
}
p{
background-color: #333;
width: 200px;
margin: 100px;
}
複製代碼