BFC 即 区块格式化上下文,可以理解为一种特殊环境,决定块级盒的布局及浮动影响范围的区域,并附带多项特性,在理解 BFC 之前需要先对:
进行简单了解
组成:内容、内边距、边框、外边距

内容区域大小,可以通过 width , min-width , max-width , height , min-height , max-height 控制,即 css 设置的元素宽高只针对内容区域,不含 margin , border
css 属性值 display 为 block , list-item, table 的元素
css 属性值 display 为 inline , inline-block, inline-table 的元素
块级盒特征:

行内盒特征:
<img> <iframe> <video> <embed> 等)生成的盒都是行内盒,会参与 IFC (行内格式化上下文)的创建
匿名盒指不能被 cs 选择器选中的盒子,如:
<div>
匿名盒1
<p>块盒</p>
匿名盒2
</div>

上述代码片段,div 和 p 标签都会生成 2 个块级盒,p 标签前后会生成 2 个匿名盒
匿名盒特征:
普通流是浏览器默认的 HTML 布局方式,体现在元素检查中就是 ,当 position 为 static 或 relative,且 float 为 none 时,就会触发普通流
普通流特征:

多个浮动元素,前一个浮动元素位置改变,也会影响后一个浮动元素,如:
浮动元素

浮动元素位置改变

环绕效果

添加 clear 清除浮动

position 为 static , 即默认的定位方式,此时元素处于普通流中
position 为 relative, 可以通过 top , right , bottom , left 进行偏移量调整(相对于自身的偏移量)
盒会从普通流中移除, 不影响其他普通流布局
绝对定位特点:
与绝对定位类似,唯一区别在于其包含块是浏览器视窗
BFC 决定块级盒的布局及浮动影响范围的区域
以下元素会创建 BFC
<html>)注:以上是 CSS2.1 规范定义的 BFC 触发方式,在最新的 CSS3 规范中,弹性元素和网格元素会创建 F(Flex)FC 和 G(Grid)FC。
A block formatting context contains everything inside of the element creating it, that is not also inside a descendant element that creates a new block formatting context.
BFC 包含创建它的元素的所有子元素,但是不包括创建了新的 BFC 的子元素的内部元素,体现了 BFC 的隔离思想
即 子元素如果又创建了一个新的 BFC , 那么新的 BFC 里面的内容就不属于上一个 BFC 了,如:
<table>
<tr>
<td></td>
</tr>
</table>
若 table 元素创建的 BFC 我们记为 BFC_table,tr 元素创建的 BFC 我们记为 BFC_tr, td 元素创建的 BFC 我们记为 BFC_td ,则 2 个 BFC 的范围:
即 一个元素不能同时存在于两个 BFC 中
BFC 除了创建隔离空间,还具有以下特性:示例参见每个特性尾部链接
外边距盒 ( margin box )的左边 与 包含块 的 块边框盒 ( border box)的左边相对齐 (从左到右格式化的情况),从右到左格式化的情况则相反,即使存在浮动也是如此 demo3左右栏宽度固定后浮动,中间栏创建 BFC , 由于 盒子的 外边距盒 ( margin box )的左边 与 包含块 的 块边框盒 ( border box)的左边相对齐 ,同时浮动盒区域不会和 BFC 重叠 ,所以中间栏自适应 demo1
创建新的 BFC ,让相邻的块级盒位于不同的 BFC 下,就可以防止外边距折叠 demo2
BFC 内部的浮动元素也会参与高度计算,可以清除 BFC 内部的浮动 demo3
更多【tensorflow-对 BFC 的理解】相关视频教程:www.yxfzedu.com