当前位置: 首页 > news >正文

什么是 BFC

什么是 BFC

BFC 全称是块级格式化上下文(Block Formatting Context),你可以把它想象成一个“独立王国”。在网页布局里,每个元素都有自己的一套规则来摆放和显示,而 BFC 就是一个特殊的“小世界”,里面的元素按照特定的规则来布局,并且和“小世界”外面的元素相互隔离,互不干扰。

怎么触发 BFC

有好几种方式能让一个元素变成这个“独立王国”,也就是触发 BFC:

  • 元素浮动(float 值为 left 或者 right),就好像这个元素“飘”起来了,自己形成了一个小范围。
  • 元素绝对定位(position 值是 absolute 或者 fixed),它脱离了正常的文档流,自成一派。
  • 行内块元素(display 值为 inline-block),它既像行内元素一样可以在一行显示,又有块级元素的一些特性,也能触发 BFC。
  • 表格单元格(display 值为 table-cell),表格单元格也有自己独特的布局规则,能创建 BFC。
  • 元素的 overflow 属性值不为 visible,比如设置成 hiddenauto 或者 scroll 等,这样元素就会把自己包裹起来,形成一个独立的空间。

BFC 的作用

1. 清除浮动

在网页布局里,浮动元素会脱离正常的文档流,就好像“离家出走”了一样。如果一个父元素里面的子元素都浮动了,父元素就没办法知道子元素到底占了多大空间,它的高度就会变成 0,这就是所谓的高度塌陷。而触发 BFC 就可以解决这个问题,让父元素“管住”浮动的子元素。

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <style>
        /* 父元素 */
        .parent {
            border: 2px solid red;
            /* 触发 BFC */
            overflow: hidden; 
        }
        /* 浮动的子元素 */
        .child {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightblue;
            margin: 10px;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>

</html>

在这个例子里,.child 元素设置了浮动,要是 .parent 元素没有触发 BFC,它的高度就会变成 0,红色的边框就会“塌”在一起。但当给 .parent 元素加上 overflow: hidden 触发 BFC 后,父元素就能包含浮动的子元素,显示出正常的高度和边框。

2. 防止外边距重叠

在普通的文档流里,相邻的块级元素之间的外边距(margin)会重叠。什么意思呢?就是说两个相邻的元素,它们的外边距不会相加,而是取其中较大的那个值。但如果把其中一个元素放到 BFC 里面,这种外边距重叠的情况就不会发生了。

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <style>
        /* 普通的块级元素 */
        .box {
            width: 100px;
            height: 100px;
            background-color: lightgreen;
            margin: 20px;
        }
        /* 触发 BFC 的包装元素 */
        .bfc-wrapper {
            /* 触发 BFC */
            overflow: hidden; 
        }
    </style>
</head>

<body>
    <div class="box"></div>
    <div class="bfc-wrapper">
        <div class="box"></div>
    </div>
</body>

</html>

这里有两个 .box 元素,第一个 .box 在正常的文档流里,第二个 .box 被包在 .bfc-wrapper 里面,而 .bfc-wrapper 触发了 BFC。如果没有这个 BFC,两个 .box 元素之间的距离就只会是 20px(取较大的外边距)。但现在第二个 .box 在 BFC 里,它们之间的距离就变成了 40px(20px + 20px),外边距就不会重叠了。

3. 自适应两栏布局

我们经常会遇到一种布局需求,就是一侧宽度固定,另一侧宽度自适应剩余空间。利用 BFC 就能轻松实现这种布局。

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <style>
        /* 左侧固定宽度的元素 */
        .left {
            float: left;
            width: 200px;
            height: 200px;
            background-color: lightcoral;
        }
        /* 右侧自适应宽度的元素 */
        .right {
            /* 触发 BFC */
            overflow: hidden; 
            height: 200px;
            background-color: lightskyblue;
        }
    </style>
</head>

<body>
    <div class="left"></div>
    <div class="right"></div>
</body>

</html>

在这个例子中,.left 元素设置了浮动,宽度固定为 200px。.right 元素触发了 BFC,它会自动适应剩余的宽度,而且不会和浮动的 .left 元素重叠,这样就实现了一个简单的自适应两栏布局。

相关文章:

  • 实现历史数据的插入、更新和版本管理-拉链算法
  • Aseprite详细使用教程(14)——像素画明亮画法
  • 机器学习小项目之鸢尾花分类
  • A-LOAM源代码解析(一)
  • 6121A 音频分析仪
  • Vue的双向数据绑定和React的单向数据流在处理对象数组时的行为
  • anconda安装教程超详细图文教程(附安装包)【2025】最新anconda3安装教程
  • 【Java基础】Java 构造器
  • 网络安全入门攻击与防御实战(四)
  • FRP内网穿透
  • 敏捷与DevOps
  • 【嵌入式Linux应用开发基础】进程间通信(1):管道
  • JAVA学习第五天
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_full_name 函数
  • 达梦:用户和模式
  • Pytorch的F.cross_entropy交叉熵函数
  • vue中json-server及mockjs后端接口模拟
  • 第4章 信息系统架构(二)
  • 【Linux专栏】find命令+同步 实验
  • 机器学习(1)安装Pytorch
  • 61岁云浮市律师协会副会长谭炳光因突发疾病逝世
  • 新版城市规划体检评估解读:把城市安全韧性摆在更加突出位置
  • 丰富“互换通”产品类型,促进中国金融市场高水平对外开放
  • 京东回应外卖系统崩溃:订单暴涨所致,已恢复
  • 演员黄晓明、金世佳进入上海戏剧学院2025年博士研究生复试名单
  • 在对国宝的探索中,让美育浸润小学校园与家庭