BFC的含义及作用

1.BFC是什么

BFC 的全程为块格式化上下文(Block Formatting Context),在 MDN 定义如下:

块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

简单理解为,BFC 是一个完全独立的盒子,内部的元素无论样式是什么,都不会影响到盒子外部的布局。

BFC本质上还是一个block级别的元素盒子的宽度具有填满父容器,并随着父容器的宽度自适应流动特性。但BFC不会独占一行。

2.怎样触发BFC

  • 浮动元素(float不为none
  • 固定定位、绝对定位元素(positionabsolutefixed
  • 行内块元素(display: inline-block
  • 弹性元素(display: flex
  • 网格元素(display: grid
  • overflow: hidden

3.BFC的规则

  • BFC就是一个块级元素,块级元素会在垂直方向一个接一个的排列
  • BFC就是页面中的一个隔离的独立容器,容器里的标签不会影响到外部标签
  • 垂直方向的距离由margin决定, 属于同一个BFC的两个相邻的标签外边距会发生重叠

4.BFC解决了什么问题

1. 外边距塌陷

两个盒子,外边距margin都设置为50px,理应两个盒子的间距应该为100px,但其真实间距为50px

这是因为发生了外边距塌陷问题,两个盒子的margin重叠到了一起,相互影响。

<style>
    .son {
        width: 100px;
        height: 100px;
        background-color: blue;
        margin: 50px;
    }
</style>
<body>
    <div class="son"></div>
    <div class="son"></div>
</body>

可以利用 BFC 特性来解决外边距塌陷问题。将这两个盒子,分别放入两个 BFC 区域中,因为 BFC 是一个完全独立的盒子,内部的元素不会影响到外部区域。

将以上代码修改为如下即可解决,两盒子间距变为100px

<style>
    .father {
        background-color: yellow;
        /* 触发BFC */
        overflow: hidden;
    }
    .son {
        width: 100px;
        height: 100px;
        background-color: blue;
        margin: 50px;
    }
</style>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <div class="father">
        <div class="son"></div>
    </div>
</body>

2. 内边距包含塌陷

父子关系的盒子中,给子盒子加了margin-top,父盒子也会跟着一起下去。

可以利用 BFC 特性来解决包含塌陷问题。将父盒子设置为一个 BFC,这样父盒子内部的样式就不会影响到外部的布局了。

使用overflow: hidden触发 BFC:

3. 清除浮动带来的影响

一个没有设置高度的父盒子,里面一个子盒子设置了浮动,那么父盒子失去了高度,不显示在页面上了。

利用 BFC 特性来解决浮动问题。因为父盒子没有高度了,必然影响了外部元素的布局。那将父盒子触发 BFC,这样父盒子内部的子盒子就不会影响到外部布局了。

4. 阻止浮动元素覆盖标准流与两栏布局

可以看到上面元素,第二个div元素为300px宽度,但是被第一个div元素设置Float脱离文档流给覆盖上去了,解决此方法我们可以把第二个div元素设置为一个BFC

缺点:父元素要清除浮动,若做左盒子高度为500px,右盒子高度为300px,父元素只会给BFC右盒子撑开,而左盒子将会超出父元素,故也要将父元素开启BFC(回应第3点)。

 

 

 

阅读剩余
THE END