什么是BFC?

1、BFC的定义

MDN:

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

读完是一头雾水😅,W3C 规范对此作了详细的描述,翻译过来大概如下:

  • 浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和table-captions),以及 overflow 值不为visiable 的块级盒子,都会为他们的内容创建新的 BFC(块级格式上下文)。
  • 在 BFC 中,盒子从顶端开始垂直的一个接一个排列,两个盒子之间的垂直间距由他们的 margin 值决定,在同一个 BFC 中,两个相邻块级盒子的垂直外边距会产生折叠。
  • 在 BFC 中,每一个盒子的左外边缘会触碰到容器的左边缘,对于从右到左的格式来说,则触碰到右边缘。即使在浮动里也是这样的(尽管一个盒子的line boxes 会因为浮动而收缩),除非这个盒子的内部创建了一个新的 BFC。

2、如何创建BFC

MDN:在这里插入图片描述

3、BFC的布局规则

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

4、BFC的作用

1. 解决margin重叠问题

* {
    margin: 0;
    padding: 0;
}
.box {
	width: 100px;
	height: 100px;
	background-color: hotpink;
	margin: 100px;
}
</style>
<body>
<div class="boxs">
	<div class="box"></div>
	<div class="box"></div>
</div>
</body>

根据BFC的布局规则第2点可知,同一个BFC下的盒子垂直方向的margin会发生重叠,所以会造成两个box之间的margin是100px而不是200px,而根据BFC布局规则第5点就可以解决这个问题,给其中一个box创建BFC布局。

<style>
 1. {
    margin: 0;
    padding: 0;
}
.container {
	overflow: hidden;
}
.box {
	width: 100px;
	height: 100px;
	background-color: hotpink;
	margin: 100px;
}
</style>
<body>
<div class="boxs">
	<div class="container">
		<div class="box"></div>
	</div>
	<div class="box"></div>
</div>
</body>

2. 解决高度塌陷问题

<style>
* {
    margin: 0;
    padding: 0;
}
.container {
	border: 1px solid #333;
	width: 400px;
}
.box {
	width: 100px;
	height: 100px;
	background-color: hotpink;
	float: left;
}
</style>
<body>
	<div class="container">
		<div class="box"></div>
	</div>
</body>

高度塌陷就是父元素高度自适应,子元素 float 后,造成父元素高度为0。利用BFC布局规则的第6点,我们就可以解决这个问题。

<style>
* {
    margin: 0;
    padding: 0;
}
.container {
	border: 1px solid #333;
	width: 400px;
	overflow: hidden;
}
.box {
	width: 100px;
	height: 100px;
	background-color: hotpink;
	float: left;
}
</style>
<body>
	<div class="container">
		<div class="box"></div>
	</div>
</body>

3. 清除浮动

* {
    margin: 0;
    padding: 0;
}
.one {
	width: 200px;
	height: 200px;
	background-color: green;
	float: left;
}
.two {
	height: 200px;
	background-color: pink;
}
</style>
<body>
	<div class="one"></div>
	<div class="two"></div>
</body>

利用BFC布局规则的第6点,我们就可以清除浮动,同时也可以实现自适应两栏布局。

* {
    margin: 0;
    padding: 0;
}
.one {
	width: 200px;
	height: 200px;
	background-color: green;
	float: left;
}
.two {
	height: 200px;
	background-color: pink;
	overflow: hidden;
}
</style>
<body>
	<div class="one"></div>
	<div class="two"></div>
</body>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值