深入理解BFC

一.什么是FC


🎪FC:FC的全称是Formatiing Context ,元素在标准流里面都是属于一个FC的,我们可以看下官网文档。

那么从官方文档中我们可以看到BFC其实就是块FC,如果是行内就是IFC,其实BFC就可以理解为块级元素的布局,也就是布局的上下文,也就是环境块级元素布局的环境。

那么BFC在哪?拿出来给我看看,MDN整理出的会形成BFC的情况

二.BFC有什么作用哪?


🥴我们先看下官方文档对BFC的描述

  1. 在BFC中,box会在垂直方向上一个挨着一个的排布;
  2. 垂直方向的间距由margin属性决定;
  3. 在同一个BFC中,相邻两个box之间的margin会折叠(collapse);
  4. 在BFC中,每个元素的左边缘是紧挨着包含块的左边缘的;

😭BFC的具体作用常见的有两种:解决margain折叠问题,解决浮动高度塌陷问题。


其实我们日常开发中习以为常的现象背后的操作者就是BFC,可以理解为它是一套布局的规则,比如从左到右排布,为什么margain会折叠,其实这些背后都是BFC在起作用。


三.BFC的作用一:解决折叠问题


😊通过上面的内容我们会了解到,在同一个BFC中两个box之间的margain会折叠。

css 复制代码
.box1 {
  height: 30px;
  background-color: aquamarine;
  margin-bottom: 30px;
}

.box2 {
  height: 50px;
  background-color: blueviolet;
  margin-top: 30px;
}

那么我们解决margain塌陷问题的方法就是让两个元素处于不同的BFC就可任意折叠不同的BFC

css 复制代码
.container{
  overflown:auto;
}
.box1 {
  height: 30px;
  background-color: aquamarine;
  margin-bottom: 30px;
}

.box2 {
  height: 50px;
  background-color: blueviolet;
  margin-top: 30px;
}

😶‍🌫️解决这个问题的方案就是在第一个盒子外部增加一个盒子让这个盒子在一个新的BFC中。

四.BFC解决浮动高度问题


🎯网上有很多说法,BFC可以解决浮动高度塌陷,可以实现清除浮动的效果,但是从来没有给出过BFC可以解决高度塌陷的原理或者权威的文档说明,他们也压根没有办法解释,为什么可以解决浮动高度的塌陷问题,但是不能解决绝对定位元素的高度塌陷问题呢?

👽事实上,BFC解决高度塌陷需要满足两个条件:

  1. 浮动元素的父元素触发BFC,形成独立的块级格式化上下文(Block Formatting Context);
  2. 浮动元素的父元素的高度是auto的;

🎪BFC的高度是auto的情况下,是如下方法计算高度的。

  1. 如果只有inline-level,是行高的顶部和底部的距离;
  2. 如果有block-level,是由最底层的块上边缘和最底层块盒子的下边缘之间的距离
  3. 如果有绝对定位元素,将被忽略;
  4. 如果有浮动元素,那么会增加高度以包括这些浮动元素的下边缘。
css 复制代码
.container {
  width: 100%;
  height: 100%;
  background-color: antiquewhite;
}

.item {
  width: 60px;
  height: 30px;
  background-color: aquamarine;
  margin-bottom: 30px;
  float: left;
  border: 1px solid #000;
}
html 复制代码
<div class="container">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

使用BFC来解决高度塌陷问题:

css 复制代码
.container {
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: antiquewhite;
}

相关推荐
IT_陈寒1 分钟前
Vue的响应式更新把我坑惨了,原来问题出在这里
前端·人工智能·后端
Cobyte4 分钟前
6.响应式系统比对:通过 Vue3 响应式库写 React 应用
前端·javascript·vue.js
Alice-YUE9 分钟前
【前端面试之ai概念】大白话讲清 Agent、MCP、Skill、Function Calling、RAG
前端·人工智能·学习·aegnt
苏武难飞23 分钟前
THREE.JS实现一个魔法镜子!
前端·css·three.js
小流苏生34 分钟前
工作十年了,慢慢学习敬畏死亡
前端·程序员·ai编程
xiaoxue..36 分钟前
react:浅聊 vdom 与 diff 算法
前端·javascript·react.js·面试
恋猫de小郭37 分钟前
Flutter 3.41.7 ,小版本但 iOS 大修复,看完只想说:这是人能写出来的 bug ?
android·前端·flutter
止语Lab41 分钟前
记忆溢出:当你的 Agent 记得太多时会发生什么
前端·javascript·vue.js
天天向上102442 分钟前
vue openlayers地图加载大量点位时优化
前端·javascript·vue.js
菩提小狗1 小时前
第42天:WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写_笔记|小迪安全2023-2024|web安全|渗透测试|
前端·安全·php