BFC块级格式化上下文
创始人
2025-05-31 14:39:14

一、概念

BFC - Block Formatting Context 块级格式化上下文 BFC的定义,在官方文档到中,是这么介绍BFC的:A block formatting context contains everything inside of the element creating it that is not also inside a descendant element that creates a new block formatting context.

翻译后:一个BFC区域包含创建该上下文元素的所有子元素,但是不包括创建了新的BFC的子元素的内部元素

可能大家翻译后也不太明白这句话的意思所以下面通过代码以及二次翻译来一起了解一下这句话所表达的意思

在上述代码中bfc_1是一个BFC区域他包含了创建该上下文的item1、item2、item3、bfc_2元素,通过bfc_2也是一个包含了item4、item5、的BFC区域,bfc_1不包含创建了bfc_2的内部元素。

需要注意的点:1.每一个BFC区域只包括其子元素,不包括其子元素的子元素。2.每一个BFC区域都是独立隔绝的,互不影响

二、触发BFC

并不是每个元素都是一个BFC,而是当他满足触发条件时才会形成了个BFC区域。

满足一下任意条件即可:

        ·body根元素

        ·设置浮动,不包括none

        ·设置定位,absoulte或者fixed

        ·行内块显示模式,inline-block

        ·设置overflow,即hidden,auto,scroll

        ·表格单元格,table-cell

        ·弹性布局,flex

三、利用BFC解决问题

因为每一个BFC区域都是独立隔绝的,互不影响。所以我们可以根据其特性来解决部分问题

1.解决外边距塌陷问题(垂直塌陷)

上述代码将渲染两个div元素且外边距为50px,那么这两个元素应该上下距离(50+50)100px,但会发现其渲染出来距离却是50px,这是因为出现了垂直塌陷导致的(两段margin重叠到了一块,互相影响)。

解决办法:由每个BFC都是相互隔绝互不影响的,所以我们可以将这两个div分别放在一个BFC里面即可。

 这样就可以解决了

 2.解决包含塌陷的问题

当父子关系的盒子,给子元素添加margin-top,有可能会把父元素一起带跑。

 解决方案:通过BFC进行将父盒子变成一个独立的区域,这样在BFC区域内部的任何操作,都不会影响到外部。

3.浮动产生影响时,可以通过BFC来消除浮动产生的影响

当一个父元素不设置高的时候,他的高度是由他的子元素决定的,但是当子元素添加浮动后,会导致子元素脱离文档流,从而导致父级高度塌陷。

当前页面展示

当给子元素添加浮动后

页面:会导致父元素高度塌陷

 解决方案:将父元素变成BFC内部子元素将不会影响外部元素

页面:

 4.BFC可以阻止标准流元素被浮动元素覆盖

当一个元素添加浮动后,会脱离文档流,会覆盖其他元素。

解决:将另一个元素变成BFC区域, 第一个元素添加了浮动已经是一个BFC区域了,两个BFC区域相互独立,互不影响。

页面:

四、总结

1.一个BFC区域只包含其子元素,不包括其子元素的子元素。

2.并不是所有的元素都能成为一块BFC区域,只有当这个元素满足条件的时候才会成为一块BFC区域。

3.不同的BFC区域之间是相互独立的,互不影响的。利用这个特性我们可以让不同BFC区域之间的布局不产生影响。

相关内容

热门资讯

超级文旅日 | 赶紧收藏!“1... 每月17日 孝感“知音湖北·超级文旅日”如期而至! 这个冬天 别再窝在家里“瑟瑟发抖”啦! 孝感的暖...
谁不想拥有一扇池州的窗呢 在池州每一扇窗都藏着一首流动的诗或框住青山黛瓦或映着湖光山色,或载着千年古韵或裹着咖啡清香☕️本期分...
图集|去中国大陆最南端,探寻“... 一个高水平滨海度假旅游目的地正在中国大陆最南端崛起。 广东湛江位于雷州半岛,与海南岛隔海相望,有碧海...
原创 杭... 一部原本只是悄悄上线的电视剧,因为大量真实取景于杭州街头,突然意外出圈。没有刻意滤镜,没有架空城市,...
员工礼物,二手400美元起!乐... 周日我们给大家介绍了一般人拿不到的六边形套装——乐高设计研讨会专属套装。其实别说是这样针对某个会议的...