BFC详解

BFC详解

简介

在解释BFC之前,先了解一下文档流

文档流分为定位流、浮动流、普通流三种。而普通流其实就是BFC中的FC。

FC(Formatting Context),直译过来就是格式化上下文,它是页面中的一块渲染区域,有一套渲染规则,决定了里面的子元素如何布局,以及和其他元素之间的关系和作用 。

常见的FC有BFC、IFC,还有GFC和FFC。

BFC(Block Formatting Context)块级格式化上下文:用于布局块级盒子的一块渲染区域。


三种文档流的定位方案:

常规流(Normal flow):

  • 在常规流中,盒子一个接着一个排列。在块级格式化上下文里面,盒子竖着排列。在行内格式化上下文里面,盒子横着排列。
  • 在position为static或者relative,并且float为none的时候,会触发常规流。

浮动(Floats):

  • 浮动元素不会影响块级元素的布局,但会影响行内元素的布局,让其围绕在自己周围,撑大父级元素,从而间接影响块级元素布局。
  • 行内元素出现在左浮动元素的右边和右浮动元素的左边,左浮动元素的左边和右浮动元素的右边是不会摆放浮动元素的。

绝对定位(Absolute positioning):

  • 盒子从常规流中移除,不影响常规流的布局。
  • 元素的属性position为 absolute或fixed,它是绝对定位元素。

BFC的触发方式

  • 根元素,即HTML标签,是最大的一个BFC。
  • 给元素设置浮动,触发BFC。
  • overflow不为visible,设置为auto、scroll、hiddden等都可以触发BFC。
  • display的值为inline-block、table-cell、table-caption、table、inline-table、flex、inline-flex、grid、inline-grid。
  • 绝对定位,position的值为absolute或fixed。

注意:display:table可以生成BFC的原因在于,table会默认生成一个匿名的table-cell,是这个匿名的table-cell生成了BFC。


BFC的约束规则

  • 触发BFC的元素的子元素,会在垂直方向上一个接着一个放置。
  • 子元素垂直方向上的距离由margin决定。(解决外边距塌陷问题)
  • BFC中子元素不会超出他的包含块,而绝对定位的元素可以超出他的包含边界。
  • BFC的区域不会与float得到元素区域重叠。(阻止元素被浮动元素覆盖)
  • 计算BFC高度的时候,浮动子元素也会参与计算。(解决父盒子高度塌陷问题)
posted @ 2022-08-17 17:41  笔下洛璃  阅读(184)  评论(0编辑  收藏  举报