BFC——通俗理解什么是BFC
文章目录
- 常规流布局
- BFC的概念
- BFC的创建
- BFC的特性
- BFC的应用
- 解决高度坍塌的问题
- 相邻父子元素外边距合并问题
- 无视浮动盒子排序问题
- 总结
在理解BFC之前,我们需要先回顾常规流布局的概念(忘记或者还没看的小伙伴点击 前端CSS基础——常规流布局)
常规流布局
- 常规流块盒独占一行
- 常规流块盒在垂直方向依次摆放
- 常规流块盒父子元素外边距合并
- 常规流块盒排列无视浮动元素或者脱离常规流布局的元素
- 常规流块盒高度不计算浮动元素
BFC的概念
理解完常规流后,我们介绍下BFC,什么是BFC?BFC全称为:Block Formatting Context——块级格式化布局,简称BFC,它是一块独立的渲染区域,这个区域决定了常规流块盒的布局。 也就是说,BFC是一块区域,作用是决定常规流块盒的布局。
BFC的创建
BFC由某个HTML元素创建,下列元素会在其内部创建BFC区域。
- 根元素(<HTML>元素,<HTML>元素创建的BFC区域覆盖了所有网页的元素)
- 浮动定位或者绝对定位元素(float 和 position:absolute)
- overflow属性不为默认值(visible)的块盒元素
如图所示
注意到没有,每个元素创建的BFC都是互相独立的,元素A、B、C的BFC跟其他元素创建的BFC或者根元素创建的BFC都是相互独立。
BFC的特性
- 不同的BFC在进行渲染时互不干扰
- 创建BFC的元素隔绝了它内部BFC与外部BFC的联系,内部的渲染不会影响到外部
BFC的应用
解决高度坍塌的问题
在前面发布过的文章中,有提到解决高度坍塌的方法,那就是清除浮动(clear:botn)。现在我们了解BFC后,也能用BFC来解决高度坍塌问题。
.container{width: 100%;background-color: skyblue;margin-top: 20px;}.float{float: left;width: 200px;height: 100px;background-color: #008c8c;}
<body><div class="container"><div class="float"></div></div>
</body>
效果图
如图所示,父类元素的背景颜色并没有显示,我们打开浏览器的开发者模式,找到父类元素,可以看到高度为0,高度坍塌了。
在父类元素的样式中添加下列三种属性之一使其生成BFC
- 浮动元素
- 绝对定位
- overflow(最常用,可不改变父类元素的布局方式)
.container{width: 100%;background-color: skyblue;margin-top: 20px;overflow: hidden;//添加属性}
得到效果图
这里就是因为BFC的特性,互相独立的BFC互不干扰。当子类元素超出父类元素时会造成对其他BFC的干扰,所以需要将子类元素包含在自己的BFC中,所以自动扩展了高度。
相邻父子元素外边距合并问题
.container{width: 100%;height: 300px;background-color: skyblue;margin-top: 20px;}.float{width: 200px;height: 100px;background-color: #008c8c;margin: 30px;}<div class="container"><div class="float"></div></div>
运行上面代码
可以看到,子元素的左右下外边距都能显示出效果,但是子类元素不显示上外边距效果,这是因为子类的上外边距跟父类元素的上外边距合并了,这里用BFC处理,在父类中创建BFC。
.container{width: 100%;height: 300px;background-color: skyblue;margin-top: 20px;overflow: hidden;}
运行得到
这是因为父类元素处于根元素创建的BFC里,而子类元素处于父类元素创建的BFC里,所以尽管它们外边距相邻,但是它们所处BFC不同,所以它们的渲染是互不干扰。
无视浮动盒子排序问题
我们先来运行下面代码
.container{height: 300px;background-color: skyblue;margin-top: 20px;/* overflow: hidden; */}.float{float: left;width: 200px;height: 100px;background-color: #008c8c;margin: 30px;}<div class="float"></div><div class="container"></div>
得到如下效果
因为container元素是常规流盒子,而float元素是浮动盒子,常规流盒子排列会无视浮动盒子。 在container元素创建BFC,再看看效果。
.container{height: 300px;background-color: skyblue;margin-top: 20px;overflow: hidden;}
运行
这是因为BFC是一块独立的区域,它一定不能跟外部环境(float)互相干扰,所以在排列的时候一定会避开浮动盒子float。
总结
- 创建BFC的元素,它的自动高度会计算浮动元素
- 创建BFC的元素不会和它的子元素进行相邻外边距合并
- 创建BFC的元素,它的边框盒不会与浮动元素重叠。
BFC——通俗理解什么是BFC相关推荐
- 通俗理解条件熵-数学
就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...
- 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积
20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...
- 通俗理解tf.name_scope()、tf.variable_scope()
前言:最近做一个实验,遇到TensorFlow变量作用域问题,对tf.name_scope().tf.variable_scope()等进行了较为深刻的比较,记录相关笔记: tf.name_scope ...
- dft变换的两幅图_离散傅立叶变换DTFT、DFT和FFT在工程与数学结合的通俗理解
1.离散时间傅里叶变换DTFT 何为DTFT?就是对连续时间非周期信号进行抽样(乘积),得到的离散时间非周期信号再求傅里叶变换的过程就是DTFT.其实等同于信号频谱与脉冲信号频谱的卷积,这样得到的就是 ...
- 通俗理解kaggle比赛大杀器xgboost + XGBOOST手算内容 转
通俗理解kaggle比赛大杀器xgboost 转 https://blog.csdn.net/v_JULY_v/article/details/81410574 XGBOOST有手算内容 htt ...
- 通俗理解注意力机制中的Q、K和V表示的具体含义
https://www.jianshu.com/p/7a61533fd73b 通俗理解讲解一 以翻译为例 source:我 是 中国人 target: I am Chinese 比如翻译目标单词为 I ...
- 对于随机森林的通俗理解
原文:http://blog.csdn.net/mao_xiao_feng/article/details/52728164 对于随机森林的通俗理解 一.决策树 决策树是机器学习最基本的模型,在不考虑 ...
- CNN笔记:通俗理解卷积神经网络
通俗理解卷积神经网络(cs231n与5月dl班课程笔记) http://blog.csdn.net/v_july_v/article/details/51812459 1 前言 2012年我在北京组织 ...
- oracle的redo和undo,OracleUndoRedo通俗理解
OracleUndoRedo通俗理解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 什么是REDO REDO记录tran ...
最新文章
- 张一鸣的微博世界-产品篇二
- linux查看日志的几种命令,Linux查看日志三种命令(转载)
- Castor映射java对象
- 算法训练 K好数(dp+动态规划)
- 历史上的昨天和今天(zz)
- git(1)---git介绍
- apk、ipa包size优化晋级手段
- 【Oracle】ORA-27369: job of type EXECUTABLE failed with exit code: Key has expired
- python threadPool 与 multiprocessing.Pool
- CSS学习总结(6)——定位与布局
- sap快捷搜索菜单栏
- android APN的打开与关闭
- Apache Pulsar 中文社区先锋奖与年度优秀案例出炉!
- Ubuntu(Linux) 磁盘分区方案
- oracle 限制条数的查询
- 软件开发常见的开发方向
- 计算机外联管理办法,外联部管理制度
- 【规范】C/C++注释格式
- Day 3 (云计算-zsn)
- python二进制和图片转换
热门文章
- 别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2021年最新攻略)
- C++ L1-034. 点赞
- Leetcode刷题java之1079. 活字印刷
- html 水平分割,HTML设置水平分割线
- 亚马逊ERP贴牌OEM代理贴牌是什么意思 起到一个什么样的作用
- react项目在ie11浏览器运行报错Instance method `debug.destroy()` is deprecated and no longer does anything
- java 秒表暂停_java – 停止秒表
- AWS 中的 Linux 堡垒主机
- 数据库原理与应用——引言(一)
- 《中华人民共和国数据安全法》解读(3)