揭开 BFC 的神秘面纱:前端开发必知必会

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 一、引言
    • 1.1 BFC 的定义
    • 1.2 BFC 的作用
  • 二、理解 BFC
    • 2.1 BFC 的创建规则
    • 2.2 BFC 的应用场景
  • 三、BFC 的实际案例
    • 4.1 清除浮动
    • 4.2 自适应布局

一、引言

1.1 BFC 的定义

BFC(Block Format Context)即块级格式化上下文,是 Web 前端开发中的一个重要概念。它是 CSS 中的一种布局规则,用于定义块级元素如何在页面上进行布局和渲染。

BFC 可以看作是一个独立的容器,其中包含了一个或多个块级元素。在 BFC 内部,元素的布局和渲染遵循特定的规则,与外部的元素相互独立。这意味着 BFC 内部的元素不会与外部的元素产生布局冲突,并且可以独立地进行样式计算和渲染。

BFC 的创建可以通过一些 CSS 属性来触发,例如floatpositionoverflow等。当一个元素满足创建 BFC 的条件时,它会形成自己的 BFC,并按照 BFC 的规则进行布局和渲染。

BFC 在前端开发中有很多应用,例如解决浮动布局问题、实现自适应布局、控制元素的渲染顺序等。理解和运用 BFC 可以帮助开发者更好地控制页面布局,提高前端开发的效率和质量。

1.2 BFC 的作用

BFC(Block Format Context)在 Web 前端开发中有以下几个主要作用:

在这里插入图片描述

  1. 解决浮动布局问题:BFC 可以解决常见的浮动布局问题,例如浮动元素相互重叠、浮动元素影响页面布局等。通过创建 BFC,可以使浮动元素在其自身的 BFC 中进行布局,避免与其他元素产生冲突。

  2. 实现自适应布局:BFC 可以用于实现自适应布局,例如在响应式设计中。通过使用 BFC,可以根据容器的大小自动调整内部元素的布局,使页面在不同的设备和屏幕尺寸上都能保持良好的布局效果。

  3. 控制元素的渲染顺序:BFC 可以控制元素的渲染顺序,使元素按照特定的顺序进行渲染。这对于需要精确控制页面布局和样式的场景非常有用。

  4. 清除浮动:BFC 可以自动清除浮动元素对后续元素的影响。当一个元素创建了 BFC 时,它内部的浮动元素不会影响到外部的元素,从而避免了浮动引起的布局问题。

  5. 提高布局效率:BFC 可以提高布局效率,减少浏览器的重排和重绘操作。通过使用 BFC,元素的布局和样式计算可以在其自身的 BFC 中进行,减少了与其他元素的交互,从而提高了页面的渲染性能。

总的来说,BFC 在 Web 前端开发中扮演着重要的角色,它可以帮助开发者更好地控制页面布局,解决常见的布局问题,并提高页面的渲染性能。理解和运用 BFC 是前端开发中的一项重要技能。

二、理解 BFC

2.1 BFC 的创建规则

BFC(Block Format Context)的创建规则如下:

  1. 浮动元素(float):将一个元素设置为浮动元素(例如float: leftfloat: right)会创建一个 BFC。
  2. 绝对定位元素(position: absolute):将一个元素设置为绝对定位(例如position: absolute)会创建一个 BFC。
  3. 具有overflow属性的块级元素:将一个块级元素(例如divp等)设置为具有overflow属性(例如overflow: hiddenoverflow: autooverflow: scroll)会创建一个 BFC。
  4. 具有display属性为inline-blocktableflexgrid的元素:将一个元素设置为这些值之一会创建一个 BFC。
  5. 根元素(html):根元素本身就是一个 BFC。
    在这里插入图片描述

需要注意的是,BFC 是一个独立的布局环境,其中包含的元素遵循特定的布局规则。BFC 内部的元素不会与外部的元素产生布局冲突,并且可以独立地进行样式计算和渲染。

2.2 BFC 的应用场景

BFC(Block Format Context)在 Web 前端开发中有许多应用场景,以下是一些常见的例子:

  1. 解决浮动布局问题:BFC 可以解决常见的浮动布局问题,例如浮动元素相互重叠、浮动元素影响页面布局等。通过创建 BFC,可以使浮动元素在其自身的 BFC 中进行布局,避免与其他元素产生冲突。

  2. 自适应布局:BFC 可以用于实现自适应布局,例如在响应式设计中。通过使用 BFC,可以根据容器的大小自动调整内部元素的布局,使页面在不同的设备和屏幕尺寸上都能保持良好的布局效果。

  3. 控制元素的渲染顺序:BFC 可以控制元素的渲染顺序,使元素按照特定的顺序进行渲染。这对于需要精确控制页面布局和样式的场景非常有用。

  4. 清除浮动:BFC 可以自动清除浮动元素对后续元素的影响。当一个元素创建了 BFC 时,它内部的浮动元素不会影响到外部的元素,从而避免了浮动引起的布局问题。

  5. 提高布局效率:BFC 可以提高布局效率,减少浏览器的重排和重绘操作。通过使用 BFC,元素的布局和样式计算可以在其自身的 BFC 中进行,减少了与其他元素的交互,从而提高了页面的渲染性能。

