BFC机制

BFC全称是Block Formatting Context,即块格式化上下文。它是CSS2.1规范定义的,关于CSS渲染定位的一个概念。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

BFC布局规则:

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

会生成BFC的元素:

  • 根元素或其它包含它的元素;
  • 浮动 (元素的float不为none);
  • 绝对定位元素 (元素的positionabsolutefixed);
  • 行内块inline-blocks(元素的 display: inline-block);
  • 表格单元格(元素的display: table-cell,HTML表格单元格默认属性);
  • overflow的值不为visible的元素;
  • 弹性盒 flex boxes (元素的display: flexinline-flex);

BFC的范围:

BFC的范围在MDN中是这样描述的。

A block formatting context contains everything inside of the element creating it that is not also inside a descendant element that creates a new block formatting context.

中文的意思一个BFC包含创建该上下文元素的所有子元素,但不包括创建了新BFC的子元素的内部元素。

插入一段代码方便理解

 1 <div class=‘div_1 BFC‘>
 2     <div class=‘div_2‘>
 3         <div class=‘div_3‘></div>
 4         <div class=‘div_4‘></div>
 5     </div>
 6     <div class=‘div_5 BFC‘>
 7         <div class=‘div_6‘></div>
 8         <div class=‘div_7‘></div>
 9     </div>
10 </div>

div_1创建了一个块格式上下文,这个上下文包括了div_2div_3div_4div_5。即div_2中的子元素也属于div_1所创建的BFC。但由于div_5创建了新的BFC,所以div_6div_7就被排除在外层的BFC之外。

这就代表着一个元素不能同时存在于多个BFC中。

BFC的一个最重要的效果是,让处于BFC内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。这是利用BFC清除浮动所利用的特性。

BFC的常用方式:

1.子级浮动导致父级高度塌陷

    <style type="text/css">
        .box{
            width: 900px;
            background: black;
        }
        .box1{
            height: 300px;
            width: 300px;
            background: red;
            float: left;
        }
        .box2{
            height: 300px;
            width: 300px;
            background: blue;
            float: left;
        }
    </style>
......
<div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
</div>

上面的代码定义了3个块,一个父级包含了两个子集,但是父级的背景颜色无法显示,是因为子集元素浮动导致了父级高度的塌陷。

在为box设置BFC后,box的高度才能找回来。

从而显示出正确的样式。

2.子级margin-top将父级带下 为父级触发BFC

要将黑色块中的小红块下移一点,直接使用了margin-top,结果黑块一起下移了。

    <style type="text/css">
        .box{
            width: 300px;
            height: 300px;;
            background: black;
        }
        .box1{
            height: 100px;
            width: 100px;
            background: red;
            margin-top: 50px;
        }
    </style>
......
<div class="box">
    <div class="box1"></div>
</div>

而设置了BFC后,就能正确的下浮红色块

3.子级超出父级范围 为父级触发BFC以决定如何处理

当子级因为设置了样式或者父级显示范围不够而无法完整显示时,设置hidden,scroll等属性来对子级显示进行设置。

时间: 2024-10-06 02:25:38

BFC机制的相关文章

前端面试题-HTML+CSS

引用GitHub 上 ltadpoles的前端面试 https://github.com/ltadpoles HTML部分 1. Doctype作用,HTML5 为什么只需要写<!DOCTYPE HTML> doctype是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义(DTD)来解析文档. <!DOCTYPE>声明必须是HTML文档的第一行,位于html标签之前. HTML5不基于SGML,所以不需要引用DTD. 在HTML5中&l

2019年前端技术需要注重掌握的

1.关于Html 1.html语义化标签的理解.结构化的理解:能否写出简洁的html结构:SEO优化. 2.h5中新增的属性,如自定义属性data.类名className等:新增表单元素:拖拽Drag. 3.h5中新增的API.修改的API.废弃的API稍作了解(离线存储.audio.video). 2.关于CSS 1.CSS选择器(三大特性). 2.BFC机制. 3.盒模型. 4.CSS模块化开发(封装):SCSS和LESS的使用. 5.屏幕适配以及页面自适应. 6.CSS3中新增的选择器.

CSS BFC和IE Haslayout

一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC float的值不为none. overflow的值不为visible. display的值为table-cell, table-caption, inline-block中的任何一个. position的值不为relative和static. 2.BFC的作用 不和浮动元素重叠 如果一个浮动元素后面跟着一

【转】css学习专题-BFC

css学习专题-BFC 转自:原文链接:css学习专题-BFC文章目录 BFC:Block Formatting Context. BFC就是一种布局方式,在这种布局方式下,盒子们自所在的 containing block 顶部起一个接一个垂直排列,水平方向上撑满整个宽度 (除非内部的盒子自己内部建立了新的 BFC). developer center上面有对BFC的一段描述: 一个 block formatting context 是web页面可视化CSS渲染的一个部分,是一块 block b

BFC and Haslayout

一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC float的值不为none. overflow的值不为visible. display的值为table-cell, table-caption, inline-block中的任何一个. position的值不为relative和static. 2.BFC的作用 不和浮动元素重叠 如果一个浮动元素后面跟着一

CSS定位布局display/float/position属性之间的关系/区别和如何使用取值行为机制

float: left|right; 可以自动排列自动折行, 但需要clear来配合清除浮动;display: inline-block; 有些时候可以替代float实现相同的效果.position: absolute|relative; 要配合top,left等定位; position: absolute会导致元素脱离文档流,被定位的元素等于在文档中不占据任何位置,在另一个层呈现,可以设置z-index.PS的图层效果就是position: absolute. float也会导致元素脱离文档流

CSS布局定位基础-盒模型和定位机制

1. 盒模型 2. 外边距合并 3. 定位机制 4. Float 5. Position:属性有哪些取值,它们的行为是什么? 无依赖绝对定位? 6. Display:常见属性值有哪些取值? 7. 对BFC规范的理解?        1. 盒模型 盒模型从内向外包括content,padding,border和margin. 从前往后分别是:border,content+padding,background-image,background-color,margin 盒模型有两种模式:W3C标准模

前端知识体系(一)浏览器机制以及进程线程的关系

看了一篇大神的博客,对前端学习体系突然明悟了起来.于是准备参考着大神的脚步开始体系化的学习.博客链接:https://segmentfault.com/a/1190000013662126. 很多时候被问到从输入url地址之后,会发生什么?很多时候回答都很笼统,没有自己的核心,所以学习一下大神的思路,以下总结的只是骨干,只有将每一个部分都学习到,这样才是一个知识体系,才能很好的理解上下结构与关系. 1. 从浏览器接收url到开启网络请求线程(这一部分可以展开浏览器的机制以及进程与线程之间的关系)

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个