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

news2025/1/11 11:05:58

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过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 来解决浮动布局问题的方法。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【多线程】-- 05 Lambda表达式

多线程 4 Lambda表达式 λ是希腊字母表中排序第十一位的字母&#xff0c;英语名称为Lambda是为了避免匿名内部类定义过多实质属于函数式编程的概念 为什么要使用Lambda表达式&#xff1f; 避免匿名内部类定义过多可以让代码看起来很简洁去掉了一堆没有意义的代码&#xff0…

【LeetCode】128. 最长连续序列——哈希的应用(3)

文章目录 1、思路2、解题方法3、复杂度时间复杂度:空间复杂度: 4、Code Problem: 128. 最长连续序列 1、思路 我会用一种做题者的思路来去看待这道题。 我们在乍一看到这道题的时候&#xff0c;看到它的时间复杂度要求为O(N)&#xff0c;然后又要求去找序列(就是让你判断这个…

高频Latex公式速查表,写论文技术博客不愁了

常见上下标X_{2}X^{2}\hat{X}\bar{X}\frac{1}{X}常见希腊字母\alpha \beta \gamma \delta \varepsilon \eta \theta \rho \sigma \phi \varphi \omega常见数学符号\leq \geq \neq\approx 其他\sum \prod \int \bigoplus \forall \exists \times \setminus \bigotimes \bigodot …

五分钟 k8s 实战-应用探针

Probe.png 今天进入 kubernetes 的运维部分&#xff08;并不是运维 kubernetes&#xff0c;而是运维应用&#xff09;&#xff0c;其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作&#xff0c;现在云原生将运维和研发关系变得更紧密了。 今天主要讲解 Probe 探针相…

集成IDE开发环境,Java开发工具IntelliJ IDEA 2023中文

IntelliJ IDEA 2023是一款功能强大的软件&#xff0c;其为程序员提供了一款先进的集成开发环境。它以智能、高效和人性化为主要特点&#xff0c;致力于提高开发人员的生产力&#xff0c;帮助程序员更快、更好地编写代码。IntelliJ IDEA 2023支持多种语言和框架&#xff0c;包括…

iOS 通用链接的配置(Universal Links)

一、打开Associated Domains 1.首先登录 苹果开发者网站 2.Certificates, Identifiers & Profiles 下的Identifiers 找到要配追的Identifiers 点进去 3.打开Associated Domains然后保存 二、更新Profile文件 如果我们使用自动的&#xff0c;可以忽略这一步&#xff0c;…

泛微E-Office SQL注入漏洞复现

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

00.本地搭建 threejs 文档网站(网页版是外网比较慢)

three官网 https://threejs.org/ 下载代码 进入官网 可以选择github去下载 或者 下载压缩包 github 下载https链接地址 https://github.com/mrdoob/three.js.git git clone https://github.com/mrdoob/three.js.git安装依赖启动程序 安装依赖 npm i 或者 pnpm i 或者 …

通过git上传文件到github仓库

一、新建github仓库 访问github官网&#xff1a;GitHub: Let’s build from here GitHub 点击个人头像&#xff0c;在右侧栏选择Your repositories。 点击New&#xff0c;新建一个github仓库。 创建Repository name仓库名&#xff0c;如果这个仓库名已经创建过的话&#xff…

开始使用Spring Boot Admin吧-使用Nacos注册SBA

什么是 Spring Boot Admin&#xff08;SBA&#xff09;? Spring Boot Admin 是 codecentric 公司开发的一款开源社区项目&#xff0c;目标是让用户更方便的管理以及监控 Spring Boot 应用。 应用可以通过我们的Spring Boot Admin客户端&#xff08;通过HTTP的方式&#xff0…

Vue项目的创建、运行与端口号修改

前言&#xff1a;Vue-cli是Vue官方提供的一个脚手架&#xff0c;用于快速生成一个Vue的项目模板&#xff0c;依赖于NodeJS环境 NodeJS下载&#xff1a;NodeJS安装下载 Vue-cli下载&#xff1a;Vue-cli下载 一.Vue图形化创建项目 1.建立一个文件夹&#xff0c;保存Vue项目 2.在该…

华为P40无法链接adb的解决记录

真的很讨厌华为的设备&#xff0c;很多东西啥设备都能跑得好好的&#xff0c;就华为会出问题&#xff0c;简直就是手机界的IE。 情况&#xff1a;突然无法链接adb到P40&#xff0c;拔插无效&#xff0c;关闭开发人员选项再打开也无效&#xff0c;撤销USB调试授权也无效&#x…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可

ArkTS-WebView内嵌H5页面

鸿蒙开发使用WebView内嵌H5页面 访问在线网页时需添加网络权限&#xff1a;ohos.permission.INTERNET module.json5文件配置 {"module" : {"requestPermissions":[{"name": "ohos.permission.INTERNET"}]} }踩坑日记 加载网页效果无法…

python-爬虫(可直接使用)

爬虫&#xff08;Web Scraping&#xff09;是指通过编程自动化地获取互联网上的信息的过程。爬虫的目的通常是从网页中抓取数据&#xff0c;进行数据分析、处理或展示。以下是爬虫的基本流程和一些重要的概念&#xff1a; 爬虫基本流程&#xff1a; 确定目标&#xff1a; 确定要…

React 之 airbnb - 项目实战

一、开发前言 1. 规范 2. 创建项目 node -v > 18.0.0 npm -v > 8.6.0 create-react-app star-airbnb 3. 项目基本配置 配置jsconfig.json {"compilerOptions": {"target": "es5","module": "esnext","ba…

如何设置带有密码的excel只读模式?

Excel只读模式大家都不陌生&#xff0c;那大家知道带有密码的只读模式吗&#xff1f;今天给大家分享如何设置带有密码的只读模式。 打开excel文件&#xff0c;将文件进行【另存为】设置&#xff0c;然后停留在保存路径的界面中&#xff0c;我们点击下面的工具 – 常规选项 在常…

postgresql以及postgis安装

一、安装postgresql及postgis 1.下载postgresql https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 我选择的版本为“postgresql-14.8-2-windows-x64.exe”。 2.以管理员模式运行安装程序 安装路径建议不要C盘&#xff0c;可能会由于权限问题导致目录…

【计算机毕业设计】nodejs+vue音乐播放器系统 微信小程序83g3s

本系统的设计与实现共包含12个表:分别是配置文件信息表&#xff0c;音乐列表评论表信息表&#xff0c;音乐论坛信息表&#xff0c;歌手介绍信息表&#xff0c;音乐资讯信息表&#xff0c;收藏表信息表&#xff0c;token表信息表&#xff0c;用户表信息表&#xff0c;音乐类型信…

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者&#xff1a;Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户&#xff0c;请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…