最近在学习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. php中的move_uploaded_file

    1.定义和用法 move_uploaded_file() 函数将上传的文件移动到新位置. 若成功,则返回 true,否则返回 false. 2.语法 move_uploaded_file(file,n ...

  2. 16c550芯片编写的优化

    参考了 <Altera FPGA/CPLD 设计>高级篇, 关于状态机的推荐写法实现的功能是一样的但是编译使用的逻辑门如下图: 下图是我自己编的状态机需要的逻辑: 下图是使用推荐的有限状态 ...

  3. 虚拟机如何设置外网ip

    实例: 在数据中心机房的一台服务器上安装虚拟机,并在该虚拟机上安装一个操作系统.给该虚拟机配置公网IP,让外网能直接访问到该虚拟上的应用. 这个问题最初觉得简单,不就是桥接嘛,要只让其上网NAT就可以 ...

  4. 用一两句话说一下你对“盒模型”这个概念的理解,和它都涉及到哪些css属性

    网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物——盒子作一 ...

  5. Flask之性能

    5.5 性能 一.不同角度的网站性能 普通用户认为的网站性能 网站性能对于普通用户来说,最直接的体现就是响应时间.用户在浏览器上直观感受到的网站响应速度,即从客户端发送请求,到服务器返回响应内容的时间 ...

  6. oracle查询列合并为行(listagg简单用法)

    今天工作时遇见一个数据查询分组问题,就是将分组后同一组数据某一列合并为一行,因为之前很少用到,这次工作中刚好有用到,所以手痒难耐,将它记录下来. 查询sql如下: select t.province_ ...

  7. 【转】OpenGL随笔(1)—— mipmap 详解

    注:本文使用的所有 OpenGL 函数来自 OpenGL 4.5,优先使用 DSA. 使用 mipmap 时,OpenGL 根据被映射对象的大小(单位是像素),自动决定使用纹理图的哪个分辨率级别.mi ...

  8. 【287】◀▶ arcpy 常用类说明

    ArcPy 类列表(按字母顺序) 01   Raster 创建一个可在 Python 脚本或地图代数表达式中使用的栅格对象. 02   Cursor Cursor 是一种数据访问对象,可用于在表中迭代 ...

  9. c++ 适配器模式(adapter)

    当两个系统的接口不一样时,我们就要重新封装一下接口,以便于当前系统的调用.这种模式叫做适配器模式.适配器模式分为两种: 1.对象组合适配器(Object Adapter) 2.类适配器(Class A ...

  10. 633. Sum of Square Numbers 是否由两个完全平方数构成

    [抄题]: Given a non-negative integer c, your task is to decide whether there're two integers a and b s ...