深圳市博士通科技有限公司

什么是BFC

2020/11/4 9:50:14   阅读:2229    发布者:2229

在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的。

W3C对BFC的定义如下:


浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文
为了便于理解,我们换一种方式来重新定义BFC。一个HTML元素要创建BFC,则满足下列的任意一个或多个条件即可:

  1. html 根元素
  2. 浮动元素:float 除 none 以外的值
  3. 绝对定位元素:position的值不是static或者relative。 而是position (absolute、fixed)
  4. display 为 inline-block、table-cell、flex、table-caption或者inline-flex
  5. overflow 除了 visible 以外的值 (hidden、auto、scroll)

虽然添加上述的任意一条都能创建BFC,但会有一些副作用:

  • display: table 可能引发响应性问题
  • overflow: scroll 可能产生多余的滚动条
  • float: left 将把元素移至左侧,并被其他元素环绕
  • overflow: hidden 将裁切溢出元素

BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。


BFC布局规则:


  1. 内部的Box会在垂直方向,一个接一个地放置。
  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。BFC的区域不会与float box重叠。
  4. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  5. 计算BFC的高度时,浮动元素也参与计算