BFC的定义

Block Formatting Context,中文直译为块级格式上下文。BFC就是一种布局方式,在这种布局方式下,盒子们自所在的containing block顶部一个接一个垂直排列,水平方向上撑满整个宽度(除非内部盒子自己建立了新的BFC)。两个相邻的BFC之间的距离由margin决定。在同一个BFC内部,两个垂直方向相邻的块级元素的margin会发生“塌陷”。

文档这里也间接指出了垂直相邻盒子margin合并的解决办法:就是给这两个盒子也创建BFC。

通俗一点,可以把BFC理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

如何创建BFC

总结一下就是:

  • float属性不为none
  • overflow不为visible(可以是hidden、scroll、auto)
  • position为absolute或fixed
  • display为inline-block、table-cell、table-caption

BFC的作用

1. 清除内部浮动
我们在布局时经常会遇到这个问题:对子元素设置浮动后,父元素会发生高度塌陷,也就是父元素的高度变为0。解决这个问题,只需要把把父元素变成一个BFC就行了。常用的办法是给父元素设置overflow:hidden。
2. 垂直margin合并
在CSS当中,相邻的两个盒子的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。
折叠的结果:

  • 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
  • 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
  • 两个外边距一正一负时,折叠结果是两者的相加的和。
    这个同样可以利用BFC解决。关于原理在前文已经讲过了。

3. 创建自适应两栏布局
在很多网站中,我们常看到这样的一种结构,左图片+右文字的两栏结构。

//CSS
*{margin: 0;padding: 0;}.box {width:300px;border: 1px solid #000;}.img {float: left;}.info {background: #f1f1f1;color: #222;}
//HTML
<div class="box"><img src="03.jpg" alt="" class="img"><p class="info">信息信息信息信息信息信息</p></div>

一般情况下,它是这样的

图1

但是当文字多了以后...

图2

显然,这是文字受到了图片浮动的影响。当然,如果你想做文本绕排的效果,浮动是不二之选。不过在这里,这显然不是我们想要的。此时我们可以为P元素的内容建立一个BFC,让其内容消除对外界浮动元素的影响。给文字加上overflow:hidden

图3

两栏布局就完成了。我们改变图片的大小:

图4

两栏布局的结构依然没有改变,如此就实现了两栏自适应布局。

作者:苏星河
链接:https://www.jianshu.com/p/acf76871d259
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:苏星河
链接:https://www.jianshu.com/p/acf76871d259
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

【CSS】深入理解BFC原理及应用相关推荐

  1. CSS: 深入理解BFC和Margin Collapse (margin叠加或者合并外边距)

    BFC的理解与应用 首先我们来看看w3c规范对BFC的解释,其实对于这种概念的学习上,我们总是建议首先寻找官方的定义,因为原则上来说官方的才是最权威和正确的,而且还比较详细,千万不要因为看到英文就畏惧 ...

  2. 10 分钟理解 BFC 原理

    一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: 普通流 (normal flow) 在普通流中,元素按照其在 HTML 中的先后位置至 ...

  3. bfc是什么_全面分析总结BFC原理及实践

    前言 经常在面试中被问到"如何清除浮动?"."为什么 overflow: hidden 可以清除浮动?"等等比较基础的问题.虽然这些题目案在各种写面试题的文章中 ...

  4. CSS进阶(10)—— 深入理解BFC结界

    本章继续来探讨CSS世界的流破坏和流保护,延续的是上一章float的内容,在上一章中我们已经知道了clear属性并不是真正的清除浮动,本章将继续深入探索,引入BFC结界的概念.如果对浮动和清浮动属性还 ...

  5. CSS深入理解流体特性和BFC特性下多栏自适应布局

    一.块状元素的流体特性与自适应布局 块状元素像放在容器中的水流一样,内容区域会随着margin, padding, border的出现自动填满剩余空间,这就是块状元素的流体特性. 来一个小实验: di ...

  6. 学习笔记之CSS深入理解(慕课网 张鑫旭主讲)

    一.CSS深入理解之border 1. border-width不支持百分比 受语义和使用场景决定的,不会因为设备大而边框变大的 2. border-style属性 border-style:dott ...

  7. 深入理解浏览器原理和架构|硬核

    本文用47张图带你了解「浏览器的发展史」.「浏览器的架构」.「浏览器的基本原理」以及 「浏览器的其它小知识」 ???? 正文开始 浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示HTML文档. ...

  8. css清除浮动的原理

    最近学习css发现了高度塌陷时候要清除浮动,为了理解清楚浮动原理,网上找了不少资料,发现都写的不是很清楚,而且都是一模一样的内容,我在里分享一下我对清楚浮动原理的理解, 如果你已经很了解什么是浮动和浮 ...

  9. CSS深入理解之line-height

    以下文字整理自慕课网--张鑫旭的<CSS深入理解之line-height>. 一.line-height的定义 line-height,又称行高,指的是两行文字基线之间的距离,又可以称为这 ...

最新文章

  1. 《精通Unix下C语言编程与项目实践》目录
  2. 启示录 产品经理 pdf_3个月,从公司前台转行互联网产品经理
  3. Django 搭建CMDB系统完整[1](用户登录)
  4. windows 搭建python 虚拟环境 写程序_Windows下搭建Python虚拟环境
  5. no need for pictures
  6. 错误记录:expected single matching bean but found 2
  7. mysql 查看表是否存在_MySQL优化篇二
  8. python unpack_python中struct.pack()函数和struct.unpack()函数
  9. 20220307:力扣第283场周赛(上)
  10. 017—mysql问答
  11. Java 2实用教程(第5版)实验指导与习题解答 第3章-上机实践-分支与循环语句
  12. 02_函数定义及使用函数
  13. android模拟器pc版知乎,知乎答题王电脑版下载 安卓模拟器图文安装教程
  14. 思科 | 无线局域网组网实验
  15. iapp模块的使用教程,iapp怎么调用api
  16. saiku 升级备份恢复
  17. 恒星绕太阳转css,CSS3 宇宙/恒星/小行星动画
  18. ip解析经纬度,基站定位经纬度,用就完事了
  19. 懒汉延迟加载设计模式反射注解
  20. 肖星老师《一本书读懂财报》经典语句摘录(下)实战篇

热门文章

  1. 黑马的ssm课程中class报错:Description : The fully qualified name of the bean‘s class, except if it serves onl
  2. 受伤的皇后 蓝桥杯 python
  3. Oracle EBS 应付发票 接口导入 API
  4. tensorflow learning rate的设置
  5. 泛微发布全程数字化项目管理平台-事井然
  6. 二维码生成与解析(使用ThoughtWorks.QRCode)
  7. 沈阳皮童:几个小窍门专治皮鞋变形
  8. 选择 25k 的 996 还是 18k 的 965
  9. java 面向对象之构造器:
  10. c++自定义sort()函数的排序方法