前端之BFC解释说明

13 篇文章 0 订阅
订阅专栏

一、BFC是什么?

官方定义

BFC(Block Formatting Context,块格式化上下文) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

详见 MDN

看不明白?那就对了!
官方解释若不搞得抽象难懂些,怎能显出高大上?!(手动滑稽)
还是让逆战在新冠疫情期的我来给你解答吧!

个人理解

  1. BFC是一个独立的布局环境,BFC内部的元素布局与外部互不影响;
  2. 可以通过一些条件触发BFC,从而实现布局上的需求或解决一些问题;
  3. 可以将BFC想象成一个工具,无需探究其定义,只要着重理解其功能(特性)即可。

二、BFC有什么用?

BFC的触发条件

  1. 根元素()
  2. float值非none
  3. overflow值非visible
  4. display值为inline-block、table-cell、table-caption、flex、inline-flex
  5. position值为absolute、fixed

BFC的特性

  1. 属于同一个BFC的两个相邻容器的上下margin会重叠(重点)
  2. 计算BFC高度时浮动元素也参于计算(重点)
  3. BFC的区域不会与浮动容器发生重叠(重点)
  4. BFC内的容器在垂直方向依次排列
  5. 元素的margin-left与其包含块的border-left相接触
  6. BFC是独立容器,容器内部元素不会影响容器外部元素

注:其中1、2、3需重点理解,其特性和功能下面将用代码逐个演示;
4、5、6为基本现象,按字面意思理解即可,不做重点说明。

特性1:属于同一个BFC的两个相邻容器的上下margin会重叠

功能:可解释为何相邻两容器上下外边距会发生重叠

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        <style type="text/css">
            .top{
                width: 200px;
                height: 200px;
                background: red;
                margin-bottom: 40px;
            }
            .bottom{
                width: 200px;
                height: 200px;
                background: blue;
                margin-top: 60px;
            }
        </style>
	</head>
	<body>
        <div class="top"></div>
        <div class="bottom"></div>
	</body>
</html>
代码渲染效果如下:
图1:红色块下外边距

在这里插入图片描述

上面色块给下外边距40px

图2:蓝色块上外边距

在这里插入图片描述

下面色块给上外边距60px
现象:
当给红色块下外边距margin-bottom,给蓝色块上外边距margin-top时,上下外边距会发生重叠,两个色块的间距解析为两者中的较大值(60px)。

原因:
此时红色块和蓝色块属于同一个BFC,即根元素()。BFC的特性1规定 “属于同一个BFC的两个相邻容器的上下margin会重叠”,故两者上下边距发生重叠。

通过BFC特性解决上下margin的重叠问题:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        <style type="text/css">
            .top{
                width: 200px;
                height: 200px;
                background: red;
                margin-bottom: 60px;
            }
            .bottom{
                width: 200px;
                height: 200px;
                background: blue;
                margin-top: 60px;
            }
            .box{
                overflow: hidden;
            }
        </style>
	</head>
	<body>
        <div class="top"></div>
        <div class="box">
            <div class="bottom"></div>
        </div>
	</body>
</html>
代码渲染效果如下:

在这里插入图片描述

现象:
给蓝色块添加父元素.box并添加声明overflow: hidden;可以解决红色块和蓝色块的上下margin重叠问题。

原因:
通过给蓝色块添加父元素.box并添加声明overflow: hidden;,使得父元素.box触发了BFC(见BFC触发条件3),此时红色块和蓝色块属于不同的BFC,红色块的BFC仍然是根元素(),蓝色块的BFC是父元素.box。即不满足BFC特性1中的规定“属于同一个BFC······”,从而解决了两者的上下margin重叠问题。

注:overflow: hidden;只是触发BFC众多条件中的一个,使用其他条件也能解决此问题,注意触发条件可能造成的其他影响即可,如浮动会造成的脱离文档流等。

特性2:计算BFC高度时浮动元素也参于计算

功能:可解释为何overflow: hidden;能解决父元素高度塌陷

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        <style type="text/css">
            .outside{
                border: 10px solid blue;
            }
            .inside{
                width: 200px;
                height: 200px;
                background: yellowgreen;
                float: left;
            }
        </style>
	</head>
	<body>
        <div class="outside">
            <div class="inside"></div>
        </div>
	</body>
</html>
代码渲染效果如下:

在这里插入图片描述

现象:
当父元素.outside没有设置高度且子元素.inside都浮动时,父元素.outside会出现高度塌陷。

原因:
子元素.inside设置浮动后脱离文档流,而父元素.outside又没有设置高度,故父元素.outside会出现高度塌陷。

