前端面试题 - 41. BFC是什么? 哪些属性可以构成一个BFC呢?

471 阅读2分钟

BFC

块级格式化上下文(Block Formatting Context)的缩写,是一种 Web 页面中的 CSS 渲染模式,它是一个独立的渲染区域,具有自己的渲染规则和独立的布局机制,不受外部影响。

一个元素要想成为 BFC,需要满足以下条件之一:

  • 根元素(HTML)。
  • float 属性不为 none。元素会脱离文档流,形成一个新的块级上下文。
  • position 属性为 absolute 或 fixed。可以脱离文档流,不再与其他元素共同占据同一个布局空间,从而形成一个新的块级上下文
  • display 属性为 inline-block、table-cell、table-caption、flex、inline-flex 中的任意一个。元素也会形成一个新的块级上下文,这是因为这些属性可以让元素具有类似于块级元素的特性,比如可以设置宽度、高度、内边距和外边距等,并且可以在文本流中独立进行布局。
  • overflow 属性不为 visible。 overflow 属性可以控制元素内容溢出时的处理方式,如果设置为除了 visible 以外的其他值,就可以让元素形成一个新的块级上下文。
  • contain 属性为layoutcontentstrict`。
  • column-countcolumn-width 属性不为 auto
  • writing-mode 属性为 tb-rl(从上到下、从右到左排列)。
  • display: flow-root,这是一个比较新的属性,可以用来快速创建 BFC。

BFC 的主要作用是解决元素间的布局问题,它可以避免一些常见的布局问题,如浮动元素引起的父元素高度塌陷、外边距重叠等。

特点:

  • 内部的 Box 会在垂直方向一个接一个地放置。
  • Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠。

image.png

  • 每个元素的 margin box 的左边,与包含块 border box 的左边相接触(对于从左往右的格式化,否则相反),即使存在浮动也是如此。
  • BFC 的区域不会与 float box 重叠。BFC 可以阻止元素被浮动元素覆盖 image.png
  • BFC 在页面上是一个独立的容器,容器里的子元素不会影响到外面的元素,反过来也是一样的。所以会有父元素坍塌的问题,通过清除浮动可以解决。 image.png
  • 计算 BFC 的高度时,浮动元素也参与计算。

总之,BFC 是一种独立的渲染机制,可以避免一些布局问题,并提供更好的可控性,让开发者可以更加灵活地进行布局设计。

参考:zhuanlan.zhihu.com/p/25321647