BFC 的简单理解

206 阅读1分钟

BFC是什么

BFC 即 Block Formatting Contexts (块级格式化上下文) 具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。 通俗理解 BFC 就是一个封闭的大箱子,箱子内部的元素无论做什么操作,都不会影响到外部。

触发 BFC 的条件

只要元素满足下面任一条件即可触发 BFC 特性

  • html 根元素
  • float 浮动元素:float 除 none 以外的值
  • 绝对定位元素:position (absolute、fixed)
  • display 为 inline-block、table-cells、flex
  • overflow 除了 visible 以外的值 (hidden、auto、scroll)
  • ......

BFC 特性

  1. 内部box会在垂直方向,一个接一个地放置。
  2. Box垂直方向的距离由(margin)决定,在一个BFC中,两个相邻的块级盒子的垂直外边距会产生重叠。
  3. 在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘)
  4. 形成了BFC的区域不会与float box重叠
  5. 计算BFC高度时,浮动元素也参与计算

简单BFC使用

1、利用 特性4 可实现左图右文之类的效果

<img src='image.png'>
<p>我是超长的文字<p>
img {
    float:left
}
p {
    overflow:hidden
}

2、利用 特性5 可以解决浮动元素造成的父元素高度塌陷问题:

<div class='parent'>
    <div class='float'>浮动元素</div>
</div>
.parent {
    overflow:hidden;
}
.float {
    float:left;
}

更多 BFC 的理解 传送门