通过BFC特性解决高度塌陷问题:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        <style type="text/css">
            .outside{
                border: 10px solid blue;
                overflow: hidden;
            }
            .inside{
                width: 200px;
                height: 200px;
                background: yellowgreen;
                float: left;
            }
        </style>
	</head>
	<body>
        <div class="outside">
            <div class="inside"></div>
        </div>
	</body>
</html>
代码渲染效果如下:

在这里插入图片描述

现象:
给父元素.outside添加声明overflow: hidden;,父元素高度塌陷消失。

原因:
给父元素.outside添加声明overflow: hidden;,使得父元素.outside触发了BFC(见BFC触发条件3),而BFC特性规定“计算BFC高度时浮动元素也参于计算”,此时子元素.inside虽然设置了浮动,但其高度仍计算至父元素内,从而解决了高度塌陷问题。

特性3:BFC的区域不会与浮动容器发生重叠

功能:在布局上实现自适应两栏(三栏)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        <style type="text/css">
            .left{
                width: 100px;
                height: 200px;
                background: yellowgreen;
                float: left;
            }
            .right{
                height: 300px;
                background: blue;
            }
        </style>
	</head>
	<body>
        <div class="left"></div>
        <div class="right"></div>
        
	</body>
</html>
代码渲染效果如下:

在这里插入图片描述

现象:
正常情况下,左侧元素.left浮动时,会与右侧元素.right发生重叠,不能实现自适应两栏效果。

原因:
左侧元素浮动,脱离文档流。

通过BFC特性解决重叠问题:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        <style type="text/css">
            .left{
                width: 100px;
                height: 200px;
                background: yellowgreen;
                float: left;
            }
            .right{
                height: 300px;
                background: blue;
                overflow: hidden;
            }
        </style>
	</head>
	<body>
        <div class="left"></div>
        <div class="right"></div>
        
	</body>
</html>
代码渲染效果如下:

在这里插入图片描述

现象:
给右侧元素.right添加声明overflow: hidden;,左右侧元素重叠消失,实现自适应两栏效果。

原因:
给右侧元素.right添加声明overflow: hidden;,使得右侧元素触发了BFC(见BFC触发条件3),而BFC特性规定“BFC的区域不会与浮动容器发生重叠”,从而解决了重叠问题,实现自适应两栏效果。

特性4:BFC内的容器在垂直方向依次排列

类似正常情况下块元素在垂直方向上依次排列,较易理解。
在这里插入图片描述

特性5:元素的margin-left与其包含块的border-left相接触

基本现象,较易理解。
在这里插入图片描述

特性6:BFC是独立容器,容器内部元素不会影响容器外部元素

较易理解。

BFC功能总结

1、可以利用BFC解决两个相邻元素的上下margin重叠问题;
2、可以利用BFC解决高度塌陷问题;
3、可以利用BFC实现多栏布局(两栏、三栏、圣杯、双飞翼等)。

————————————————
版权声明:本文为「qs-cnblogs」的原创文章。
原文链接:https://www.cnblogs.com/qs-cnblogs/p/12349887.html

