Skip to content

【CSS】BFC #28

@Dliling

Description

@Dliling

什么是BFC
全称Block Formatting Context,直译为块格式化上下文。是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
通俗来讲,就是BFC是一个大盒子,隔离了盒子内部元素变动对盒子外部的影响。

下列方式会创建BFC:

  • 根元素()
  • 浮动元素(元素的 float 不是 none)
  • 绝对定位元素(元素的 position 为 absolute 或 fixed)
  • 行内块元素(元素的 display 为 inline-block)
  • 表格单元格(元素的 display为 table-cell,HTML表格单元格默认为该值)
  • 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
  • 匿名表格单元格元素(元素的 display为 table、table-row、 table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或 inline-table)
  • overflow 值不为 visible 的块元素
  • display 值为 flow-root 的元素
  • contain 值为 layout、content或 paint 的元素
  • 弹性元素(display为 flex 或 inline-flex元素的直接子元素)
  • 网格元素(display为 grid 或 inline-grid 元素的直接子元素)
  • 多列容器(元素的 column-count 或 column-width 不为 auto,包括 column-count 为 1)
  • column-span 为 all 的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中(标准变更,Chrome bug)。

BFC能解决什么问题

1.利用BFC避免相邻元素margin重叠
属于同一个BFC的两个相邻块级子元素的上下margin会发生重叠。
所以当两个子元素属于不同的BFC时就可避免重叠。可以给一个子元素包裹一个div,激活它使它成为一个新的BFC。

2.高度塌陷问题
当我们不给父元素设置高度,子元素浮动时,会发生高度塌陷。这时我们就需要清除浮动。
若不考虑元素内容溢出的情况,可以给父元素添加属性:overflow:hidden

我经常用BFC解决的就是以上两个问题,肯定还有其他问题,我没用过的这里就不再描述了~ 欢迎大家补充~

感觉介绍BFC不错的文章:
CSS中重要的BFC

参考:
块格式化上下文
什么是BFC?看这一篇就够了

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions