什么是BFC?

简介: 【10月更文挑战第27天】BFC是CSS中一个非常重要的概念,它对于理解和掌握页面布局以及解决一些常见的布局问题都有着重要的作用,通过合理地创建和利用BFC,可以实现更加灵活和稳定的页面布局。

BFC即Block Formatting Context,中文为块级格式化上下文,它是CSS中的一个重要概念:

定义与原理

  • BFC是Web页面中一个独立的渲染区域,它规定了内部的块级元素如何布局,并且与外部的元素相互隔离。在BFC中,元素按照一定的规则进行排列,这些规则决定了元素的位置、大小以及与其他元素之间的关系。
  • 当一个元素满足以下条件之一时,就会创建一个BFC:
    • 根元素(<html>)。
    • 浮动元素(float 属性不为 none)。
    • 绝对定位元素(position 属性为 absolute 或 fixed)。
    • 行内块元素(display 属性为 inline-block)。
    • 表格单元格(display 属性为 table-cell)。
    • 表格标题(display 属性为 table-caption)。
    • 匿名表格单元格元素(display 属性为 table-cell 的匿名元素,如在使用 display: table 时,内部未明确指定 display 属性的子元素)。
    • 具有 overflow 属性且值不为 visible 的元素。
    • 弹性项目(display 属性为 flex 或 inline-flex 中的子元素)。
    • 网格项目(display 属性为 grid 或 inline-grid 中的子元素)。

布局规则

  • 内部元素排列:在BFC中,块级元素会在垂直方向上一个接一个地排列,每个元素的上外边距与下一个元素的上外边距会发生合并,除非它们之间有边框、内边距或非空内容将它们隔开。
  • 与浮动元素的关系:BFC中的元素不会与浮动元素重叠,而是会根据浮动元素的位置来调整自己的位置,从而实现自适应布局。
  • 包含浮动元素:BFC可以包含浮动的子元素,使浮动元素不会超出其包含块的范围,避免了浮动元素对页面布局的影响。

作用与应用场景

解决外边距塌陷问题

  • 外边距塌陷是指两个相邻的块级元素,当它们的上外边距和下外边距相遇时,会发生合并,导致外边距看起来比实际设置的要大。通过创建BFC,可以将两个元素分隔在不同的BFC中,从而避免外边距的塌陷。
    ```html
    <!DOCTYPE html>









- 在上述示例中,`box1` 和 `box2` 是两个相邻的块级元素,它们的外边距发生了塌陷。通过将 `box2` 包裹在一个创建了BFC的元素中(这里使用 `overflow: hidden;` 创建BFC),可以使 `box1` 和 `box2` 的外边距不再塌陷,各自按照设置的外边距显示。

#### 实现两栏或多栏布局
- BFC可以用于实现两栏或多栏布局,其中一侧的元素可以浮动,另一侧的元素通过创建BFC来实现自适应布局,避免与浮动元素重叠。
```html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>BFC与两栏布局</title>
  <style>
   .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: lightblue;
    }

   .right {
      height: 300px;
      background-color: lightgreen;
      overflow: hidden;
    }
  </style>
</head>

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

</html>
  • 在这个两栏布局的示例中,左侧的元素通过 float: left; 进行浮动,右侧的元素通过 overflow: hidden; 创建BFC,从而实现了右侧元素自适应宽度,并且不会与左侧的浮动元素重叠。

清除浮动

  • 当一个元素包含浮动的子元素时,如果不进行处理,父元素的高度可能会塌陷,导致页面布局出现问题。通过在父元素上创建BFC,可以使父元素包含浮动的子元素,从而清除浮动,保持页面布局的正常。
    ```html
    <!DOCTYPE html>










```

  • 在上述示例中,父元素 parent 通过 overflow: hidden; 创建BFC,从而包含了浮动的子元素 child,防止了父元素高度塌陷,确保了页面布局的完整性。

BFC是CSS中一个非常重要的概念,它对于理解和掌握页面布局以及解决一些常见的布局问题都有着重要的作用,通过合理地创建和利用BFC,可以实现更加灵活和稳定的页面布局。

相关文章
|
机器学习/深度学习 人工智能 JSON
AI应用工程师面试问题清单
本内容涵盖AI与大语言模型(LLM)基础原理、Prompt工程设计及实战项目经验。详解LLM预测机制、Transformer架构、Embedding应用,介绍Prompt优化策略如Zero-shot、Few-shot、RAG技术,并结合实际项目展示AI应用全流程开发与落地能力。
2823 122
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
568 1
|
10月前
|
人工智能 自然语言处理 机器人
2025年头部AI数字人公司技术解析,中国优秀数字人企业实探
2025年,数字人迈向规模化产业应用。世优科技“波塔AI数字人智能体”入选年度典型案例,凭借多模态交互、大模型+小模型架构与全栈技术,深入政务、文旅、医疗、教育等场景,实现降本增效。其技术自研、场景融合与生态共建能力,彰显数字人作为“新质生产力”的落地价值,引领人机协同新时代。
718 0
|
JavaScript
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
|
API 自然语言处理 缓存
从 0 到 1 打造义乌购智能搜索接口:技术架构与性能优化全解析
针对义乌购千万级SKU搜索痛点,本文详解通过微服务架构、SolrCloud集群、jieba+BERT语义分词及多级缓存等技术,实现高并发、低延迟、高精准的搜索系统,并分享权限安全、性能优化与自动化运维实践。
从 0 到 1 打造义乌购智能搜索接口:技术架构与性能优化全解析
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 8 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 8 月更新)
2920 3
Windows Server 2022 中文版、英文版下载 (2025 年 8 月更新)
|
存储 监控 安全
计算机硬件日常维护
【7月更文挑战第28天】
682 4
|
JavaScript
JS中splice与slice的区别【基础】
JS中splice与slice的区别【基础】
637 0
|
测试技术 Python
【手机群控】 利用Python与uiautomator2实现
使用Python的uiautomator2库进行多设备自动化测试,涉及环境准备(Python、uiautomator2、adb连接设备)和代码实现。通过`adb devices`获取设备列表,使用多进程并行执行测试脚本,每个脚本通过uiautomator2连接设备并获取屏幕尺寸。注意设备需开启USB调试并授权adb。利用多进程而非多线程,因Python的GIL限制。文章提供了一种提高测试效率的方法,适用于大规模设备测试场景。
1887 2
【手机群控】 利用Python与uiautomator2实现