面试官: 说说对BFC 的理解

425 阅读2分钟

什么是BFC?

要理解BFC, 我们需要先知道FC. FC(Formatting Context) 即: 格式化上下文. 这是W3C CSS2.1中规范的一个概念. 它是页面中的一块渲染区域, 并且有一套渲染规则. 它决定其子元素如何定位, 以及和其他元素的关系和相互作用.

所以BFC(Block Formatting Context)块级格式化上下文. 在CSS的三大定位(普通流, 浮动, 绝对定位)方案中是属于普通流的. 通俗来理解BFC就是一个与外界隔离的大盒子, 里面的元素不管怎样翻江倒海, 都对外部不会有影响.

常见触发BFC的方法: 只要符合下面任一条件都可触发

  • 根元素. 即 html 标签;
  • 浮动元素. float 的值不为 none 时;
  • 绝对定位元素. position 的值为 absolutefixed 时;
  • overflow 的值不为 visible 时;
  • display 的值为 inline-block, table-cell, flex, inline-flex, grid, inline-grid 等时.

BFC的特性和应用

1. 在同一个BFC内两元素间的外边距会折叠;

避免这种情况发生的思路就是把元素放在一个弹性盒子(触发了BFC)里面, 或者把里面的元素都放在不同的BFC容器中, 可以使用 overflow: hidden 来触发.

2. BFC会计算浮动元素的高度, 即可以包含浮动的元素;

其实我们以前清除浮动时, 用 overflow: hidden 这个样式就是利用的BFC规则.

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

为避免被浮动元素盖住, 触发那个元素的BFC特性即可.

总结: 看了上面的特性和应用, 再理解BFC就是个与外界隔离的大盒子. 其实BFC就是一种特性, 用来隔离外界, 不被其他元素干扰其正常渲染的特性.