BFC (Block Formatting Context) 原理规则,看这篇就够了

BFC (Block Formatting Context) 原理 & 规则

BFC是什么?

  • 定义:BFC是Web页面中的一个独立的渲染区域,它规定了其内部的盒子如何布局,以及与其他BFC之间的关系。
  • 作用:提供了一套布局上的规范,确保BFC内的元素布局不会影响到外部的元素布局。

BFC的特点:

  1. 垂直堆叠:在一个BFC中,块级元素会按照源代码的顺序垂直堆叠。
  2. margin折叠:属于同一个BFC的两个相邻块级元素的垂直margin会发生重叠,而不同BFC间的margin不会重叠。
  3. 不与浮动元素重叠:BFC的边界不会与浮动元素重叠,这可以用来清除浮动的影响。
  4. 计算高度:BFC可以包含浮动元素,这意味着即使有浮动元素,父元素也能正确地计算自己的高度。
  5. 隔离性:BFC是一个独立的容器,BFC区域内的元素不会影响到其他BFC区域的布局。

创建BFC的方式:

  • 根元素(<html>)自动形成BFC。
  • 浮动元素(float值不为none)。
  • 绝对定位元素(position值为absolutefixed)。
  • overflow值不为visible的块级元素。
  • display值为flow-root的元素。
  • display值为table-celltable-caption,或者inline-block的元素。
  • column-countcolumn-width不是auto的多列容器。
  • contain值为layoutcontentpaint的元素。

应用场景:

  • 清除浮动:当一个元素内包含浮动元素时,可以通过将该元素转换成BFC来解决高度塌陷的问题。
  • 防止margin重叠:当两个相邻的块级元素之间发生margin重叠时,可以将其中一个元素转换成BFC来避免这种情况。
  • 避免与其他浮动元素重叠:当需要确保一个元素不与前面的浮动元素重叠时,可以将该元素转换成BFC。

应用实例:

当然,下面是几个常见的BFC应用场景及其对应的代码实例:

  1. 清除浮动

假设有一个容器,里面有两个浮动的子元素,导致容器的高度塌陷。通过将容器转换成BFC,可以解决这个问题。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>清除浮动</title>
    <style>
        .container {
            border: 1px solid black;
            /* 创建BFC */
            overflow: auto;
        }
        .box {
            width: 100px;
            height: 100px;
            float: left;
        }
        .box1 {
            background-color: red;
        }
        .box2 {
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box box1"></div>
        <div class="box box2"></div>
    </div>
</body>
</html>
  1. 防止margin重叠

假设两个相邻的块级元素之间发生了margin重叠,通过将其中一个元素转换成BFC,可以避免这种情况。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>防止margin重叠</title>
    <style>
        .box1 {
            width: 100px;
            height: 100px;
            background-color: red;
            margin-bottom: 20px;
        }
        .box2 {
            width: 100px;
            height: 100px;
            background-color: blue;
            /* 创建BFC */
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>
</html>
  1. 避免与其他浮动元素重叠

假设有一个浮动的元素和一个非浮动的元素,非浮动的元素需要避免与浮动元素重叠,通过将非浮动元素转换成BFC,可以实现这一点。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>避免与其他浮动元素重叠</title>
    <style>
        .float-box {
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
        }
        .non-float-box {
            width: 100px;
            height: 100px;
            background-color: blue;
            /* 创建BFC */
            overflow: auto;
        }
    </style>
</head>
<body>
    <div class="float-box"></div>
    <div class="non-float-box"></div>
</body>
</html>

以上就是关于BFC的基本原理和规则,希望对你有所帮助。如果你有更具体的问题或需要进一步的解释,请随时提问。

PS:学会了记得,点赞,评论,收藏,分享

相关推荐
hepherd18 分钟前
Flask学习笔记 - 模板渲染
前端·flask
LaoZhangAI19 分钟前
【2025最新】Manus邀请码免费获取完全指南:5种稳定渠道+3个隐藏方法
前端
经常见20 分钟前
浅拷贝与深拷贝
前端
FanetheDivine23 分钟前
正确使用flex-1
css·html
前端飞天猪25 分钟前
学习笔记:三行命令,免费申请https加密证书📃
前端
关二哥拉二胡26 分钟前
前端的 AI 应用开发系列二:手把手揭秘 RAG
前端·面试
斯~内克28 分钟前
前端图片加载性能优化全攻略:并发限制、预加载、懒加载与错误恢复策略
前端·性能优化
奇怪的知识又增长了37 分钟前
Command SwiftCompile failed with a nonzero exit code Command SwiftGeneratePch em
前端
Maofu37 分钟前
从React项目 迁移到 Solid项目的踩坑记录
前端
薄荷味37 分钟前
ubuntu 服务器安装 docker
前端