最近在学习BootStrap框架,发现里面清除浮动的类 .clearfix 跟平时自己用的不太一样。它的样式是这样的:

.clearfix:before
{
content: " ";
display: table;
}
.clearfix:after
{
content: " ";
display: table;
clear: both;
}
    用:befor和:after伪元素清除浮动是我熟悉的,不过一般我使用display:block而非display:talbe. 在查找有关资料时候发现了Block Formatting Contexts(块级格式化上下文)的概念,以前没有接触过,学习过后对CSS布局又有了更深层的认识,觉得有必要记录下这一关键的知识点。

一、 什么是Block Formatting Contexts?

       BFC可以看做是一个容器,在这个容器中的元素与外部元素隔离,也就说容器内的元素不会影响外部的元素。同时BFC还具有普通容器(block box)没有的特性,比如它可以包含浮动的元素,不会出现高度塌陷的问题。BFC是页面流的一部分。

二、怎样触发Block Formatting Contexts?

      当给某一元素添加以下样式中的任意一个时,就触发了BFC,也就是说这个元素处在一个独立的BFC容器中,与其他元素隔离。

1. float: left/right/inherit  也就是除none以外的浮动元素

2. position: absolute/fixed 绝对定位元素,fixed是absolute的一个子类,也属于绝对定位

3. display: inline-block/table-cell/table-captions 需要注意的是display: table本身不可以触发BFC,但是由于table会产生匿名盒,而匿名盒的display: table-cell特性会触发BFC,产生新的格式化上下文。

4. overflow: hidden/auto/scroll/inherit

三、Block Formatting Contexts有哪些特性?

1. 阻止外边距折叠

     正常情况下,两个相邻的div块都有外边距时,外边距会合并折叠,而一旦一个元素触发了BFC,处在一个独立的格式化上下文中时,它的外边距不会和相邻的块级元素折叠。

举个栗子:

<div style = "background: #F3C; margin: 15px">
<p style="margin: 15px">div1 margin:15px</p></div>
<div style="background: #FF3; margin: 15px"><p style="margin: 15px">div2 margin:15px</p></div>
<div style="overflow: hidden; background: #6F0; margin: 15px"><p style="margin: 15px">div3 margin:15px; overflow: hidden</p></div>

它的效果图是这样的:

        图中的div1、div2、div3处于同一个格式化上下文中,所以它们的外边距15px都折叠了,表现为这三个div块的间距都是15px而不是30px。div1和div2没有触发BFC,所以它们与其子元素<p>也处于同一个格式化上下文中,所以<p>元素的外边距与其父元素的外边距连在一起了,于是又进行了折叠。这里需要注意的是如果给外部div加了边框则其与子元素p的外边距折叠无效,因为这两个外边距没有连在一起,中间隔了div的border。

        div3添加了overflow: hidden样式,触发了BFC,所以它内部形成了一个新的格式化上下文,这样它的子元素p就处在这个新的格式化上下文中,所以它的外边距没有与外部的div3的外边距折叠。

Block Formatting Contexts (块级格式化上下文) 详解的更多相关文章

  1. 详说 Block Formatting Contexts (块级格式化上下文)

    在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ,也就是本文的主角 Block Formatting Contexts (块级格式化上下文),本文会基于上文关于 BFC 的部 ...

  2. Block Formatting Contexts (块级格式化上下文) 使用参考

    转自:http://kayosite.com/block-formatting-contexts-in-detail.html 在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ...

  3. BFC 详说 Block Formatting Contexts (块级格式化上下文)

    定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Normal Flow) .浮动 (Floats) 和绝对定位 (Absolute Positioning) ,下面分别对 ...

  4. BFC --- Block Formatting Context --- 块级格式化上下文

    虽然知道块级格式化上下文是什么东西,但要我把这个东西给说清楚,还真的不是一件容易的事儿,所以这篇文章我就要说说清楚到底什么使传说中的BFC,即块级格式化上下文. 一.BFC的通俗理解 通俗的理解 -- ...

  5. Block formatting context(块级格式化上下文)

    今天看到豆瓣面试官的一篇文章,讲到关于CSS中的一个知识点:Block formatting context  ,感觉这个确实挺有用,同时我也挺赞同作者的一些观点的,这里就不展开谈我的感受了, 此文只 ...

  6. BFC(Box,Formatting,Context) —— 块级格式化上下文

    Box:CSS布局的基本单位 Formatting context是页面中的一块渲染区域,最常见的是BFC和IFC,CSS3增加了GFC和FFC BFC定义:块级格式化上下文,它是一个独立的渲染区域, ...

  7. css中margin重叠和一些相关概念(包含块containing block、块级格式化上下文BFC、不可替换元素 non-replaced element、匿名盒Anonymous boxes )

    平时在工作中,总是有一些元素之间的边距与设定的边距好像不一致的情况,一直没明白为什么,最近仔细研究了一下,发现里面有学问:垂直元素之间的margin有有互相重叠的情况:新建一个BFC后,会阻止元素与外 ...

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

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

  9. 块级格式化上下文( Block formatting contexts)

    那么如何触发BFC呢? float 除了none以外的值 overflow 除了visible 以外的值(hidden,auto,scroll ) display (table-cell,table- ...

随机推荐

  1. PTA 银行排队问题之单队列多窗口服务(25 分)

    银行排队问题之单队列多窗口服务(25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假 ...

  2. 配置MapReduce插件时,弹窗报错org/apache/hadoop/eclipse/preferences/MapReducePreferencePage : Unsupported major.minor version 51.0(Hadoop2.7.3集群部署)

    原因: hadoop-eclipse-plugin-2.7.3.jar 编译的jdk版本和eclipse启动使用的jdk版本不一致导致.  解决方案一: 修改myeclipse.ini文件即可解决. ...

  3. Lua文件操作和串行化

    function n_serialize(data) if type(data)=="number" then io.write(data,"\n") else ...

  4. 不同浏览器对于html5 audio标签和音频格式的兼容性

    音频格式 Chrome Firefox IE9 Opera Safari OGG 支持 支持 支持 支持 不支持 MP3 支持 不支持 支持 不支持 支持 WAV 不支持 支持 不支持 支持 不支持 ...

  5. Py修行路 python基础 (五)三元运算 字符编码 元组 集合 三级菜单优化!

    三元运算 条件判断不能加冒号: a=3 b=5 c=a if a<b else b oct() 转成八进制的简写:16进制 标志:BH为后缀或是0x为前缀hex() 转成16进制 元组 跟列表是 ...

  6. 第八章 数据库连接JDBC(待续)

    ············

  7. Python 面向对象的进阶

    类的成员 类的成员可以分为三大类 :  字段 , 方法 和  属性 注 :  所有的成员中,只有普通字段的内容保存对象中,  即 : 根据此类创建了对象,在内存就有多少个普通字段.  而其他的成员,则 ...

  8. python学习——练习题(3)

    """ 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? """ import math d ...

  9. 开启mysql远程访问

    一.登陆mysql以后执行以下命令: GRANT ALL ON *.* TO username@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUS ...

  10. Linux&nbsp;ALSA声卡驱动之一:ALS…

    声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! 一.  概述 ALSA是Advanced Linux Sound Architecture ...