BFC的理解

BFC的理解

BFC是什么?

BFC是块级格式上下文(Block Formatting Context),是CSS布局的一个概念,在BFC布局里面的元素不受外面元素影响。

BFC如何触发?

  • 设置浮动:float有值并不为空 float:left | right;

  • overflow:hidden | scroll | auto; (不是visible)

  • display:inline-block | table-cell | table-caption | flex | grid;( 非none 非inline 非block)

  • 设置绝对定位: position: absolute | fiexed;( 非relative)

BFC的作用

  • 解决margin重叠问题:由于BFC是一个独立的区域,内部元素和外部元素互不影响,将两个元素变为BFC,就解决了margin重叠问题
  • 创建自适应两栏布局:可以用来创建自适应两栏布局,左边宽高固定,右边宽度自适应。
  • 解决高度塌陷问题:在子元素设置浮动后,父元素会发生高度的塌陷,也就是父元素的高度为0解决这个问题,只需要将父元素变成一个BFC。

问题解决

Margin重叠问题

html 复制代码
<div class="div1"></div>
<div class="div1"></div>
css 复制代码
.div1 {
  margin-bottom: 20px;
  width: 100px;
  height: 100px;
  background-color: red;
}
.div2 {
  margin-top: 20px;
  width: 100px;
  height: 100px;
  background-color: blue;
}

会导致上下两个div的margin重合:

html 复制代码
<style>
  .container {
    overflow: hidden;//将它变成BFC
  }
  .div1 {
    margin-bottom: 20px;
    width: 100px;
    height: 100px;
    background-color: red;
  }
  .div2 {
    margin-top: 20px;
    width: 100px;
    height: 100px;
    background-color: blue;
  }
</style>
<body>
  <div class="container">
    <div class="div1"></div>
  </div>
  <div class="container">
    <div class="div2"></div>
  </div>
</body>

Margin塌陷问题

html 复制代码
<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: pink;
  }
  .box1 {
    width: 40px;
    height: 40px;
    margin-top: 50px;
    background-color: lightgreen;
  }
</style>

<body>
  <div class="box">
    <div class="box1"></div>
  </div>
</body>

父元素margin-top:50px,子元素没有margin-top,造成margin塌陷

给父元素变成BFC即可;

html 复制代码
<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: pink;
    overflow: hidden;
  }
  .box1 {
    width: 40px;
    height: 40px;
    margin-top: 50px;
    background-color: lightgreen;
  }
</style>

<body>
  <div class="box">
    <div class="box1"></div>
  </div>
</body>

高度塌陷

html 复制代码
<style>
  .father {
    width: 200px;
    background-color: lightseagreen;
  }
  .child1 {
    width: 200px;
    height: 200px;
    float: left;
    background-color: red;
  }
  .child2 {
    width: 200px;
    height: 200px;
    float: left;
    background-color: pink;
  }
</style>
<div class="father">
  <div class="child1"></div>
  <div class="child2"></div>
</div>

会发现父元素的高度为0,造成了高度塌陷;

html 复制代码
<style>
  .father {
    width: 200px;
    height: 500px;
    background-color: lightseagreen;
    overflow: hidden;
  }
  .child1 {
    width: 200px;
    height: 200px;
    float: left;
    background-color: red;
  }
  .child2 {
    width: 200px;
    height: 200px;
    float: left;
    background-color: pink;
  }
</style>
<div class="father">
  <div class="child1"></div>
  <div class="child2"></div>
</div>
相关推荐
leobertlan2 小时前
2025年终总结
前端·后端·程序员
子兮曰2 小时前
OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
前端·javascript·github
百锦再3 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
莲华君3 小时前
React快速上手:从零到项目实战
前端·reactjs教程
百锦再3 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
易安说AI3 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
失忆爆表症5 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui
小迷糊的学习记录5 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜5 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
不爱吃糖的程序媛5 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter