文章目录

  • 常规流布局
  • BFC的概念
  • BFC的创建
  • BFC的特性
  • BFC的应用
    • 解决高度坍塌的问题
    • 相邻父子元素外边距合并问题
    • 无视浮动盒子排序问题
  • 总结

在理解BFC之前,我们需要先回顾常规流布局的概念(忘记或者还没看的小伙伴点击 前端CSS基础——常规流布局)

常规流布局

  • 常规流块盒独占一行
  • 常规流块盒在垂直方向依次摆放
  • 常规流块盒父子元素外边距合并
  • 常规流块盒排列无视浮动元素或者脱离常规流布局的元素
  • 常规流块盒高度不计算浮动元素

BFC的概念

理解完常规流后,我们介绍下BFC,什么是BFC?BFC全称为:Block Formatting Context——块级格式化布局,简称BFC它是一块独立的渲染区域,这个区域决定了常规流块盒的布局。 也就是说,BFC是一块区域,作用是决定常规流块盒的布局。

BFC的创建

BFC由某个HTML元素创建,下列元素会在其内部创建BFC区域。

  • 根元素(<HTML>元素,<HTML>元素创建的BFC区域覆盖了所有网页的元素)
  • 浮动定位或者绝对定位元素(floatposition:absolute
  • overflow属性不为默认值(visible)的块盒元素

如图所示

注意到没有,每个元素创建的BFC都是互相独立的,元素A、B、C的BFC跟其他元素创建的BFC或者根元素创建的BFC都是相互独立。

BFC的特性

  1. 不同的BFC在进行渲染时互不干扰
  2. 创建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相关推荐

  1. 通俗理解条件熵-数学

    就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...

  2. 通俗理解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 ...

  3. 通俗理解tf.name_scope()、tf.variable_scope()

    前言:最近做一个实验,遇到TensorFlow变量作用域问题,对tf.name_scope().tf.variable_scope()等进行了较为深刻的比较,记录相关笔记: tf.name_scope ...

  4. dft变换的两幅图_离散傅立叶变换DTFT、DFT和FFT在工程与数学结合的通俗理解

    1.离散时间傅里叶变换DTFT 何为DTFT?就是对连续时间非周期信号进行抽样(乘积),得到的离散时间非周期信号再求傅里叶变换的过程就是DTFT.其实等同于信号频谱与脉冲信号频谱的卷积,这样得到的就是 ...

  5. 通俗理解kaggle比赛大杀器xgboost + XGBOOST手算内容 转

    通俗理解kaggle比赛大杀器xgboost    转 https://blog.csdn.net/v_JULY_v/article/details/81410574 XGBOOST有手算内容 htt ...

  6. 通俗理解注意力机制中的Q、K和V表示的具体含义

    https://www.jianshu.com/p/7a61533fd73b 通俗理解讲解一 以翻译为例 source:我 是 中国人 target: I am Chinese 比如翻译目标单词为 I ...

  7. 对于随机森林的通俗理解

    原文:http://blog.csdn.net/mao_xiao_feng/article/details/52728164 对于随机森林的通俗理解 一.决策树 决策树是机器学习最基本的模型,在不考虑 ...

  8. CNN笔记:通俗理解卷积神经网络

    通俗理解卷积神经网络(cs231n与5月dl班课程笔记) http://blog.csdn.net/v_july_v/article/details/51812459 1 前言 2012年我在北京组织 ...

  9. oracle的redo和undo,OracleUndoRedo通俗理解

    OracleUndoRedo通俗理解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 什么是REDO REDO记录tran ...

最新文章

  1. 张一鸣的微博世界-产品篇二
  2. linux查看日志的几种命令,Linux查看日志三种命令(转载)
  3. Castor映射java对象
  4. 算法训练 K好数(dp+动态规划)
  5. 历史上的昨天和今天(zz)
  6. git(1)---git介绍
  7. apk、ipa包size优化晋级手段
  8. 【Oracle】ORA-27369: job of type EXECUTABLE failed with exit code: Key has expired
  9. python threadPool 与 multiprocessing.Pool
  10. CSS学习总结(6)——定位与布局
  11. sap快捷搜索菜单栏
  12. android APN的打开与关闭
  13. Apache Pulsar 中文社区先锋奖与年度优秀案例出炉!
  14. Ubuntu(Linux) 磁盘分区方案
  15. oracle 限制条数的查询
  16. 软件开发常见的开发方向
  17. 计算机外联管理办法,外联部管理制度
  18. 【规范】C/C++注释格式
  19. Day 3 (云计算-zsn)
  20. python二进制和图片转换

热门文章

  1. 别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2021年最新攻略)
  2. C++ L1-034. 点赞
  3. Leetcode刷题java之1079. 活字印刷
  4. html 水平分割,HTML设置水平分割线
  5. 亚马逊ERP贴牌OEM代理贴牌是什么意思 起到一个什么样的作用
  6. react项目在ie11浏览器运行报错Instance method `debug.destroy()` is deprecated and no longer does anything
  7. java 秒表暂停_java – 停止秒表
  8. AWS 中的 Linux 堡垒主机
  9. 数据库原理与应用——引言(一)
  10. 《中华人民共和国数据安全法》解读(3)