前端bfc的介绍与使用
02-23
关于BFC的介绍与使用 这篇文章是我对BFC的理解及总结 带你们了解bfc的布局规则,使用方法,触发条件等内容,理解简单。
前端基础——文档流与BFC
09-26
前端基础——文档流与BFC
数据结构学习笔记——线性表之顺序表
HiSi_的博客
09-02 1486
线性表的定义: 具有相同性质元素的一个有限序列。 序列中所含元素个数为线性表的长度。 线性表中每个元素由逻辑序号唯一确定,逻辑序号是由1开始的,而物理序号(我们说的数组的下标是从0开始的)。 序列中的第一元素叫做表头元素,最后一个元素叫做表尾元素。 线性表的抽象数据类型描述: ADT List { 数据对象: D = {ai | 1<=i<=n, ai为ElemType对象} //ElemType是自定义类型的标识符, //在后面的讨论中,ai是结构体类型的。 数据关系: R =
BFC 到底是个啥?有何神通广大之处?这篇文章带你进入 BFC 的世界
qq_35727582的博客
04-26 3385
在实际开发过程中其实我们不经意间就用到了BFC这一利器解决了我们的问题,一起学习如何使用BFC实现我们想要的效果吧!
了解什么是bfc前端面试)
2201_75866478的博客
10-31 400
你会怎么说?很多人会告诉你,bfc就是块级格式化上下文,那么这到底是什么意呢?bfc的全称是Block Format Content,直译为块级格式化上下文,它是一个独立的渲染区域,也就是说,触发bfc的元素会形成一个独立的渲染区域,这个区域里面的元素(包括他自己)不会影响外部元素的渲染,
前端中的BFC是什么?
热门推荐
yigetutouzai的博客
07-05 1万+
BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 MDN给出的解释是:BFC是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。......
关于前端中的BFC的理解
一个在全能之路上越走越远的男人。
03-27 1690
什么是BFC? 全称块级格式化上下文?什么意思不懂。看了好多博客,基本都是抄的,真心都不是大白话。我今天来总结一下,用菜鸟级别的语言来描述。 BFC 应该可以抽象成一个 独立的个体,出淤泥而不染的白莲花。 是的不受其他元素的影响,始终保持自己独立。就是正常的普通流布局规则,设置的样式是什么样的,就按正常的普通流布局的表现。 内部的子元素 不受外界的影响,外界的元素,也不受内部的元素的影响。...
前端什么是BFC
程宇寒
08-06 343
什么是BFC? 全称块级格式化上下文?什么意思不懂。看了好多博客,基本都是抄的,真心都不是大白话。我今天来总结一下,用菜鸟级别的语言来描述。 BFC 应该可以抽象成一个 独立的个体,出淤泥而不染的白莲花。 是的不受其他元素的影响,始终保持自己独立。就是正常的普通流布局规则,设置的样式是什么样的,就按正常的普通流布局的表现。 内部的子元素 不受外界的影响,外界的元素,也不受内部的元素的影响。各自独立生活在html这片空间下。 BFC触发条件:   【1】根元素,即HTML元素   【2】f.
前端知识点之BFC
PrototypeOne的博客
04-24 467
BFC 什么是BFC BFC:Block formatting context,中文块级格式化上下文。 它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。 BFC的布局规则 内部的Box会在垂直方向,一个接一个地放置。 Box垂直方向的距离由m
前端基础——BFC
qq_41721660的博客
04-09 517
FC 概念 FC(Formating context)格式化上下文,是css2.1提出的一个视觉渲染的概念。它是页面中一块渲染的区域,并且有一套自己的渲染规则,它决定了其子元素如何排列,以及和其他元素之间的相互关系 BFC BFC--block formating context:块级格式化上下文,BFC是页面中的一个块级渲染区域。 概念: 指的是页面中的一个标签,不一定是块级标签。要成为BFC,有指定的满足条件。BFC有自己的排列规范,决定了BFC区域的子元素如何排列,以及与其他元素之间的相互关系
zuoxiaobai#zuo11.com#web前端BFC,什么是BFC1
07-25
字面意思很难理解,我们先来看几个例子",虽然做前端好几年了,但只是听说个这个名词,一直不清楚具体是什么意思,今天来研究下BFC相关示例BFC是 Block Fo
前端面试题之CSS
01-08
本文总结了前端面试题中,关于css部分 ,掌握这些 ,对你面试会有很大帮助。关于JS,浏览器,框架等后续会有更新呦,需要的小可爱可以关注一下,真的全是干货,不要错过哦!:heart_suit::heart_suit::heart_suit: ...
BFC实现自适应两栏布局
01-20
回想第一次听到BFC的时候,是在解释为什么高度塌陷可以用overflow:hidden;等方法来解决的时候,当时BFC对我来说还是一个陌生的概念。在解决高度塌陷的问题的时候,通过BFC的触发条件之一触发BFC后,在计算BFC的高度...
前端BFC说明
weixin_45054381的博客
12-15 806
1、可以利用BFC解决两个相邻元素的上下margin重叠问题;2、可以利用BFC解决高度塌陷问题;3、可以利用BFC实现多栏布局(两栏、三栏、圣杯、双飞翼等)。圣杯布局。
前端CSS理解 —— BFC(块级格式化上下文)
upgrade_bro的博客
08-04 133
BFC即 Block Formatting Contexts (块级格式化上下文),BFC是指浏览器中创建了一个独立的渲染区域(内部元素的渲染不会影响边界以外的元素)。应用BFC可以避免margin折叠、清除浮动……
前端CSS必知:BFC及其触发条件
清颖的博客
08-08 6486
文章目录1. bfc的理解(块级格式化上下文)2. 触发bfc的方式:3. bfc解决的问题:外边距合并,检测浮动高度,制作右侧自适应盒子4. bfc布局规则特性:5. 两栏布局6. 补充:7. 块元素高度不设或宽度不设的情况。 将本人好久之前的 云笔记 搬到博客上来,统一维护。 1. bfc的理解(块级格式化上下文) 可以看作是隔离了的独立容器,内部元素的布局,不会影响外部元素。 可通过css属性触发。 浮动元素产生了浮动流,块级元素看不到; 文本类属性的元素(inline),文本元素和产生了bfc的元
前端BFC的介绍和使用
Louiee1的博客
02-23 790
一、什么是BFCBFC : 块级格式化上下文 ( 独立的渲染区 ) BFC(Block formatting context)直译为“块级格式化上下文”。它是一个独立的渲染区域,只有块级元素参与, 它规定了BFC内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 bfc通俗的解释:块级元素布局逻辑(规则) BFC的触发条件: 根元素(html) float属性不为non...
前端BFC规则
Kiri_To的博客
08-21 542
什么是BFC? 首先要了解什么BFCBFC 全称为 (Block Formatting Context) 块格式化上下文 它是一种功能,针对于 HTML文档 起作用,BFC 应该可以抽象成一个 独立的个体,就是正常的普通流布局规则,设置的样式是什么样的,就按正常的普通流布局的表现。 内部的子元素 不受外界的影响,外界的元素,也不受内部的元素的影响。各自独立生活在html这片空间下。 BFC触...
记录一次前端页面崩溃的产生及处理
最新发布
weixin_51123079的博客
05-30 579
记录一次前端页面崩溃的产生及处理
前端BFC,IFC,GFC,FFC分别表示什么意思
02-17
前端开发中,BFC、IFC、GFC、FFC 是指不同的 CSS 布局上下文,它们分别代表: 1. BFC(块级格式化上下文):是一个独立的块级渲染区域,具有一定的布局规则,内部的块级元素会按照一定的规则进行排列。BFC 的特点是内部的盒子会在垂直方向上一个接一个地放置,同一行的盒子在水平方向上也有一定的间隔。常见的触发 BFC 的方式包括设置元素的 overflow 属性(除了 visible 以外的值)、float 属性、position 属性(除了 static 以外的值)、display 属性为 table-cell、table-caption 或 inline-block 等。 2. IFC(内联格式化上下文):是一块内联元素的渲染区域,内部的内联元素会按照一定的规则进行排列。IFC 的特点是内部的内联盒子在垂直方向上一个接一个地放置,同一行的盒子紧贴在一起。常见的触发 IFC 的方式包括设置元素的 display 属性为 inline-block、inline-table 或 flex 等。 3. GFC(网格格式化上下文):是一个独立的网格渲染区域,内部的网格元素会按照一定的规则进行排列。GFC 通常用于实现复杂的网格布局,它的特点是能够自动适应不同大小的元素,并支持单元格合并等高级特性。常见的触发 GFC 的方式包括设置元素的 display 属性为 grid。 4. FFC(自适应格式化上下文):是一个渲染区域,内部元素会根据可用的空间自动进行排列和缩放。FFC 的特点是可以实现类似于图像的自适应缩放效果,通常用于实现响应式布局。常见的触发 FFC 的方式包括设置元素的 display 属性为 flex 或 inline-flex。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • (超详细)强大的grid布局 33449
  • Vue——父子组件的生命周期(执行顺序) 25225
  • (Vue)项目结构解析 19710
  • node.js连接mysql出现错误ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol... 15559
  • Vue表单生成器form-create的使用详解 14646

