筆記 前端需要了解的BFC

什麼是BFC?

BFC指的是Block Formatting Context,它提供了一個環境, html元素在這個環境中按照一定規則進行佈局。一個環境中的元素不會影響到其他環境中的佈局,決定了元素如何對其內容進行定位,以及和其他元素的關係和相互作用。

其中:FC(Formatting Context)指的是頁面中的一個渲染區域,並且擁有一套渲染規則,它決定了其子元素如何定位,以及與其他元素的相互關係和作用。

塊級格式化上下文,指的是一個獨立的塊級渲染區域, 只有block-level box參與,該區域擁有一套渲染規則來約束塊級盒子的佈局,且與區域外部無關。

BFC的生成

  1. float的值不爲none;
  2. overflow的值不爲visible;
  3. display的值爲 inline-block, table-cell, table-caption;
  4. position的值爲absolute或fixed;

BFC的約束規則

生成BFC元素的子元素會一個接一個的放置。垂直方向上他們的起點是一個包含塊的頂部,兩個相鄰子元素之間的垂直距離取決於元素的margin特性。在BFC中相鄰的塊級元素外邊距會摺疊。

生成BFC元素的子元素中,每一個子元素做外邊距與包含塊的左邊界相接觸,(對於從右到左的格式化,右外邊距接觸右邊界),即使浮動元素也是如此(儘管子元素的內容區域會由於浮動而壓縮),除非這個子元素也創建了一個新的BFC(如它自身也是一個浮動元素)。

內部的Box會在垂直方向上一個接一個的放置。

垂直方向上的距離由margin決定。(完整的說法是:屬於同一個BFC的兩個相鄰Box的margin會發生重疊,與方向無關。)

每個元素的左外邊距與包含塊的左邊界相接觸(從左向右),即使浮動元素也是如此。(這說明BFC中子元素不會超出他的包含塊,而position爲absolute的元素可以超出他的包含塊邊界)。

BFC的區域不會與float的元素區域重疊

計算BFC的高度時,浮動子元素也參與計算

BFC就是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面元素,反之亦然。

BFC在佈局中的應用

不和浮動元素重疊:如果一個浮動元素後面跟着一個非浮動元素, 就會產生覆蓋。

防止margin重疊:同一個BFC中的兩個相鄰Box纔會發生重疊與方向無關,不過由於上文提到的第一條限制,我們甚少看到水平方向的margin重疊。這在IE中是個例外,IE可以設置write-mode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章