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