BFC

BFC(block formatting context)
直译为“块级元素上下文”
BFC它是一个独立的渲染区域,只有block-level box 参与,它规定了内部block-level box如何布局,并且与这个区域外部毫不相干。(封闭的区域)

以下属性可以触发BFC
float属性不为none
position为absolute或fixed
display为inline-block,table-cell,table-caption,flex,inline-flex
overflow不为visible(overflow:hidden;经常用)

BFC元素所具有的属性

BFC布局规则特性
1.在BFC中,盒子从顶端开始垂直的一个接一个排列
2.盒子垂直方向的距离由margin决定,属于同一个BFC的两个相邻的盒子margin会发生重叠(不同则不会发生重叠)(解决外边距合并)
3.在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘)(碰边缘 不是压边缘)
4.BFC的区域不会与盒子产生交集,而是紧贴浮动边缘
5.计算BFC的高度时,自然也会检测浮动的盒子高度
它是一个独立的渲染区域,只有block-level box参与,它规定了内部的block-level box如何布局,并且与这个区域外部毫不相干

BFC:页面上的一个隔离的独立容器;容器里面的子元素不会影响到外面的元素,反之也是如此。包括浮动、和外边距合并等等,因此,有了这个特性,我们布局的时候就不会出现意外情况。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				margin: 0;
				padding: 0;
			}
			.father{
				width: 300px;
				height: 500px;
				border: 1px solid red;
				/* overflow: hidden; 创建BFC*/
				float: left;    /* 给father创建BFC */
				/* position: absolute;   创建BFC */
				/* BFC算是清除浮动 */
			}
			.son1,.son2 {
				width: 100px;
				height: 100px;
				background-color: pink;
			}
			.over {
				overflow: hidden;   /* 防止合并 */
			}
			.son1 {
				margin-bottom:50px;
			}
			.son2 {
				background-color: purple;
				margin-top: 100px;
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="over">   <!-- over隔开那么son1就和son2就不是同一个BFC -->
			<div class="son1"></div>
			</div>
			<div class="son2"></div>
		</div>
	</body>
</html>

不产生交集


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.father {
				width: 400px;
				height: 500px;
				border: 1px solid #000;
				margin: 0 auto;
			}
			.box {
				width: 100px;
				height: 100px;
				background-color: skyblue;
				float: left;
				margin-top: 50px;
			}
			.txt {
				height: 300px;
				background-color: purple;
				overflow: hidden;   /* 给txt创建BFC区域不在和浮动产生交集 紧贴至浮动边缘*/
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="box"></div>
			<div class="txt">
				11111111222222222
				11111111222222222
				1111111122222222211111111222222222
				11111111222222222
			</div>
		</div>
	</body>
</html>

### CSS BFC 的定义 BFC(Block Formatting Context,块级格式化上下文)是CSS中一种重要的布局机制。它是一种独立的渲染区域,在这个区域内,所有的子元素都会遵循特定的布局规则,并且这些子元素不会受到外部元素的影响[^1]。 --- ### BFC 的作用 #### 1. 防止布局干扰 BFC 形成一个完全独立的空间,使得其内部的子元素不会影响到外部的其他元素布局。这种特性对于复杂的页面结构尤为重要[^3]。 #### 2. 清除浮动引发的高度坍塌问题 当父元素包含浮动子元素时,默认情况下父元素可能会因为无法感知子元素的高度而发生高度坍塌现象。通过触发 BFC,可以让父元素重新计算并包裹住浮动子元素,从而避免这一问题[^3]。 #### 3. 解决边距重叠问题 在标准流中,相邻的两个块级元素之间的垂直外边距会发生重叠。如果其中一个元素进入了 BFC,则它们之间不会再有边距重叠的现象[^1]。 --- ### 如何触发 BFC? 以下是几种常见的触发 BFC 的方法: - 设置 `float` 属性值为非 `none` 值(如 `left` 或 `right`)。 - 将 `position` 属性设置为 `absolute` 或 `fixed`。 - 把 `overflow` 属性设为除了 `visible` 外的任何值(如 `hidden`, `auto`, 或 `scroll`)。 - 使用某些特殊的 `display` 值,比如 `inline-block`, `flex`, `grid`, `table-cell`, `list-item`, 或者现代浏览器支持的 `flow-root` 等[^2][^3]。 --- ### BFC 的典型应用场景 #### 场景一:清除浮动带来的父元素高度丢失 ```html <div class="parent"> <div class="child">Child</div> </div> <style> .parent { overflow: hidden; /* 触发 BFC */ } .child { float: left; } </style> ``` 在这个例子中,`.parent` 虽然包含了 `.child` 浮动元素,但由于设置了 `overflow:hidden` 来触 发 BFC,因此能够正常显示自身的高度。 #### 场景二:防止兄弟元素间的 margin 合并 ```css .block1 { height: 50px; background-color: lightblue; margin-bottom: 20px; } .block2 { height: 50px; background-color: salmon; margin-top: 20px; overflow: auto; /* 触发 BFC */ } ``` 这里由于第二个区块启用了 BFC,所以两者的顶部间距会保持实际相加后的距离而不是简单合并[^1]。 --- ### 总结 掌握 BFC 不仅能帮助开发者更好地理解和调试复杂网页布局行为,还能有效应对诸如清除浮动、调整内外边界等问题。合理利用 BFC 可显著提升前端开发效率与代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值