学习记录——BFC(块格式化上下文)

1,639 阅读3分钟

目录:

以下图片及资料引自:

MDN文档——块格式化上下文

腾讯课堂——BFC浅析

概念定义:

BFC(块格式化上下文),是布局当中生成的块级盒子的区域,也是浮动元素与其他元素的交互限定区域,可以简单的理解为一个CSS渲染规则,但是需要由一定条件才能够触发它,触发以后当前的区域会跟外界隔绝开来,不会互相干扰。

在常见的应用场景中,主要由这几个条件触发:

1.overflow 值不为 visible 的块元素

2.弹性元素(display为 flex 或 inline-flex元素的直接子元素)

3.网格元素(display为 grid 或 inline-grid 元素的直接子元素)

4.根元素或包含根元素的元素

5.浮动元素(元素的 float 不是 none)

6.绝对定位元素(元素的 position 为 absolute 或 fixed)

7.行内块元素(元素的 display 为 inline-block)

8. (详见MDN文档罗列的条件).....

那么触发了布局会发生什么变化?

1.内部的盒子会在垂直方向,一个个地放置

2. BFC是页面上的一个隔离的独立容器

3.属于同一个BFC的两个相邻Box的上下margin会发生重叠 

4.计算BFC的高度时,浮动元素也参与计算

5.每个元素的左边,与包含的盒子的左边相接触,即使存在浮动也是如此

6.BFC的区域不会与float重叠

个人理解是触发之后,元素盒子的边缘会贴着内容的边缘,也就是跟着内容的大小随动地变化。

同时元素内部的浮动元素会被包裹进来,所以BFC可以用来清除浮动的影响

根据这些规则,可以做出不错的布局效果,那么原理知道了,要将其运用于实战当中也是很重要的,这里我推荐的是腾讯Next学位公众号上写的一篇文章,老师写的很好,挺好理解: 入口

实战篇

以下资料内容引用其他文章

1、两个相邻的普通流中的块元素垂直方向上的 margin会折叠

在同一个BFC当中的,他的子元素会发生margin上下的折叠

那么如何避免margin的重叠?

只要将这两个元素置于不同的BFC区域即可

这里看到.wrap触发了另外一个BFC的区域。

2、BFC可以包含浮动元素

浮动元素在正常情况下是脱离正常文档流的,他会导致父元素高度坍塌的情况出现,为了清除这个影响。 触发BFC是必要的。

使用非overflow:visible即可触发BFC

3、BFC可以阻止元素被浮动元素覆盖

这里的技巧可以用来制作两栏的布局,

而只要触发了BFC的区域就不会被浮动元素所覆盖

尾声:

文章仅为个人学习记录所用,具体例子效果可以自行实践。