啥是BFC

看不明白的定义:

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

官方文档到中是这么介绍的

一个BFC区域包含创建该上下文元素的所有子元素,但是不包括创建了新的BFC的子元素的内部元素,BFC是一块块独立的渲染区域,可以将BFC看成是元素的一种属性,拥有了这种属性的元素就会使他的子元素与世隔绝,不会影响到外部其他元素。

代码理解

还不是很清楚什么意思?上代码!

1
2
3
4
5
6
7
8
9
10
11
12
<body>
<div class="father" id="father">
<div class="1"></div>
<div class="1"></div>
<div class="1"></div>
<div class="1" id="son">
<div class="2"></div>
<div class="2"></div>
<div class="2"></div>
</div>
</div>
</body>

假设father和son盒子都是BFC区域
id=”father”这个BFC区域包含了所有 class=”1”的盒子但不包含class=”2”的盒子
id=”son”的这个BFC区域则包含了所以class=”2”的盒子。
那么总结下来可以得到如下结论:
1.每一个BFC区域只包括它的子元素,并不包括子元素的子元素。
2.每个BFC区域都是独立隔绝开来的,互相不会受到影响。

怎么创建BFC?

  1. 根元素
  2. float属性不为none
  3. overflow不为visible
  4. position为absolute或fixed
  5. display为inline-block, table-cell, table-caption, flex, inline-flex

BFC的作用

既然知道了BFC是咋回事,也知道了怎么创建BFC,那么它的作用是什么呢?

清除浮动

浮动会导致父元素高度塌陷,相信刚开始学html的同学们都记得overflow: hidden可以清除浮动,但是听说BFC之前却不清楚原理,经过上边的解释后就知道了是因为在BFC区域内子元素是不会影响到外部元素的。

解决外边距塌陷

前端布局离不开margin,那么肯定会遇到外边距塌陷的问题

外边距塌陷

如图,我们给两个盒子分别设置了100px的外边距,两个盒子之间的外边距应该有200px,但是现在只有100px,那么根据刚开始我们的理解,只要给这两个盒子都加一个父盒子并设置为BFC区域就应该能解决这个问题,马上动手验证

解决外边距塌陷

可以看到果然是正确的解决了外边距塌陷的问题。

解决包含塌陷

包含塌陷

从上图可以看出我本来是给子盒子margin-top让他离父盒子顶部30px,但是却导致子盒子带着父盒子整体往下跑了30px,我们想要的效果却没有出来,要实现我们想要的效果有两个办法,一就是用padding,二就是把父盒子变成BFC区域,我们当然是选择第二种

解决包含塌陷
完美解决!

使用场景

解决塌陷问题,清除浮动,右边固定左边自适应。

暂时完结,后续再补充