揭开 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 来解决浮动布局问题的方法。

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

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

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

相关文章

用Sublime编写Lua脚本

大家好&#xff0c;我是阿赵。   现在很多手游项目使用lua作为热更新的代码脚本&#xff0c;我一直很喜欢用Sublime来写lua程序。喜欢使用它的原因是它的轻量化&#xff0c;因为我经常要同时打开多个项目&#xff0c;Unity和VisualStudio这些软件都比较占用电脑的性能&#x…

Nodejs+vue基于微信小程序的高校餐厅食品留样管理系统uniapp

任何系统都要遵循系统设计的基本流程&#xff0c;本系统也不例外&#xff0c;同样需要经过市场调研&#xff0c;需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;编码&#xff0c;测试这些步骤&#xff0c;基于nodejs小程序技术设计并实现了小程序。采用B/S结构,…

父进程隐藏——ConsoleApplication903项目

首先我发现用calc来做进程隐藏实验是失败的&#xff0c;父进程一直都是svhost.exe 那么我用我自己生成的cs木马beacon903.exe试试 试试explorer.exe 再试试cmd.exe 可以看到成功变成cmd.exe 可以看到我们可以通过这种方式虚假父进程 以上我们是直接获得的pid&#xff0c;那…

微信小程序+中草药分类+爬虫+keras

目录 1 介绍2 数据爬虫3 模型训练和验证3.1 模型训练3.2 导入一张图片进行验证 4 后台flask部署5 微信小程序 1 介绍 本项目使用深度学习模型&#xff0c;训练5种中药材数据集&#xff0c;然后将其集成到微信小程序&#xff0c;通过微信小程序拍照&#xff0c;将图片传输给后端…

MIT_线性代数笔记:第 08 讲 求解 Ax=b:可解性与结构

目录 可解的条件 Solvability conditions on b特解 A particular solution通解 Complete solution与零空间进行线性组合 Combined with nullspace 秩 Rank 可解的条件 Solvability conditions on b 矩阵 A 的第三行为第一行和第二行的加和&#xff0c;因此 Axb 中 b 的第 3 个分…

海翔云平台 getylist_login.do SQL 注入漏洞复现

0x01 产品简介 海翔云平台一站式整体解决方案提供商&#xff0c;业务涵盖 批发、连锁、零售行业ERP解决方案、wms仓储解决方案、电商、外勤、移动终端&#xff08;PDA、APP、小程序&#xff09;解决方案。 0x02 漏洞概述 海翔云平台getylist_login.do接口处存在SQL注入漏洞&am…

SVG图片选择库组件封装及使用

需求 需求&#xff1a; 在项目中通常需要做菜单管理&#xff0c;想要让左侧菜单好看一点&#xff0c;一般都会选择添加图标&#xff0c;需要自定义选择喜欢的图标&#xff0c;得提供一个有选择项的图标库 延伸需求&#xff1a;在项目中通常可能有好几个图标选择库&#xff0c;可…

CentOS 系列:CentOS 7文件系统的组成

CentOS 7文件系统的组成 文件系统的组成Linux的一些重要目录文件和目录名主机名文件权限绝对路径和相对路径绝对路径相对路径 文件系统的组成 一切从根开始 文件路径中只有第一个/是根目录&#xff0c;后面的/是分隔符 文件名区分大小写 除斜线(/)以外&#xff0c;其他的字符…

ruoyi-plus使用Statistic统计组件升级element-plus

原本使用的就是gitee上lionli的ruoyi-plus版本的代码。但是在使用过程中作首页数据看板时想使用elementui的Statistic统计组件。结果在浏览器控制台报错找不到组件el-statistic 于是查看elementui的历史版本&#xff0c;发现是在新版中才有这个组件&#xff0c;旧版本是没这个组…

高防CDN可以起到什么作用?

高防CDN相对于普通的CDN加速&#xff0c;除了具备基础的加速功效外&#xff0c;高防CDN在每一节点上均有相应配置的防御功效&#xff0c;不仅具备了隐藏源站不被攻击的优势&#xff0c;也具备了访问加速&#xff0c;多节点防御的功效。随着互联网的不断发展&#xff0c;网络上的…

【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现

文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中&#xff0c;包括表的定义、分区、表的属性等信息。 hi…

前端面试灵魂提问

1.自我介绍 2.在实习中&#xff0c;你负责那一模块 3.any与unknow的异同 相同点&#xff1a;any和unkonwn 可以接受任何值 不同点&#xff1a;any会丢掉类型限制&#xff0c;可以用any 类型的变量随意做任何事情。unknown 变量会强制执行类型检查&#xff0c;所以在使用一个…

工具及方法 - 如何阅读epub文件:使用Adobe Digital Editions

EPUB&#xff08;Electronic Publication的缩写&#xff0c;电子出版&#xff09;是一种电子图书标准&#xff0c;由国际数字出版论坛&#xff08;IDPF&#xff09;提出&#xff1b;其中包括3种文件格式标准&#xff08;文件的扩展名为.epub&#xff09;&#xff0c;这个格式已…

【模电】晶闸管

晶闸管 结构和等效模型工作原理晶闸管的伏安特性晶闸管的主要参数额定正向平均电流 I F I\tiny F IF维持电流 I H I\tiny H IH触发电压 U G U\tiny G UG和触发电流 I G I\tiny G IG正向重复峰值电压 U D R M U\tiny DRM UDRM反向重复峰值电压 U R R M U\tiny RRM URRM 晶体闸流…

【LeetCode刷题-链表】--86.分隔链表

86.分隔链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class…

建筑木模板厂家批发

在建筑施工中&#xff0c;木模板是一种常见且重要的施工材料&#xff0c;用于搭建混凝土浇筑的支撑结构。选择合适的建筑木模板厂家进行批发&#xff0c;对于施工质量和效率至关重要。本文将介绍建筑木模板厂家批发的重要性&#xff0c;并推荐贵港市能强优品木业作为专业的建筑…

MVVM 模式与 MVC 模式:构建高效应用的选择

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【SQL SERVER】定时任务

oracle是定时JOB&#xff0c;sqlserver是创建作业&#xff0c;通过sqlserver代理实现 先看SQL SERVER代理得服务有没有开 选择计算机右键——>管理——>服务与应用程序——>服务——>SQL server 代理 然后把SQL server 代理&#xff08;MSSQLSERVER&#xff09;启…

开源vs闭源,大模型的未来在哪一边?

开源和闭源&#xff0c;两种截然不同的开发模式&#xff0c;对于大模型的发展有着重要影响。开源让技术共享&#xff0c;吸引了众多人才加入&#xff0c;推动了大模的创新。而闭源则保护了商业利益和技术优势&#xff0c;为大模型的商业应用提供了更好的保障。 那么&#xff0c…

Vue3+java开发组队功能

Vue3java开发系统组队功能 需求分析 创建用户可以创建一个队伍&#xff08;一个房间队长&#xff09;&#xff0c;设置队伍人数&#xff0c;队伍名称&#xff08;标题&#xff09;&#xff0c;描述&#xff0c;超时时间。搜索加入&#xff0c;用户可以加入未满的队伍&#xf…