FC(Formatting Content)
FC 全称是Formatting Content,格式化上下文,元素在标准文档流中,都属于一个FC
FC 又可以区分为 Block Formatting Content 和 Inline Formatting Content,也就是 BFC 和 IFC
block-level boxes参与**BFC**- 块级元素都是在BFC中布局的
inline-level boxes参与**IFC**- 行内元素
BFC 的形成
列举一些常见的:更多方法可以查看MDN
html 标签float != nonepostion: absolutepostion: fixedsdisplay: inline-block:在我个人理解就是创建了独立的IFC,所以隔离了外部布局overflow != visible
BFC 主要解决了什么问题?
解决了 margin 重合的问题,因为在同一个BFC中两个相邻的块级元素的 martin-top和margin-bottom 才会重合。
BFC 可以解决的原理是什么?
创建一个 BFC 后,会创建一个**独立的布局环境,此BFC内部元素的布局是在BFC中计算布局的,隔绝外部的影响。它具有自己特定布局规则**。
为什么会引起 margin 的重叠?
产生margin重合的原因在于CSS的设计初衷和规范。当两个垂直相邻的块级元素的margin-top或margin-bottom相遇时,它们的值不会简单地相加,而是会合并成一个更大的值。
-
正数margin:如果两个相邻的正数margin相遇,它们将合并为一个较大的值。例如,如果一个元素的margin-bottom是20px,而紧随其后的元素的margin-top是30px,那么实际的垂直间距将是30px,而不是50px。
-
负数margin:如果两个相邻的负数margin相遇,它们将合并为一个较大的绝对值。例如,如果一个元素的margin-bottom是-20px,而紧随其后的元素的margin-top是-30px,那么实际的垂直间距将是-30px。
-
正负混合margin:如果一个正数margin和一个负数margin相遇,它们将相加。例如,如果一个元素的margin-bottom是20px,而紧随其后的元素的margin-top是-30px,那么实际的垂直间距将是-10px。
-
根元素与子元素:根元素(如html元素)与它的直接子元素(如body元素)之间也会发生margin重合。
这种设计的初衷是为了简化页面布局,避免在连续的段落或列表项之间产生不必要的额外空间
为什么浮动元素可能会引起高度坍塌
因为在标准文档流中,float 元素会脱离文档流。在CSS默认的布局规则,当一个元素被设置为float(浮动),它会从文档流中移出,不再参与其父元素的常规高度计算。
为什么在浮动元素的父级增加一个除了float 的 BFC 或者 IFC,还会计算浮动元素的高度,父级的高度坍塌就解决了 ?
这里有个前提条件,就是BFC盒子高度必须auto. 那根据W3C 的规定,在文档中有这样介绍
当在元素后代中,具有浮动元素,也会计算其浮动元素的高度,只有参与此块格式化上下文的浮动才会被考虑,例如,位于绝对位置的后代或其他浮动内的浮动不会被考虑。 注意:参考链接 W3C css2 rules 说明 下图是文档的截图。可以翻译一下稍微理解一下。
在此也是查看了其他人对BFC的理解了解到的相关知识和文档信息描述。
参考链接