【BFC】全面总结

一.什么是BFC

BFC(块级格式化环境)是css中的一个隐含属性,它是一个独立的渲染区域,开启BFC该元素会变成独立的布局区域,有利于开发。

二.为什么要开启BFC

具有BFC特性的元素可以看做是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且BFC具有普通容器所没有的的一些特性。通俗一点来讲,可以把BFC理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

三.如何开启BFC

  1. float的值不是none。(不推荐)
  2. position的值不是static或者relative。(不推荐)
  3. display的值是inline-block、table-cell、flex、table-caption或者inline-flex。(不推荐)
  4. overflow的值不是visible。
    常用的方式:为元素设置overflow:hidden,开启BFC。但是这种方法也是有隐患的。

四.开启BFC之后元素的特点

1.开启BFC的元素,不会被浮动元素覆盖
当box1和box2为兄弟元素时,为box1设置float:left;覆盖了box2:
在这里插入图片描述
box1开启了浮动之后,也相当于开启了BFC,我们可以对box2也开启BFC来消除影响
四种方法写在了box2的样式中,开启任意一种,都可以是下面这种效果,当然,也不只有这四种方法

在这里插入图片描述

box1{
				width: 100px;
				height: 100px;
				background-color: blue;
				float:left;
			}
			.box2{
				width: 200px;
				height: 200px;
				background-color: red;
				/* 第一种:开启浮动 */
					 float: left; 
				/* 第二种:开启定位 */
					/* position: absolute;
					left:100px; */
				/* 第三种:开启felx布局 */
					/* display:flex; */
				/* 第四种:溢出隐藏 */
					/* overflow: hidden; */
			}
	

2.开启BFC的元素,子元素和父元素的外边距不会重叠
当box1为box2的子元素时,我们为子元素box1设置100px的margin-top,效果却相当于box2设置了100px的margin-top,如下图:
在这里插入图片描述
这时,为box2开启BFC可以消除垂直外边距重叠问题:
在这里插入图片描述

	.box1{
				width: 100px;
				height: 100px;
				background-color: blue;
				margin-top: 100px;
			}
			.box2{
				width: 200px;
				height: 200px;
				background-color: red;
				/* 第一种:开启浮动 */
					 float: left; 
				/* 第二种:开启定位 */
					/* position: absolute; */
				/* 第三种:开启felx布局 */
					/* display:flex; */
				/* 第四种:溢出隐藏 */
					/* overflow: hidden; */
			}

3.开启BFC的元素可以包含浮动的子元素
还是,box1为box2的子元素时,不为box2设置高度,让其高度被子元素box1撑开,这时,我们让box1浮动:在这里插入图片描述
可以看到,box2消失了,这就是我们常说的高度塌陷,还是给box2开启BFC:在这里插入图片描述

	.box1{
				width: 100px;
				height: 100px;
				background-color: blue;
				float: left;
			}
			.box2{
				width: 200px;
				/* height: 200px; */
				background-color: red;
				/* 第一种:开启浮动 */
					float: left;
				/* 第二种:开启定位 */
					/* position: absolute; */
				/* 第三种:开启felx布局 */
					/* display:flex; */
				/* 第四种:溢出隐藏 */
					/* overflow: hidden; */
			}

五.总结
因为BFC内部的元素和外部的元素绝对不会互相影响,因此, 当BFC外部存在浮动时,它不应该影响BFC内部Box的布局,BFC会通过变窄,而不与浮动有重叠。同样的,当BFC内部有浮动时,为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度。避免margin重叠也是这样的一个道理。
具体开发中是不会采用这些方法的,以上的这些方法只是有助于小白理解BFC的原理。
想要达到完美消除父元素高度塌陷和解决垂直外边距重叠问题,这里给个现成的:

.clearfix::before,
			.clearfix::after{
				content:"";
				display:table;
				clear:both;
			}

给元素添加clearfix类名即可。具体讲解见《 CSS权威指南 》,这本书的作者发明的这个方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值