CSS块格式上下文

  |   0 评论   |   0 浏览

块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

创建块格式上下文

  • 根元素(<html>)
  • 浮动元素(元素的float 不是none
  • 绝对定位元素(元素的positionabsolutefixed
  • 行内块元素(元素的displayinline-block
  • 表格单元格(元素的displaytable-cell,HTML表格单元格默认为该值
  • 表格标题(元素的displaytable-caption,HTML表格标题默认为该值
  • 匿名表格单元格元素
  • overflow 计算值(Computed)不为visible 的块元素
  • display 值为flow-root 的元素
  • contain 值为layoutcontent 或 paint 的元素
  • 弹性元素(displayflexinline-flex 元素的直接子元素
  • 网格元素(displaygridinline-grid 元素的直接子元素
  • 多列容器(元素的column-countcolumn-width (en-US) 不为auto,包括column-count1`

作用:

  • 浮动定位和清除浮动时只会应用于同一个BFC内的元素。
  • 浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。
  • 外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。

布局规则

  • 内部的Box会在垂直方向,一个接一个地放置。
  • Box垂直方向的距离由margin决定。属于同一个 BFC的两个相邻Box的margin会发生重叠
  • BFC的区域不会与float box重叠。
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此
  • 计算BFC的高度时,浮动元素也参与计算
  • 每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此

作用

1.利用BFC避免margin重叠。属于同一个BFC的两个相邻的Box会发生margin重叠,所以我们可以设置,两个不同的BFC,也就是我们可以让把第二个p用div包起来,然后激活它使其成为一个BFC

2.自适应两栏布局

3.清楚浮动。当我们不给父节点设置高度,子节点设置浮动的时候,会发生高度塌陷,这个时候我们就要清楚浮动。

BFC内部的元素和外部的元素绝对不会互相影响,因此, 当BFC外部存在浮动时,它不应该影响BFC内部Box的布局,BFC会通过变窄,而不与浮动有重叠。同样的,当BFC内部有浮动时,为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度。避免margin重叠也是这样的一个道理。


标题:CSS块格式上下文
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/10/08/1633626086603.html