总的来说,BFC 在 Web 前端开发中扮演着重要的角色,它可以帮助开发者更好地控制页面布局,解决常见的布局问题,并提高页面的渲染性能。理解和运用 BFC 是前端开发中的一项重要技能。

三、BFC 的实际案例

4.1 清除浮动

抱歉,我刚刚的回答缺少 CSS 代码。以下是添加了 CSS 代码的示例:

<div class="container">
  <div class="left_float">左边的浮动元素</div>
  <div class="right_float">右边的浮动元素</div>
  <div class="clearfix">这是一个用于清除浮动的元素</div>
</div>
.container {
  overflow: hidden; /* 创建 BFC */
}

.left_float {
  float: left;
  width: 200px;
  background-color: #f0f0f0;
}

.right_float {
  float: right;
  width: 200px;
  background-color: #f0f0f0;
}

.clearfix {
  clear: both; /* 清除浮动 */
}

在上面的代码中,我们为容器container设置了overflow: hidden,以创建一个 BFC。然后,我们将left_floatright_float设置为左浮动和右浮动,并设置了宽度和背景色。对于clearfix元素,我们使用clear: both来清除浮动。

这样,当页面加载时,左右两个浮动元素将在一行上排列,并且容器的宽度将适应它们的总宽度。如果内容发生变化,浮动元素的位置也会自动调整,以保持布局的自适应特性。

4.2 自适应布局

以下是一个使用 BFC 实现自适应布局的实际案例:

<!DOCTYPE html>
<html>
<head>
    <style>
        .container {
            overflow: hidden; /* 创建 BFC */
        }

        .left_col {
            float: left;
            width: 200px;
            background-color: #f0f0f0;
        }

        .main_col {
            padding-left: 20px; /* 留出两栏之间的空间 */
            background-color: #fff;
        }

        .clearfix {
            clear: both; /* 清除浮动 */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left_col">左边栏</div>
        <div class="main_col">主要内容</div>
        <div class="clearfix"></div>
    </div>
</body>
</html>

在上面的代码中,我们有一个包含左右两栏的容器container。为了实现自适应布局,我们可以使用 BFC 的特性来控制两栏的宽度。

我们将left_col设置为左浮动,并设置了宽度和背景色。对于main_col,我们设置了左内边距以留出两栏之间的空间,并设置了背景色。

然后,我们添加了一个名为clearfix的元素,它使用了 BFC 的创建规则之一:设置overflow属性为hidden。这样,clearfix元素就会创建一个 BFC,其中的浮动元素不会影响到外部的元素。

通过使用clearfix元素,我们可以清除浮动对后续元素的影响,确保页面的布局正常。这是一种常见的使用 BFC 来解决浮动布局问题的方法。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体情况进行调整和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/198841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3的transition标签以及animate.css使用详解

一&#xff1a;前言 在项目开发中&#xff0c;有一种特殊情况是使用动画过渡去完成某个效果。比如淡入淡出&#xff0c;或者在动画完成后执行某些操作等。在以前开发中我们通常会选择使用 CSS3 进行研发。但是这样会有很多不好的地方&#xff0c;比如最原始化的封装&#xff0c…

Spring Boot实现图片上传和展示

Spring Boot实现图片上传和展示 本文将介绍如何使用Spring Boot框架搭建后端服务&#xff0c;实现接收前端上传的图片并保存到resources/images目录下。同时&#xff0c;我们还将展示如何在前端编写一个HTML页面&#xff0c;实现上传图片和从resources/images目录下获取图片并…

Minecraft Modding 模组制作-自定义方块

目录 自定义方块一般方块定义物品所属类注册方块注册方块对应物品添加材质添加各面不同的材质本地化 更多样的方块的实现方式会在之后陆续更新参考打赏 注意&#xff1a;本文代码只表现个人实现方式及习惯&#xff0c;本文解释只体现个人理解&#xff0c;不一定符合规范&#x…

【并发编程】ConcurrentHashMap底层结构和原理

&#x1f4eb;作者简介&#xff1a;小明Java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

MySQL进阶知识:二

目录 视图 基本语法 视图的更新 视图的作用 存储过程 介绍 存储过程基本语法 存储过程的变量 系统变量 用户自定义变量 局部变量 存储过程的判断逻辑 存储过程的参数 存储过程中的流程控制 存储过程中的循环 while的基本语法 repeat的基本语法 loop的基本语法…

Flink-执行拓扑图与作业调度

算子与作业提交 一、Flink执行模式1.流执行模式2.批执行模式 二、Flink拓扑图1.基本概念2.拓扑图生成过程 三、拓扑生成和优化1.应用程序2.逻辑视图3.算子链4.Task Slots 四、作业调度1.调度2.拓扑图数据结构3.Job状态转化4.Task状态转化 总结参考链接 一、Flink执行模式 Flin…

Python语言学习笔记之四(Python文档化)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 Python文档化是指在Python代码中添加注释和文档字符串&#xff0c;以提供有关代码的详细信息和说明。 文档的…

这个变量要不要用volatile修饰呢?

正文 大家好&#xff0c;又见面了&#xff0c;我是bug菌~ 在嵌入式软件开发过程中&#xff0c;如果对volatile不熟&#xff0c;那可以你应该是个"假嵌入式程序员"&#xff0c;因为一个变量需不需要使用volatile考虑的场景挺多的&#xff0c;如果在某些场景下乱用&…

编写安全 JavaScript 代码的最佳实践

编写安全 JavaScript 代码的最佳实践 JavaScript 的动态特性使其成为事实上的浏览器语言和世界上最流行的编程语言。 JS 最受欢迎的有用功能之一是即时分析。这意味着浏览器在下载内容的同时执行代码&#xff0c;这显然有其优势。然而&#xff0c;这种程度的自由也伴随着问题…

使用STM32微控制器实现光电传感器的接口和数据处理

光电传感器在许多领域中被广泛应用&#xff0c;例如工业自动化、智能家居等。本文将介绍如何使用STM32微控制器实现光电传感器的接口和数据处理的方案&#xff0c;包括硬件设计、引脚配置、数据采集、滤波和阈值判断等关键步骤&#xff0c;并给出相应的代码示例。 一、引言 光…

深入浅出 Vue 中的插槽 slot

深入浅出 Vue 中的插槽 slot start 最近被问到好几次 Vue 中的插槽相关知识&#xff0c;掌握的还是有些不全面。抱着重新学习的心态&#xff0c;写这篇博客。首先对基础知识做一个回顾&#xff0c;然后再对源码实现做一个学习。作者&#xff1a;番茄编写时间&#xff1a;2023…

【藏经阁一起读】(78)__《Apache Tomcat 的云原生演进》

【藏经阁一起读】&#xff08;78&#xff09; __《Apache Tomcat 的云原生演进》 目录 __《Apache Tomcat 的云原生演进》 一、读后感 二、文章知识点摘要 2.1、Tomcat的技术内幕和在喜马拉雅的实践 2.2、GraalVM static compilation in web container application&…

企业级开发链表思路

项目结构 头文件代码 头文件代码LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #include <stdio.h> #include <stdlib.h> #include <iostream> // 链表小节点 typedef struct LINKBODE {struct LINKBODE* next;}LinkNode; // 遍历的函数指针 typedef …

UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)

