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>
相关推荐
人工智能训练2 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪3 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
pas1365 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠5 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
珑墨6 小时前
【Turbo】使用介绍
前端
军军君017 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
打小就很皮...8 小时前
Tesseract.js OCR 中文识别
前端·react.js·ocr
wuhen_n8 小时前
JavaScript内存管理与执行上下文
前端·javascript
Hi_kenyon8 小时前
理解vue中的ref
前端·javascript·vue.js
落霞的思绪10 小时前
配置React和React-dom为CDN引入
前端·react.js·前端框架