BFC、IFC

62 阅读3分钟

FC(Formatting Content)

FC 全称是Formatting Content,格式化上下文,元素在标准文档流中,都属于一个FC

FC 又可以区分为 Block Formatting ContentInline Formatting Content,也就是 BFCIFC

  • block-level boxes 参与**BFC**
    • 块级元素都是在BFC中布局的
  • inline-level boxes 参与**IFC**
    • 行内元素

BFC 的形成

列举一些常见的:更多方法可以查看MDN

  • html 标签
  • float != none
  • postion: absolute
  • postion: fixeds
  • display: inline-block:在我个人理解就是创建了独立的IFC,所以隔离了外部布局
  • overflow != visible

BFC 主要解决了什么问题?

解决了 margin 重合的问题,因为在同一个BFC中两个相邻的块级元素的 martin-topmargin-bottom 才会重合。

BFC 可以解决的原理是什么?

创建一个 BFC 后,会创建一个**独立的布局环境,此BFC内部元素的布局是在BFC中计算布局的,隔绝外部的影响。它具有自己特定布局规则**。

为什么会引起 margin 的重叠?

产生margin重合的原因在于CSS的设计初衷和规范。当两个垂直相邻的块级元素的margin-top或margin-bottom相遇时,它们的值不会简单地相加,而是会合并成一个更大的值。

  1. 正数margin:如果两个相邻的正数margin相遇,它们将合并为一个较大的值。例如,如果一个元素的margin-bottom是20px,而紧随其后的元素的margin-top是30px,那么实际的垂直间距将是30px,而不是50px。

  2. 负数margin:如果两个相邻的负数margin相遇,它们将合并为一个较大的绝对值。例如,如果一个元素的margin-bottom是-20px,而紧随其后的元素的margin-top是-30px,那么实际的垂直间距将是-30px。

  3. 正负混合margin:如果一个正数margin和一个负数margin相遇,它们将相加。例如,如果一个元素的margin-bottom是20px,而紧随其后的元素的margin-top是-30px,那么实际的垂直间距将是-10px。

  4. 根元素与子元素:根元素(如html元素)与它的直接子元素(如body元素)之间也会发生margin重合。

这种设计的初衷是为了简化页面布局,避免在连续的段落或列表项之间产生不必要的额外空间

为什么浮动元素可能会引起高度坍塌

因为在标准文档流中,float 元素会脱离文档流。在CSS默认的布局规则,当一个元素被设置为float(浮动),它会从文档流中移出,不再参与其父元素的常规高度计算。

为什么在浮动元素的父级增加一个除了float 的 BFC 或者 IFC,还会计算浮动元素的高度,父级的高度坍塌就解决了 ?

这里有个前提条件,就是BFC盒子高度必须auto. 那根据W3C 的规定,在文档中有这样介绍

当在元素后代中,具有浮动元素,也会计算其浮动元素的高度,只有参与此块格式化上下文的浮动才会被考虑,例如,位于绝对位置的后代或其他浮动内的浮动不会被考虑。 注意:参考链接 W3C css2 rules 说明 下图是文档的截图。可以翻译一下稍微理解一下。

image.png

在此也是查看了其他人对BFC的理解了解到的相关知识和文档信息描述。

参考链接

W3C css2 rules 说明