最近在学习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. logging模块讲解

    logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式 ...

  2. django-上传文件 fromdata(头像实例)

    上传文件头像的2种方法,简单实例来看下用法 用法定义,fromdata可以传输任何数据 HttpRequest.FILES 一个类似于字典的对象,包含所有的上传文件信息. FILES 中的每个键为&l ...

  3. jQuery笔记——选择器

    jQuery 最核心的组成部分就是:选择器引擎.它继承了 CSS 的语法,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确的选择,并且不必担心浏览器的兼容性 常规选择器 根据id选择元素就是 ...

  4. Sql Server优化之路

    本文只限coder级别层次上对Sql Server的优化处理简结,为防止专业DB人士有恶心.反胃等现象,请提前关闭此页面. 首先得有一个测试库,使用数据生成计划生成测试数据库(参考:http://de ...

  5. kettle init

  6. Vue 简单的总结二

    表单输入绑定 数据双向绑定 v-model 绑定相同的属性 当属性变化绑定的标签内容也跟着变化 v-model 只能应用像在input textare select 标签 v-model.lazy 懒 ...

  7. VxWorks多任务功能

    http://blog.chinaunix.net/uid-23741326-id-84935.html VxWorks的任务有优先级的概念,其任务调度也是基于优先级考虑的,是抢占式的,VxWorks ...

  8. Bypassing iPhone Code Signatures

    [Bypassing iPhone Code Signatures] Starting with the recent beta releases of the iPhoneOS, Apple has ...

  9. 819. Most Common Word 统计高频词(暂未被禁止)

    [抄题]: Given a paragraph and a list of banned words, return the most frequent word that is not in the ...

  10. Anaconda( different versions) configuration in ubuntu 14

    1. 安装自己经常使用的Anaconda版本 sh ./Anaconda3-5.0.1-Linux-x86_64.sh 2. 默认安装到 /home/usr/anaconda3下面,在anaconda ...