BFC块级格式化上下文 —— (Block Formatting Context)

BFC

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

fromatting context

fromatting context包括块格式化上下文 block formatting contexts、内联格式化上下文 inline formatting contexts和灵活格式化上下文 flex formatting contexts。

页面上的所有内容都是格式化上下文 formatting context 的一部分,或者是一个以特定方式显示的区域。块格式上下文(BFC)将根据块布局规则布局子元素,灵活格式上下文 flex formatting context 将其子元素布局为灵活项flex items等。每个格式上下文在其上下文中都有特定的布局规则。

普通文档流的布局规则

  1. 父元素不会计算浮动子元素的高度
  2. 非浮动元素会与浮动元素重叠
  3. 相邻元素margin会重叠

BFC的布局规则

  1. 内部的box会在垂直方向从顶部开始一个接一个排列
  2. 内部的box垂直方向的距离由margin决定,同在一个BFC内的两个相邻box的margin会发生重叠
  3. BFC内每个元素的margin box的左边与包含块border box左边接触(对于默认的text-align:left)
  4. BFC的区域不会与浮动的元素重叠
  5. 计算BFC的高度时,浮动元素也参与计算

创建BFC的方式:

  1. 根元素(<html>)
  2. 浮动元素 (float不为none)
  3. 绝对定位元素( positionabsolute或者fixed
  4. 行内块元素(displayinline-block
  5. displayflow-root的元素
  6. overflow不为visible的块元素
  7. 表格系列(displaytable-cell\table-caption\table\table-*
  8. 弹性元素(displayflex的元素的子元素)
  9. 网格元素(displaygrid的元素的子元素)
  10. contain值为layout\content\paint的元素
  11. column-span设置为all的元素

作用

  1. 解决外边距(margin)塌陷
  2. 解决父元素高度塌陷
  3. 浮动元素定位: 两栏布局自适应

例子

1.利用dispaly: flow-root解决margin塌陷

dispaly: flow-root属性会将当前元素转为块格式化上下文根元素,
不会有任何的副作用,IE不支持
在这里插入图片描述

<!-- 解决margin塌陷 -->
<style>
	.margin {
	    margin: 20px;
	}
	.flow {
	    background-color: #666;
	}
</style>


<div class="margin">margin:20px</div>
<div class="flow"><p class="margin">margin:20px</p></div>

在这里插入图片描述

<!-- 解决margin塌陷 -->
<style>
	.margin {
	    margin: 20px;
	}
	.flow {
		display: flow-root;
	    background-color: #666;
	}
</style>


<div class="margin">margin:20px</div>
<div class="flow"><p class="margin">margin:20px</p></div>

2.利用overflow: hidden清除浮动解决高度塌陷

<style>
	.parent{
		border: 1px solid #000
	}
	.float{
		width: 50px;
		height: 50px;
		float: left;
		background: yellow;
	}
</style>

<div class="parent">
	<div class="float"></div>
</div>

在这里插入图片描述

<style>
	.parent{
		border: 1px solid #000;
		overflow: hidden;
	}
	.float{
		width: 50px;
		height: 50px;
		float: left;
		background: yellow;
	}
</style>

<div class="parent">
	<div class="float"></div>
</div>

在这里插入图片描述

2.利用overflow: hidden实现自适应两栏布局

<style>
.left{
	width: 100px;
	height: 200px;
	background:pink;
	float:left;
}
.right{
	height: 300px;
	background:skyblue;
}	
</style>

<div>
	<div class="left"></div>
	<div class="right"></div>
</div>

在这里插入图片描述

<style>
.left{
	width: 100px;
	height: 200px;
	background:pink;
	float:left;
}
.right{
	height: 300px;
	background:skyblue;
	overflow: hidden;
}	
</style>

<div>
	<div class="left"></div>
	<div class="right"></div>
</div>

在这里插入图片描述

总结

总而言之,BFC其实就是一个封闭的容器,里面的元素的任何行为都不会捅破这个盒子,它是一个独立的块,不影响外部的布局,所以他的规则会计算内部浮动元素的高度;会计算自身的宽度从而不与BFC外部浮动元素重叠

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值