BFC块级格式化上下文
创始人
2025-05-31 15:08:04
0

一、概念

BFC - Block Formatting Context 块级格式化上下文 BFC的定义,在官方文档到中,是这么介绍BFC的:A block formatting context contains everything inside of the element creating it that is not also inside a descendant element that creates a new block formatting context.

翻译后:一个BFC区域包含创建该上下文元素的所有子元素,但是不包括创建了新的BFC的子元素的内部元素

可能大家翻译后也不太明白这句话的意思所以下面通过代码以及二次翻译来一起了解一下这句话所表达的意思

在上述代码中bfc_1是一个BFC区域他包含了创建该上下文的item1、item2、item3、bfc_2元素,通过bfc_2也是一个包含了item4、item5、的BFC区域,bfc_1不包含创建了bfc_2的内部元素。

需要注意的点:1.每一个BFC区域只包括其子元素,不包括其子元素的子元素。2.每一个BFC区域都是独立隔绝的,互不影响

二、触发BFC

并不是每个元素都是一个BFC,而是当他满足触发条件时才会形成了个BFC区域。

满足一下任意条件即可:

        ·body根元素

        ·设置浮动,不包括none

        ·设置定位,absoulte或者fixed

        ·行内块显示模式,inline-block

        ·设置overflow,即hidden,auto,scroll

        ·表格单元格,table-cell

        ·弹性布局,flex

三、利用BFC解决问题

因为每一个BFC区域都是独立隔绝的,互不影响。所以我们可以根据其特性来解决部分问题

1.解决外边距塌陷问题(垂直塌陷)

上述代码将渲染两个div元素且外边距为50px,那么这两个元素应该上下距离(50+50)100px,但会发现其渲染出来距离却是50px,这是因为出现了垂直塌陷导致的(两段margin重叠到了一块,互相影响)。

解决办法:由每个BFC都是相互隔绝互不影响的,所以我们可以将这两个div分别放在一个BFC里面即可。

 这样就可以解决了

 2.解决包含塌陷的问题

当父子关系的盒子,给子元素添加margin-top,有可能会把父元素一起带跑。

 解决方案:通过BFC进行将父盒子变成一个独立的区域,这样在BFC区域内部的任何操作,都不会影响到外部。

3.浮动产生影响时,可以通过BFC来消除浮动产生的影响

当一个父元素不设置高的时候,他的高度是由他的子元素决定的,但是当子元素添加浮动后,会导致子元素脱离文档流,从而导致父级高度塌陷。

当前页面展示

当给子元素添加浮动后

页面:会导致父元素高度塌陷

 解决方案:将父元素变成BFC内部子元素将不会影响外部元素

页面:

 4.BFC可以阻止标准流元素被浮动元素覆盖

当一个元素添加浮动后,会脱离文档流,会覆盖其他元素。

解决:将另一个元素变成BFC区域, 第一个元素添加了浮动已经是一个BFC区域了,两个BFC区域相互独立,互不影响。

页面:

四、总结

1.一个BFC区域只包含其子元素,不包括其子元素的子元素。

2.并不是所有的元素都能成为一块BFC区域,只有当这个元素满足条件的时候才会成为一块BFC区域。

3.不同的BFC区域之间是相互独立的,互不影响的。利用这个特性我们可以让不同BFC区域之间的布局不产生影响。

相关内容

热门资讯

计算机组成原理实验1---运算...     本实验为哈尔滨工业大学计算机组成原理实验,实验内容均为个人完成,...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
前端-session、jwt 目录:   (1)session (2&#x...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
EL表达式JSTL标签库 EL表达式     EL:Expression Language 表达式语言     ...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
【Spring Cloud A... 文章目录前言Metadata元数据ClassMetadataSpring中常见的一些元注解Nacos...
React篇-关于React的... 一.简介1.介绍用于构建用户界面的 JavaScript 库2.创建项目(1)手动创建Documen...
win7 Pro 英文版添加中... win7pro x64英文版添加中文语言包1、下载语言包,并解压成lp.cab,复制到...
Android开发-Andro... 01  Android UI 1.1  UI 用户界面(User Interface,...
基于springboot教师人... 基于springboot教师人事档案管理系统【源码+论文】 开发语言:Jav...
编写软件界面的方式 本文重点解决如下问题:编写软件的界面有哪几种方式?通常情形下࿰...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
GO语言小锤硬磕十三、数组与切... 数组用来保存一组相同类型的数据,go语言数组也分一维数组和多维数组。 直接上代码看一下...
三级数据库备考--数据库应用系... 1.数据库应用系统设计包括概念设计、逻辑设计、物理设计3个步骤,每个步骤的设计活动按照...
prometheus数据持久化... https://segmentfault.com/a/1190000015710814 promet...
孩子用什么样的灯对眼睛没有伤害... 现代社会高速发展,越来越多的人开始重视身体健康,尤其是很多家长ÿ...
微软Bing GPT支持AI绘... 我想要一张图片:大象、珊瑚、火山、云朵我想要一张图片:亚特兰蒂斯...
最新!5月IPO受理数创今年新... IPO市场新动态。5月30日,共有4家IPO企业获得受理,其中创业板打破今年“0受理”现象,迎来首批...