面试官:我让你翻译翻译,什么叫BFC!

前言

BFC (Blcok formatting context) 意思是块级格式化上下文。他是一个独立的渲染区域。BFC会影响 当前元素和内部元素的布局,但不会影响跟外部元素之间的关系。

如何创建BFC容器

  1. overflow属性:将一个元素属性设置为非visible就会创建一个BFC容器
  2. display属性:inline-block,table-cell,table-caption和flex属性,就会是一个BFC容器
  3. position属性:设置为absolute或fixed
  4. float属性:设置为left或right

以上就是主要的几个创建BFC容器的方法。

BFC可以解决哪些问题?

1. 垂直方向上margin的合并

当父容器内包裹一个子容器,分别给父容器和子容器设置一个margin-top。

js 复制代码
<style>
    .box {
        width: 200px;
        height: 200px;
        background-color: red;
        margin-top: 100px;
    }

    .box-son {
        width: 100px;
        height: 100px;
        background-color: blue;
        margin-top: 30px;
    }
</style>

你就会发现子容器的margin-top并没有效果,子容器依旧是贴着父容器的,甚至于我们不断的修改这个margin-top的值,只要不超过父容器的100px都是没有效果的。而且当我们设置子容器的margin-top大于父容器的时候,这个margin-top却依旧像是作用在父容器身上。这个就是margin的塌陷和合并。

  1. margin塌陷:当子元素的垂直方向上的margin大于父元素的margin时(包括父元素不设置margin的情况),子元素的margin会设置到父元素身上
  2. margin合并:父元素垂直方向上的margin大于子元素的,就会导致子元素的垂直方向上margin不生效。

解决方案:我们只需要将父元素设置为一个BFC容器即可。(给父元素设置overflow:hidden或别的方法)

2. 高度塌陷问题

当父元素不设置高度而子元素浮动时,父元素就会发生高度塌陷,父元素的高度变为0

我们能看到父元素的高度为0,但是我们能看到子元素。 解决方案:我们只需要将父元素设置为一个BFC容器即可。

3.避免和浮动元素重叠

两个同级的div,这里蓝色盒子设置浮动后把粉色盒子盖住了,如果我们不想让粉色盒子被蓝色盒子盖住的话。

解决方案:我们只需要将粉色盒子设置为一个BFC容器即可。

尾声

BFC我们只需要记住它最大的一个特点,他是一个独立的渲染区域,它规定死了它内部块级元素一个盒子一个盒子不重叠地垂直排列,且外部元素无法影响他。

相关推荐
鬼手点金2 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
软件技术NINI2 小时前
美妆商城html+Css+js 4页
javascript·css·html
蛋蛋的就会顺顺的2 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday2 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
朱涛的自习室2 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
小 黄 鸡3 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
码艺-Alimjan3 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床3 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
子非鱼a4 小时前
【文件上传】一个普普通通的edu16
前端
美狐美颜SDK开放平台5 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk