1.定义

BFC(Block formatting context)即"块级格式化上下文"。它是一个独⽴的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部无关。
block-level box:display 属性为 block, list-item, table 的元素,会生成 block-level box。并且参与 block fomatting context;

2.BFC布局的规则:

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

3.如何生成BFC?

- 根元素;
- float属性不为none;
- position为absolute或fixed;
- display为inline-block, table-cell, table-caption, flex, inline-flex;
- overflow不为visible.

4.BFC的作用

- 清除内部浮动,防止父元素塌陷

.wrap{
/*overflow: hidden;*/如果不在wrap生成一个BFC,内部div浮动,其父div的高度就会塌陷.
width:300px;
border:1px solid red;
}
.inner{
float:left;
width:100px;
height:100px;
background-color: blue;
} .outer{
width:120px;
height:150px;
background-color: green;
}
<div class="wrap">
<div class="inner">inner</div>
</div>
<div class="outer">outer</div>

- 防止垂直方向margin 重叠

       .wrap{
width:300px;
border:1px solid red;
}
.top{ width:100px;
height:100px;
background-color: blue;
margin-bottom: 100px;
} .bottom{
margin-top: 100px;
width:100px;
height:100px;
background-color: green;
}
<div class="top">top</div>
<div class="bottom">bottom</div>

上面两个div的垂直间距在页面上其实只有100px;这是因为它们同处在根元素的BFC中,同一个BFC的两个相邻Box的margin会发生重叠(具体多少,从两个margin的值中取大值).解决方式的话就是让它们处于不同的BFC中,可以在其中一个div外面套一个div,外面的div设置overflow:hidden;

.wrap{
overflow: hidden;
width:300px;
border:1px solid red;
}
.top{ width:100px;
height:100px;
background-color: blue;
margin-bottom: 100px;
} .bottom{
margin-top: 100px;
width:100px;
height:100px;
background-color: green;
}
<div class="wrap">
<div class="top">top</div>
</div>
<div class="bottom">bottom</div>

总之,BFC就是一个独立的容器,它里面的元素和外面的元素互不影响.

BFC浅析的更多相关文章

  1. BFC与合并 浅析

    BFC BFC 全称 Block Formatting Context.每个渲染区域用formatting context表示,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用在正常流中的盒 ...

  2. 浅析CSS里的 BFC 和 IFC

    前端日刊 登录 浅析CSS里的 BFC 和 IFC 2018-01-29 阅读 1794 收藏 3 原链:segmentfault.com 分享到:   前端必备图书<Web安全开发指南 掌握白 ...

  3. 【转】浅析BFC及其作用

    1. 什么是BFC BFC(block formatting context):简单来说,BFC 就是一种属性,这种属性会影响着元素的定位以及与其兄弟元素之间的相互作用. 中文译为块级格式化上下文.是 ...

  4. 浅析CSS中的BFC和IFC

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

  5. BFC之浅析篇

    BFC是什么呢? 掏粪男孩? 当然不是咯.BFC,英文名Block formatting context,直译为“块级格式化上下文”.它是W3C CSS 2.1规范中的一个概念,决定了元素如何对内容进 ...

  6. 浅析BFC布局的概念以及作用

    BFC的概念以及作用 BFC的定义: (Block formatting context)直译为"块级格式化上下文".它是一个独立的渲染区域,只有Block-level box参与 ...

  7. 浅析前端BFC布局

    一.常见定位方案 二.BFC 概念 BFC 即 Block Formatting Contexts (块级格式化上下文),它属于上述定位方案的普通流. 它是一个独立的渲染区域,只有Block-leve ...

  8. 浅析BFC及其作用

    本文链接:https://blog.csdn.net/riddle1981/article/details/52126522

  9. BFC之宽度自适应布局篇

    说到自适应布局,我们曾在“抛砖引玉之宽度自适应布局”一文中学习过.当时的核心思想主要是利用float+margin的形式.利用块状元素的流体特性,然后计算出float元素的宽度,并赋予到块状元素的相应 ...

随机推荐

  1. [VC]获取本地程序的版本信息信息

    CString CQwerApp::IS_GetAppVersion(char *AppName) { ////需要加上version.lib在link里 CString AppVersion; // ...

  2. eclipse报错GC overhead limit exceed,卡顿

    在使用Eclipse的Build Project功能时,提示以下错误: An internal error occurred during: “Build Project”. GC overhead ...

  3. C07 模块化开发信息管理系统案例

    目录 需求分析 问题分析 开发阶段 需求分析 总体需求 学员信息管理系统支持以下功能 增加学员信息功能 删除学员信息功能 查询学员信息功能 修改学员信息功能 输出所有学员信息功能 退出系统 其他需求 ...

  4. sphinx中文入门指南 (转自sphinx中文站)

    Sphinx中文入门指南 wuhuiming<blvming在gmail.com>,转载请注明来源和作者 最后修改:2010年1月23日 1.简介 1.1.Sphinx是什么 1.2.Sp ...

  5. 第一本C语言笔记(下)

    11. 数组 (1)数组初始化时,如果初始化数字个数超过存储区个数,就忽略多余数字.如果初始化数字个数少于存储区个数,则后面的存储区自动被初始化为0. (2)数组名称可以代表数组里第一个存储区的地址. ...

  6. charles抓手机包

    charles抓手机包   如果是使用charles抓包.一定要tm的保证手机和电脑连的是一个网.   1.proxy setting,查看charles,端口 2.勾选   3.ipconfig,查 ...

  7. ccf 201712-3 Crontab(Python实现)

    一.原题 问题描述 试题编号: 201712-3 试题名称: Crontab 时间限制: 10.0s 内存限制: 256.0MB 问题描述: 样例输入 3 201711170032 201711222 ...

  8. thinkphp5中php7中运行会出现No input file specified. 这个你改个东西

    <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{RE ...

  9. 8.Yii2.0框架控制器接收get.post数据

    8.Yii2.0框架控制器接收get.post数据 一.get传参 <?php /** * Created by Haima. * Author:Haima * QQ:228654416 * D ...

  10. COMP9021--6.13

    1. break语句和continue语句都可以在循环中使用,且常与选择结构结合使用,以达到在特定条件满足时跳出循环的作用.break语句被执行,可以使整个循环提前结束.而continue语句的作用是 ...