文章目录 1.实现目标2.实现过程2.1 数据与预处理2.2 GeoJson解析2.3 Mesh构建与属性存储2.4 核心代码2.5 材质2.6 蓝图应用测试3.参考资料1.实现目标 在之前的文章中,基于GeoJson数据加载,实现了绘制单面功能,但只支持单个要素Feature。本文这里实现对Geojson内所有面要素的…

Python字典类型

目录 目标 版本 官方文档 简介 实战 创建 循环 常用方法 目标 掌握字典类型的使用方法&#xff0c;包括&#xff1a;创建、循环、常用方法等操作。 版本 Python 3.12.0 官方文档 Mapping Types — dicthttps://docs.python.org/3/library/stdtypes.html#mapping-type…

绝地求生:成长型皮肤异色定价是否有些夸张?

大家好&#xff0c;我闲游盒小盒子&#xff01; 自从26.2更新上架回归的黑市中四款成长型皮肤以后&#xff0c;能看到社区里很多玩家都分享抽中了自己心仪的成长型皮肤。 但是对于异色很少有人去实装&#xff0c;大多数玩家都是选择去分解异色换取五张图纸然后追求升级原皮等级…

【PyQt】(自定义类)阴影遮罩

写了一个感觉有些用的小玩具。 用于给控件添加阴影遮罩(强调主控件的同时屏蔽其余控件的点击) 自定义阴影遮罩Mask&#xff1a; from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout from PyQt5.QtGu…

L型骨牌覆盖问题。

问题&#xff1a;解决一个2k*2k的特殊棋牌上的L型骨牌覆盖问题。 思路&#xff1a; 棋盘覆盖实现的基本方法为分治法 当k0时(1ⅹ1棋盘)&#xff0c;及特殊方格&#xff0c;骨牌数为0 当k >0时&#xff0c;将2kⅹ2k棋盘分割为4个2k-1ⅹ2k-1子棋盘了 特殊方格位于4个较小…

【3D程序软件】SideFX与上海道宁一直为设计师提供程序化 3D动画和视觉效果工具,旨在创造高质量的电影效果

Houdini是一个 从头开始构建的程序系统 使艺术家能够自由工作 创建多次迭代 并与同事快速共享工作流程 Houdini FX为 视觉特效艺术家创作故事片 广告或视频游戏 凭借其基于程序节点的工作流程 Houdini FX可让 您更快地创建更多内容 从而缩短时间并 在所有创意任务中…

制作电脑微信双开快捷方式

一、介绍 电脑下载的微信正常只能打开一个&#xff0c;那有时候需要双开甚至多开微信我们需要怎么操作呢&#xff1f; 我这里就讲一个制作微信双开快捷键方式的办法&#xff0c;争对其他应用也是一样的原理。 二、制作过程 1、右击微信快捷方式 2、点击属性 3、复制目标 …