BFC块格式化上下文

一、BFC概念

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

二、如何创建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 tables, table rows, table bodies, table headers and table footers的默认属性],或 inline-table )
  • overflow 值不为 visible 的块元素,
  • display 值为 flow-root 的元素
  • contain 值为 layout, content, 或 strict 的元素
  • 弹性元素 (display: flex 或 inline-flex元素的子元素)
  • 网格元素 (display: grid 或 inline-grid 元素的子元素)
  • 多列容器 (元素的 column-count 或 column-width 不为 auto 即视为多列,column-count: 1的元素也属于多列)
  • 即便具有 column-span: all 的元素没有被包裹在一个多列容器中,column-span: all 也始终会创建一个新的格式化上下文。

三、BFC特性

块格式化上下文对于定位与清除浮动很重要。定位和清除浮动的样式规则只适用于处于同一块格式化上下文内的元素。浮动不会影响其它块格式化上下文中元素的布局,并且清除浮动只能清除同一块格式化上下文中在它前面的元素的浮动。Margin collapsing也只发生在属于同一块格式化上下文的块级元素之间。

规范css2.1

四、BFC实践

1. 同一BFC下会出现 Margin collapsing
<style>
div {
    width: 100px;
    height: 100px;
    background-color: lightblue;
    margin: 100px;
}
</style>
<body>
<div></div>
<div></div>
</body>

同一BFC发生外边距折叠
这里的BFC元素是bodybody下的两个div元素发生了外边距塌陷。两个div的间距只有100px,并非预期的200px。如果想实现预期,则需要新构造两个BFC。

<style>
p {
    width: 100px;
    height: 100px;
    background-color: lightblue;
    margin: 100px;
}
.bfc {
    overflow: hidden;
}
</style>
<body> <!-- body 也是一个BFC-->
<div class="bfc">
    <p></p>
</div>
<div class="bfc">
    <p></p>
</div>
</body>

不属于同一BFC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值