BFC 到底是什么?
MDN 对 BFC 的描述:
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。

往下接着看看:
下列方式会创建块格式化上下文:
- 根元素或包含根元素的元素
- 浮动元素(元素的 float 不是 none)
- 绝对定位元素(元素的 position 为 absolute 或 fixed)
- 行内块元素 (元素的 display 为 inline-block)
- 表格单元格(元素的 display 为 table-caption)
- 具有overflow 且值不是 visible 的块元素,
- display: flow-root
- column-span: all 应当总是会创建一个新的格式化上下文,即便具有 column-span: all 的元素并不被包裹在一个多列容器中。
好像有那么点意思,就是说如果符合以上情况,就会创建 BFC 咯?
先不管那么多,写个demo试试看:

上面代码,当我们给子元素一个高度时,父元素会将子元素包裹住。

但是,当我们给子元素一个左浮动后,子元素脱离文档流就跑出去了。

上面代码,当我们也给父元素加上一个左浮动后(满足 float 不为 none),触发了 BFC,成功创建了块格式化上下文,父元素重新包裹住了子元素。

上面代码,当我们让父元素绝对定位后也触发了 BFC。

上面代码满足元素的 display 为 inline-block的条件,所以触发了 BFC。
再结合 MDN 的描述:
创建了块格式化上下文的元素中的所有内容都会被包含到该BFC中。

这下就清楚多了,BFC 可以用来包住浮动元素(不是清除浮动哟)。就算子元素再怎么折腾,也不会影响外部元素了。
话说回来,虽然我可以通过给父元素加 float 等条件触发 BFC,但是给父元素加 float 这个行为本身会不会影响别的元素呢?我可不想拆东墙补西墙。。。
于是,一个新的属性display: flow-root诞生了!!!
这个属性的功能就一个:触发 BFC

只需给元素加上display: flow-root就能触发 BFC。
既然说 BFC 能够包住浮动元素,那么我是不是可以利用这一点进行布局呢?

上面代码,当slide-bar左浮时,会脱离文档流,和main发生重叠。你也许会说,给main也加个左浮吧,看代码:

没错,由于没有宽度,我的main被挤扁了。。。那为什么不加个宽度呢?
这样我的main就不能自适应了呀(敲黑板!)
BFC 完美的解决了这个问题:

上面代码,利用 BFC 使两个兄弟元素互不干涉,实现了左右自适应布局。
总的来说,你可以这样理解 BFC:
功能一:爸爸管儿子
功能二:兄弟之间划清界限
参考资料:
块格式化上下文
CSS深入理解流体特性和BFC特性下多栏自适应布局
BFC 到底是什么?的更多相关文章
- BFC的形成条件和特性分析
初学CSS时,我们学到很多有意思的CSS规则,比如外边距塌陷,还有浮动元素的一些特性等,其实这些规则背后都是BFC这个东西在控制,下面我们来看下BFC到底是什么. 什么是BFC BFC(Block f ...
- 神奇的BFC以及被忽略的东西
BFC是CSS中一个非常重要的概念,经常用来清除浮动以及处理外边距折叠,但BFC到底是个什么东西却很难准确的表达清楚,国内的相关技术文档基本都不全面,本文的目的就是对BFC的方方面面做个整理,当然未必 ...
- BFC之浅析篇
BFC是什么呢? 掏粪男孩? 当然不是咯.BFC,英文名Block formatting context,直译为“块级格式化上下文”.它是W3C CSS 2.1规范中的一个概念,决定了元素如何对内容进 ...
- 学习BFC
BFC全称是Block Formatting Context,即块格式化上下文.它是CSS2.1规范定义的,关于CSS渲染定位的一个概念.要明白BFC到底是什么,首先来看看什么是视觉格式化模型. 视觉 ...
- 认识和理解css布局中的BFC
认识和理解css布局中的BFC BFC的定义 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. Block Formatting Con ...
- 什么是BFC(Block Formatting Context)
原文:https://segmentfault.com/a/1190000012221820 https://www.w3.org/TR/CSS2/visuren.html#block-formatt ...
- 前端知识总结--BFC
Block Formatting Context,中文直译为块级格式上下文. 1. BFC的定义 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和 ...
- CSS 潜藏着的BFC
在写样式时,往往是添加了一个样式,又或者是修改了某个属性,就达到了我们的预期. 而BFC就潜藏在其中,当你修改样式时,一不小心就能触发它而毫无察觉,因此没有意识到BFC的神奇之处. 什么是BFC(Bl ...
- 浅谈对BFC的认识,以及用bfc解决浮动问题
我们在前端的学习过程中常常会遇到BFC,用BFC来解决一些margin塌陷.margin合并清理浮动流的问题 那么问题来了,我们所说的BFC到底是个什么东西呢: 什么是BFC BFC(Block Fo ...
随机推荐
- 基于springboot+jquery+H5的文件(并发+断点+分片)的上传方案
1.支持文件分片断点续传 2.支持已上传文件再次上传时秒传 3.多个人对同一个文件同时上传可以多线程并发协调上传,加快超大文件的上传速度. 技术点:springboot + webflux + red ...
- SearchLookupEdit 选择后联动
直接改绑定数据源--实体的属性会导致选择内容变空 所有改相应控件的text然后再写入数据源 最好将需要联动的控件设置成只读 mNoTextEdit.EditValueChanged += (s, e) ...
- 2019年计算机技术与软件专业技术资格(水平)考试安排v
根据<关于2019年度专业技术人员资格考试计划及有关问题的通知>(人社厅发[2018]142号)要求,2019年度计算机技术与软件专业技术资格(水平)考试(以下简称计算机软件资格考试)安排 ...
- Python 处理异常栈模块——traceback 模块
异常捕捉 通常我们在项目中,针对异常的捕捉会使用 try + except,基本形式如下: try: # 主代码 except IndexError as e: # 索引异常时执行这里 logger. ...
- 【PHP】使用phpoffice/phpexcel导入导出数据
本例以thinkphp5.1为例 包地址: https://packagist.org/packages/phpoffice/phpexcel 使用: composer require phpoffi ...
- PMP 第5章错题总结
1.工作分解结构是项目团队与相关方之间沟通的有效工具之一2.控制账户是工作分解结构某个层次上的要素,以便与工作包一一对应3.项目范围说明书包括产品范围.产品验收标准.项目可交付成果.项目除外责任,以及 ...
- iOS - 获取当前时间日期星期几
//获取当前时间日期星期 - (NSString *)getCurrentTimeAndWeekDay { NSArray * arrWeek=[NSArray arrayWithObjects:@& ...
- jenkins自动化视频地址
1.腾讯课堂的视频 http://www.ctnrs.com/study.html 我的课程所有列表 2.百度网盘里面的
- Rancher容器目录持久化
最近一直在研究Rancher的持久化问题. 目前已找到两种方式实现Rancher里的容器文件实现持久化方法. 方法一: 配置映射(只适用单个文件,不适用于目录) 这个算不上是真正的持久化,只是相当于配 ...
- 如何优雅的使用telnet测试端口连通性
telnet命令是TELNET协议的用户接口,它支持两种模式:命令模式和会话模式,虽然telnet支持许多命令,但大部分情况下,我们只是使用它查看目标主机是否打开了某端口(默认是23). 其执行结果有 ...