分类专栏

  • 前端 13篇
  • Vue 27篇
  • JavaScript 8篇
  • Nodejs 5篇
  • Android Studio安卓开发 7篇
  • java 6篇

最新评论

  • Vue表单生成器form-create的使用详解

    力拔山河气盖兮丶: 终于找到FormCreate的官网,用了很多年了! FormCreate官网:https://www.form-create.com

  • node.js连接mysql出现错误ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol...

    柯南码程序: no,他们怎么都解决了,我其实原密码就是123456,改了以后还是这个问题没作用,咋办呀

  • node.js连接mysql出现错误ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol...

    默默花上开: 是不是没有修改root的权限

  • node.js连接mysql出现错误ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol...

    文件助手·: 输入之后出现了这个报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'请问怎么解决呀

  • node.js连接mysql出现错误ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol...

    qq_66571391: 太强了,哥。一个下午看着帖子一分钟搞定。感谢

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • websocket建立连接
  • 从零开始制作 Hexo 主题
  • BOM(浏览器对象模型)
2023年1篇
2022年16篇
2021年46篇
2020年17篇
2019年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司武汉网站seo优化价格荷坳百度网站优化排名推荐广州百度标王多少钱荆州网站设计价格盘锦网站建设设计哪家好日照优秀网站设计推荐鹤壁网站优化推荐天门百姓网标王推广报价白城网站搭建多少钱甘孜网站开发怒江模板网站建设价格达州营销网站推荐湘西外贸网站设计公司襄樊高端网站设计多少钱乌海百姓网标王哪家好德宏百度竞价公司文山网站优化按天计费多少钱益阳百度网站优化哪家好淮南网站推广方案公司阳泉企业网站制作价格德宏优秀网站设计公司吴忠品牌网站设计价格雅安关键词按天计费报价坪山外贸网站设计多少钱临猗品牌网站设计价格郑州网站优化推广价格日照网站优化推荐定西建设网站价格崇左网站推广方案公司新余网络营销哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化