在布局中一般就三种定位方式:普通流、浮动、绝对定位。

  BFC,译过来叫作“块级格式化上下文”,听起来贼高大上,它属于普通流的一种。通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部的布局。

  假如我在body里面写两个div如下:

<body>
<div></div>
<div></div>
</body>

  给他们都添加如下样式:

    width: 100px;
height: 100px;
background: lightblue;
margin: 100px;

  那么,在同一个BFC(也就是body)下,它们会发生外边距的合并,也就是说,两个方块的垂直距离为100px;所以如果你想避免这两个盒子的样式相互影响,把它们分别放在不同的容器就好了。把代码改成这样:

  

  注意:这里的div作为父级容器要设置其overflow:hidden来触发BFC特性,如此一来,两个p标签的垂直高度就变成了200px。

  我们都知道,如果父级容器不设置高度,而它包含的子元素又浮动,那就会使得父级容器的高度发生坍塌,变为0,这还是挺恐怖的。为了避免这个问题,又不想把高度写死,可以设置父级容器的overflow:hidden来触发自身的BFC特性,就好像开了个大招,因为BFC的特性中是会包裹浮动元素的,而BFC又是对外不影响的。所以在保住自身高度的同时也避免了自己子元素的浮动对外部造成影响,这就是父级容器设置overflow:hidden可以清除浮动的原理。

  总结:给父级容器添加overflow:hidden,一键启动其BFC特性,可以包裹自身的所有样式,包括浮动、边距等,免除对外界样式的影响。

  追加: 触发BFC的几种条件:

  1,父级容器overflow不为visible。

  2,父级容器display为flex/grid。

  2,父级元素或自身display为inline-block。

  3,自身是绝对定位(absolute)或固定定位(fixed)。

  4,自身的float不为none。

  

BFC是个什么概念?的更多相关文章

  1. 前端笔记之CSS(下)浮动&BFC&定位&Hack

    一.浮动 1.1 各个语言的主要知识点 HTML:标签语义化(那么怎么样布局才是合理的?没有绝对的对和错) CSS: 样式: 布局: 标准流(标准文档流.普通文档流):盒子模型(width/heigh ...

  2. 什么是BFC(Block Formatting Context)

    原文:https://segmentfault.com/a/1190000012221820 https://www.w3.org/TR/CSS2/visuren.html#block-formatt ...

  3. BFC 从了解到放弃

    最近工作中我突然产生了一个想法,就如我们人类面临的终极问题一般,我从哪里来?我到哪里去?在撸代码进行CSS布局的时候,我会去想,我为什么这么做?,为什么浮动的元素要用overflow?,为什么要用cl ...

  4. CSS 潜藏着的BFC

    在写样式时,往往是添加了一个样式,又或者是修改了某个属性,就达到了我们的预期. 而BFC就潜藏在其中,当你修改样式时,一不小心就能触发它而毫无察觉,因此没有意识到BFC的神奇之处. 什么是BFC(Bl ...

  5. BFC 浅谈

    写在前面 Block formatting context (块级格式化上下文) 页面文档由块block构成 每个block在页面上占据自己的位置使用新的元素构建BFC overflow:hidden ...

  6. BFC理解

    Block formatting context (块级格式化上下文) 页面文档由块block构成 每个block在页面上占据自己的位置 使用新的元素构建BFC overflow:hidden | a ...

  7. BFC 是什么?

    BFC 是什么? 本文写于 2020 年 7 月 17 日 总有同学问我:"这个 div 为什么会插出来?为什么 float 的 div 这么不好操作?".这其实就是没有深入理解 ...

  8. CSS十问——好奇心+刨根问底=CSSer

    最近有时间,想把酝酿的几篇博客都写出来,今天前端小学生带着10个问题,跟大家分享一下学习CSS的一些体会,我觉得想学好CSS,必须保持一颗好奇心和刨根问底的劲头,而不是复制粘贴,得过且过.本人能力有限 ...

  9. 有时summary的状态和details是否有open属性有关

    用过mac的同学对这个界面一定很熟悉,因为这个界面和我们今天要说的details有很多相近的地方,首先,其有折叠效果,用户可以自己选择打开或关闭哪一个,其次,当我们直接打开的时候,默认会有几个标签是打 ...

随机推荐

  1. mongooDb链接javaapi

    mongodb链接有多种:所以不同链接下的api也不太一样. 1.api比较全面 public void query2(){ String mondburl = Config.getInstance( ...

  2. 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...

    今天Redis服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently no ...

  3. 把mysql中的记录封装成集合

    package cn.hu3.com;import cn.hu1.com.JdbcUtils;import java.sql.Connection;import java.sql.PreparedSt ...

  4. MIUI 10以上版本通用线刷ROOT方法

    1.高版本系统解锁 (解锁工具下载) http://www.miui.com/unlock/index.html 注意事项:登陆解锁工具的账号必须是登陆小米手机的账号 解锁步骤在解锁工具上有说明,就两 ...

  5. MFC中添加控制台输出

    可以在CWinApp的InitInstance()中调用下面的函数,以生成控制台: #include <io.h> #include <fcntl.h> void InitCo ...

  6. yum安装常用工具命令

    树状目录结构(tree) yum install tree 上传下载工具(rz和sz) yum install lrzsz -------------------------------------- ...

  7. 2019浙大校赛--E--Potion(签到水题)

    一丢丢思维就ok 题目大意: 魔法师要煮药,有n个等级的药,所需要的药物为a1,a2...an,意为第n级需要多少药物,下一行为库存的不同等级药物,药物可降级使用不可升级. 思路:从高级药物开始解,把 ...

  8. Node selenium-webdriver

    Selenium-webdriver基本使用 准备 ① node.js 的安装和配置略 ② Selenium-webdriver npm install -save selenium-webdrive ...

  9. gitlab 之 项目管理

    首先git是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常 ...

  10. Android中系统键盘的自动弹出、隐藏和显示

    一.需求 在开发Android app过程中经常用到EditText,需要在界面加载完成后自动弹出系统键盘,更希望可以控制键盘的隐藏和显示,本文介绍其实现方法. 二.系统键盘的自动弹出 @Overri ...