Block Formatting Contexts (块级格式化上下文) 详解
最近在学习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 (块级格式化上下文) 详解的更多相关文章
- 详说 Block Formatting Contexts (块级格式化上下文)
在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ,也就是本文的主角 Block Formatting Contexts (块级格式化上下文),本文会基于上文关于 BFC 的部 ...
- Block Formatting Contexts (块级格式化上下文) 使用参考
转自:http://kayosite.com/block-formatting-contexts-in-detail.html 在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ...
- BFC 详说 Block Formatting Contexts (块级格式化上下文)
定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Normal Flow) .浮动 (Floats) 和绝对定位 (Absolute Positioning) ,下面分别对 ...
- BFC --- Block Formatting Context --- 块级格式化上下文
虽然知道块级格式化上下文是什么东西,但要我把这个东西给说清楚,还真的不是一件容易的事儿,所以这篇文章我就要说说清楚到底什么使传说中的BFC,即块级格式化上下文. 一.BFC的通俗理解 通俗的理解 -- ...
- Block formatting context(块级格式化上下文)
今天看到豆瓣面试官的一篇文章,讲到关于CSS中的一个知识点:Block formatting context ,感觉这个确实挺有用,同时我也挺赞同作者的一些观点的,这里就不展开谈我的感受了, 此文只 ...
- BFC(Box,Formatting,Context) —— 块级格式化上下文
Box:CSS布局的基本单位 Formatting context是页面中的一块渲染区域,最常见的是BFC和IFC,CSS3增加了GFC和FFC BFC定义:块级格式化上下文,它是一个独立的渲染区域, ...
- css中margin重叠和一些相关概念(包含块containing block、块级格式化上下文BFC、不可替换元素 non-replaced element、匿名盒Anonymous boxes )
平时在工作中,总是有一些元素之间的边距与设定的边距好像不一致的情况,一直没明白为什么,最近仔细研究了一下,发现里面有学问:垂直元素之间的margin有有互相重叠的情况:新建一个BFC后,会阻止元素与外 ...
- 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解
CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...
- 块级格式化上下文( Block formatting contexts)
那么如何触发BFC呢? float 除了none以外的值 overflow 除了visible 以外的值(hidden,auto,scroll ) display (table-cell,table- ...
随机推荐
- 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...
- Informatica PowerCenter下载地址
https://edelivery.oracle.com/EPD/Download/get_form?egroup_aru_number=12854075
- node.js的了解
在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装 2.通过命令行安装 需要用到 homebrew(mac上专门 ...
- Venom的简单使用
工具地址:https://github.com/r00t-3xp10it/venom 打开到venom目录,输入./venom.sh 打开程序 按回车键继续 这里有很多的模块,要用哪个模块就输入它的编 ...
- Java 查询数据后进行递归操作
java的递归方法记录: private List<Map<String, Object>> generateOrgMapToTree(List<Map<Strin ...
- Flask之性能
5.5 性能 一.不同角度的网站性能 普通用户认为的网站性能 网站性能对于普通用户来说,最直接的体现就是响应时间.用户在浏览器上直观感受到的网站响应速度,即从客户端发送请求,到服务器返回响应内容的时间 ...
- JPA 注解详解
@Entity --声明为一个实体类bean @Table (name= "promotion_info" ) --为实体bean映射指定表(表名="promotion_ ...
- Oracle & SQL Server 数据传输
在开发中用到的Oracle与SQL Server间数据传输的不同方法的整理,比较.包括原理的简介,配置和实现方法,优缺点的比较,使用平台和DB,适合的应用范围和效能的比较. 整理的方法有如下六种: 1 ...
- cocos2d-x 初探helloWorld
cocos2d-x的main函数代码很少,把一些复杂的接口封装到AppDelegate类里了,“AppDelegate”从词意可以得出是app的代理类,而一些最早的场景都会在AppDelegate类里 ...
- opennebula 创建镜像数据块
{","csrftoken":"f5454a02dea7b4a7d5d50b482a762b57"}