什么是BFC
2020/11/4 9:50:14 閱讀:2675
發(fā)布者:2675
在一個Web頁面的CSS渲染中,塊級格式化上下文 (Block Fromatting Context)是按照塊級盒子布局的。
W3C對BFC的定義如下:
浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不為“visiable”的塊級盒子,都會為他們的內(nèi)容創(chuàng)建新的BFC(塊級格式上下文)。
為了便于理解,我們換一種方式來重新定義BFC。一個HTML元素要創(chuàng)建BFC,則滿足下列的任意一個或多個條件即可:
-
html 根元素
-
浮動元素:float 除 none 以外的值
-
絕對定位元素:position的值不是static或者relative。 而是position (absolute、fixed)
-
display 為 inline-block、table-cell、flex、table-caption或者inline-flex
-
overflow 除了 visible 以外的值 (hidden、auto、scroll)
雖然添加上述的任意一條都能創(chuàng)建BFC,但會有一些副作用:
-
display: table 可能引發(fā)響應性問題
-
overflow: scroll 可能產(chǎn)生多余的滾動條
-
float: left 將把元素移至左側(cè),并被其他元素環(huán)繞
-
overflow: hidden 將裁切溢出元素
BFC是一個獨立的布局環(huán)境,其中的元素布局是不受外界的影響,并且在一個BFC中,塊盒與行盒(行盒由一行中所有的內(nèi)聯(lián)元素所組成)都會垂直的沿著其父元素的邊框排列。
BFC布局規(guī)則:
-
內(nèi)部的Box會在垂直方向,一個接一個地放置。
-
Box垂直方向的距離由margin決定。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊
-
每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對于從左往右的格式化,否則相反)。即使存在浮動也是如此。BFC的區(qū)域不會與float box重疊。
-
BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。反之也如此。
-
計算BFC的高度時,浮動元素也參與計算