首先字面翻译,这三个字母分别代表什么,box,formatting, context,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。

形象点就是说一种规范,规范什么呢?规范盒子内部元素不会影响到外部元素,或者和一种布局上的规范;不明白 ok,谈谈清除浮动的方法里面,有个叫overflow为hidden,他的原理是啥呢?就是BFC;那些元素会产生BFC呢,官方定义如下:

  • float的值不为none。
  • overflow的值不为visible。
  • display的值为table-cell, table-caption, inline-block中的任何一个。
  • position的值不为relative和static。

BFC的特性是啥呢?

  1. 内部的Box会在垂直方向,从顶部开始一个接一个地放置。
  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加
  3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  4. BFC的区域不会与float box叠加。
  5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
  6. 计算BFC的高度时,浮动元素也参与计算。

但是这些特性有啥用啊?当然解决问题的了,解决啥问题呢?上面说了布局的问题,可能还有人不懂,来几个例子演示下

第一个例子:对应的第2个特性。

代码

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<style>
.test{
overflow: hidden;
}
.div1{
width: 100px;
height: 100px;
background-color: black;
margin-bottom: 10px;
}
.div2{
width: 100px;
height: 100px;
background-color: blue;
margin-top: 10px;
} </style>
</head>
<body> <div class="div1"></div> <div class="div2"></div> </body>
</html>

  按常态思考,间距应该20px,其实不然这里是10px,怎么解决呢,各自生成独立BFC,为两个div各加一个父级并且父级overflow为hidden

第二个例子;关于第4个特性,代码如下

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<style>
.div1{
width: 100px;
height: 100px;
background-color: black;
float: left;
}
.div2{
width: 100px;
height: 100px;
background-color: blue;
} </style>
</head>
<body> <div class="div1"></div> <div class="div2"></div> </body>
</html>

根据第三个特性,得到结果是两个元素重叠了,那么咋解决呢,ok,div2加上overflow为hidden,这个时候也就是说div2成为一个独立的BFC,于是又遵循第三定理一次排放,

但是注意这里如果继续为div2添加margin的话,那么页面上的效果是只有当margin-left大于100时候才有作用,且效果是margin-left的效果,也说明实质上这里可能不是真正的不重叠效果,原有那个位置还在那儿

最后一个定理就是我们常用的overflow清楚浮动的原理了,因为overflow为hidden此时div变成一个BFC,于是遵循BFC定理,BFC内部元素计算高度是把浮动元素计算进去的从而达到清除浮动效果

BFC的表象认识的更多相关文章

  1. 深入理解BFC

    定义 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是格式化上 ...

  2. “fixed+relative==absolute”——对BFC的再次思考

    好久没写博客了,刚好今天跨年夜没约到什么妹子,在家宅着不如写点东西好了. 需求 昨天晚上,给公司年会做一个移动端的投票页面,遇到一个UI优化的问题: · 正文内容少于一屏时,投票提交按钮固定显示在页面 ...

  3. 关于CSS inline-block、BFC以及外边距合并的几个小问题

    CSS inline-block和BCF对于初学者来说,总是弄不太明白,下面记录下我在学习这块知识的过程中遇到的几个问题,供大家参考,有不足的地方,欢迎大家批评指正. 一.在什么场景下会出现外边距合并 ...

  4. 我对BFC的理解

    最初这篇文章打算回答寒冬大神的第一问,谈谈CSS布局.本来呢我以为布局主要涉及float跟display相关属性,以及他们的包含框.静态位置等等.后来看了大神的一片面试文章,嗯?这里怎么还有个BFC, ...

  5. CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法

    一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...

  6. 前端精选文摘:BFC 神奇背后的原理

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  7. BFC的形成条件和特性分析

    初学CSS时,我们学到很多有意思的CSS规则,比如外边距塌陷,还有浮动元素的一些特性等,其实这些规则背后都是BFC这个东西在控制,下面我们来看下BFC到底是什么. 什么是BFC BFC(Block f ...

  8. BFC布局

    这几天都没有写博客,自己的懒惰又要跑出来了,发觉不能再这样下去了,不然就什么都不想干了,然后将之前已经写得差不多的博客重新检视了一遍.这篇博客已经写得挺久的了,但是一直没有发布,现在补充了一些,也让自 ...

  9. 浅析CSS中的BFC和IFC

    1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...

随机推荐

  1. Runtime - ② - NSObject类

    首先,我们都知道NSObject是大多数类的根类,但是,这个类的是怎么实现的呢?我们可以去下载开源的Runtime源码,探究下NSObject类的实现. 1. NSObject.h文件 我们可以直接使 ...

  2. node多图或者单图上传

    <form id="form" enctype="multipart/form-data"> <input type="text&q ...

  3. u-boot-1.1.6第1阶段分析之start.S、lowlevel_init.S文件

    学习目标: 对start.S中每一行代码,都有基本了解 通过对start.S文件分析,对ARM920T架构的CPU的启动过程,有更清楚理解 U-boot属于两个阶段的Bootloader,第一阶段的文 ...

  4. 话说文件系统——aufs源码分析(三)

    1. linux中设备驱动的入口都是:module_init(xxx_init);里面注册的函数,对于文件系统来说也是一样的,对于aufs来说,就是aufs_init,具体如下 //用于描述aufs文 ...

  5. Spring Cloud学习入门路线方案

    Spring Cloud 为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路由.微代理.控制总线.一次性Token.全局锁.决策竞选.分布式会话和集群状态)操作的开发工具.本Spring ...

  6. C++与C#的多态

    C++ 多态 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数. 下面的实例 ...

  7. 20155207JAVA第十二周课堂练习

    20155207JAVA第十二周课堂练习 教材代码检查--P98 修改教材P98 Score2.java, 让执行结果数组填充是自己的学号 Arrays和String单元测试 在IDEA中以TDD的方 ...

  8. 20155214 2016-2017-2 《Java程序设计》第4周学习总结

    20155214 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 Chapter6 父类就是将多个类的相同代码提升(Pull Up) 子类继承父类会继承到pr ...

  9. 20155313 2016-2017-2 《Java程序设计》第一周学习总结

    20155313 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周的Java学习进入了一个全新的阶段,对于我这样的并没有每天花费时间钻研的同学来说,最后几 ...

  10. 20155321 2016-2017-2 《Java程序设计》第三周学习总结

    20155321 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 4.1 类与对象 定义类用class关键字,建立实例用new关键字 一个原始码中可有多个类定 ...