BFC(block formating context),翻译过来就是块级格式化上下文。我们可以理解为:BFC就是一个Block-level Box内部的Block-level Box布局的一系列规则。下面我们列出将有哪些布局规则并且举例解释说明。

布局规则:

  1. 内部的Box会在垂直方向,从顶部开始一个接一个地放置。(即每个块级元素独占一行)

  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加。(垂直方向上margin塌陷)

  3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。(规则1产生的原因)

  4. BFC的区域不会与float box重叠。

  5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

  6. 计算BFC的高度时,浮动元素也参与计算。(overflow:hidden清除浮动远离)

如何产生BFC:

  1. float 除了none以外的值

  2. overflow 除了visible 以外的值(hidden,auto,scroll )

  3. display (table-cell,table-caption,inline-block, flex, inline-flex)

  4. position值为(absolute,fixed)

规则解释说明:

  规则2: Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加。(垂直方向上margin塌陷)

 <!-- 样式 -->
<style>
.item {
width: 100px;
height: 100px;
background-color: #f44;
margin: 50px;
}
</style> <!-- 结构 -->
<div class="item"></div>
<div class="item"></div>

上图中两个元素上下都有50px的margin,但是由于规则2,显示出来的间隔只有50px;并没有我们像我们想象中出现100px的间隔。这种现象叫做margin塌陷。并且当上下margin不一致时,取较大的那个值。

规则3: 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。(规则1产生的原因)

规则4: BFC的区域不会与float box重叠。

 <!-- 样式 -->
<style>
.aside {
width: 100px;
height: 100px;
background-color: #f66;
float: left;
} .main {
width: 300px;
height: 300px;
background-color: #fcc;
/*overflow: hidden;*/
}
</style> <!-- 结构 -->
<div class="container">
<div class="aside"></div>
<div class="main"></div>
</div>

当我们注释掉overflow: hidden时:此时两个div满足规则3,与外层border相连,由于浮动的div不占标准文档流位置,所有出现重叠现象;(第一幅图)

当我们添加上overflow: hidden时;此时class为main的div产生BFC,不与float元素重叠,满足规则4,所以class为main的div紧挨浮动的div。(第二幅图)

                         

详细BFC讲解可以参考:http://sentsin.com/web/529.html

BFC详解的更多相关文章

  1. CSS之BFC详解

    What:了解该知识点的概念,本质以及有关牵扯到的相关知识概念 BFC这个东西说常见的话你可能不觉得,但是你肯定会常用,也许你在用的时候也没想到BFC这东西.网上也有很多写这些东西的文章,但是自己写一 ...

  2. CSS中的BFC详解

    引言: 这篇文章是我对BFC的理解及总结,带你揭开BFC的面纱.你将会知道BFC是什么,形成BFC的条件,BFC的相关特性,以及他的实际应用. 一.何为BFC BFC(Block Formatting ...

  3. css详解3

    推荐学习链接:css盒模型 1.盒模型的常用属性 1.1.pading <html lang="en"> <head> <meta charset=& ...

  4. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  5. dos下的edit命令使用详解

    dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...

  6. 详解 清除浮动 的多种方式(clearfix)

    说明 本文适合知道HTML 与 CSS基础知识的读者,或者想要了解清除浮动背后原理的读者! 1.什么是浮动 首先我们需要知道定位 元素在页面中的位置就是定位,解决问题之前我们先来了解下几种定位方式 : ...

  7. CSS2.1SPEC:视觉格式化模型之width属性详解(下)

    本文承接CSS2.1SPEC:视觉格式化模型之width属性详解(上),继续分析CSS视觉格式化模型中width以及相关值的计算问题: 注:与上节不同,本节的demo中由于出现了float,absol ...

  8. 详解CSS float属性

    CSS中的float属性是一个频繁用到的属性,对于初学者来说,如果没有理解好浮动的意义和表现出来的特性,在使用的使用很容易陷入困惑,云里雾里,搞不清楚状态.本文将从最基本的知识开始说起,谈谈关于浮动的 ...

  9. 详解CSS float属性(转)

    详解CSS float属性   阅读目录 基础知识 float的详细细节 float特殊情况 clear属性 清除浮动 float的应用 总结 CSS中的float属性是一个频繁用到的属性,对于初学者 ...

随机推荐

  1. Java语言跨平台原理

    Java语言有一个很重要的原理叫:跨平台性. 在介绍Java语言的跨平台性之前首先要介绍一个很重要的概念:JVM: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...

  2. 简洁、轻量的前端UI框架 - Hbook

    Simple, lightweight front-end UI framework Get Start : http://www.bookcss.com Introduce Hbook focus ...

  3. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  4. Servlet的监听

    Servlet监听 在<Servlet和Jsp>中我们使用了ServletConfig获取Servlet的初始配置,用ServletContext来获取整个Web应用的初始配置,但如果需要 ...

  5. Java日志工具之Log4J

    Log4J与java.util.logging.Logger的使用方式出奇的相似,因此如果先看这篇文章<Java日志工具之java.util.logging.Logger>在来用Log4J ...

  6. 使用Task的一些知识优化了一下同事的多线程协作取消的一串代码

    最近在看一个同事的代码,代码的本意是在main方法中开启10个线程,用这10个线程来处理一批业务逻辑,在某一时刻当你命令console退出的时候,这个 时候不是立即让console退出,而是需要等待1 ...

  7. 1712: [Usaco2007 China]Summing Sums 加密

    1712: [Usaco2007 China]Summing Sums 加密 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 338  Solved: 12 ...

  8. React 进修之路(2)

    生命周期 React中的组件被看成是一个有生命的个体,因此赋予了声明周期的概念,就是为了定义组件所处的状态 React中组件共分三大周期,11个阶段 创建期(少年,成长)组件创建时候进入的时期 get ...

  9. python IP地址转16进制

    python IP地址转16进制 第一种方法: 通过socket.inet_aton实现 import socket from binascii import hexlify ary='192.168 ...

  10. Python中三种基本结构的语句

    选择语句 if 条件判断 : # 条件可以加括号也可以不加括号 -- else: -- Python中没有switch语句这是可以使用if exp:.... elif exp:来代替 if 判断条件1 ...