块级格式化上下文(block formatting context)

在CSS2.1中,有三种定位方案——普通流、浮动和绝对定位:

普通流:元素按照先后位置自上而下布局,inline元素水平排列,直到行被占满后换行,block元素则被渲染为完整的一行,除非指定,所有元素默认为普通流定位。

浮动:浮动布局中,元素首先按照普通流位置出现,然后根据浮动方向尽可能向左或右偏移,效果与文本环绕相似。

绝对定位:元素会脱离普通流,因此绝对定位元素不会对其兄弟元素产生影响(与float不同),元素的具体位置由坐标位置决定。

BFC是属于普通流,因此它对兄弟元素也不产生影响。

一、BFC(块级格式化上下文)

BFC是W3C CSS2.1规范中的一个概念,决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。目前除了IE6-7外其他浏览器均支持BFC。在CSS3中BFC叫做Flow Root。

与普通容器相比,BFC元素可以看作是隔离了的独立容器,内部的元素不会在布局上影响外面元素。

二、如何形成BFC

满足任意下面条件的元素可形成BFC:

1. 浮动元素,float除了none外的值

2. 绝对定位元素,position:absolute/fixed

3. display为 inline-block , table-cells , table-captions之一

4. overflow为visivle之外的值(hidden,auto,scroll)

display:table本身不产生BFC,而是由它产生匿名框,包含display:table-cell的框产生BFC。

注意:BFC并不是元素,而是元素带有的一些属性,因此上面元素是产生了BFC,而他们本身并不是BFC。

1. BFC可以包含浮动元素

这是使用overflow:hidden方法闭合浮动的原理,W3C原文:"‘Auto‘ heights for block formatting context roots",就是BFC会根据子元素情况自动适应高度,使子元素包含浮动

<div style="border:1px solid #00F;overflow:hidden;width:300px;">

    <div style="float:left;background:#939;">我的父元素是 BFC</div>

</div>

<div style="line-height:3em;">----------我是华丽分割线-----------</div>

<div style="border:1px solid gray;width:300px;">

    <div style="float:left;background:#3C6;">我的父元素不是 BFC</div>

</div>

注意:IE6-7不支持BFC,需要出发hasLayout闭合浮动

2.BFC可以组织元素被浮动元素覆盖

浮动元素的块级兄弟元素会无视浮动元素的位置,尽量占满一行,这样会被浮动元素覆盖,为该兄弟元素形成BFC可以组织被覆盖。

<div style="float:left;width:150px;height:50px;background:#FF0;">
    我是浮动元素
</div>
<div style="width:200px;height:80px;background:#30F;color:#fff;">
    我是非浮动元素,并且没有创建 BFC
</div>
<div style="line-height:3em;">----------我是华丽分割线-----------</div>
<div style="float:left;width:150px;height:50px;background:#FF0;">
    我是浮动元素
</div>
<div style="width:200px;height:80px;background:#30F;color:#fff;display:inl
ine-block;">
    我是非浮动元素,创建了 BFC
</div>

效果:

3. BFC可以阻止父子元素的margin折叠

当且仅当两个块级元素毗邻并且在同一块级格式化上下文时,他们垂直方向之间的外边距才会折叠。也就是说,及时两个块级元素毗邻,当不在同一个BFC时,它们的边距不会折叠。

<div style="margin-top:20px;background:yellow;width:300px;">
    <div style="margin-top:20px;">
        我的上外边距是 20px,父级元素不是 BFC
    </div>
</div>
<div style="margin-top:20px;background:yellow;overflow:auto;width:300px;">
    <div style="margin-top:20px;">
        我的上外边距是 20px,父级元素是 BFC
    </div>
</div>

效果:

引自http://www.cnblogs.com/vitruvi/p/4303891.html

时间: 2024-10-13 21:59:07

块级格式化上下文(block formatting context)的相关文章

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

CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inline元素水平排列,直到行被占满后换行,block元素则被渲染为完整的一行,除非指定,所有元素默认为普通流定位. 浮动:浮动布局中,元素首先按照普通流位置出现,然后根据浮动方向尽可能向左或右偏移,效果与文本环绕相似. 绝对定位:元素会脱离普通流,因此绝对定位元素不会对其兄弟元素产生影响(与float不

关于块级格式化上下文(Block formatting context)

不是谁都像你一样只向着前方就能活下去了,你就抛弃那些没用的同伴前行就好了,你注定是要成为海贼王的男人吧,而我就算没有远大的目标也可以.——<one piece>     Block formatting context(以下简写为BFC)又称做块级格式化上下文,源自CSS2.1 规范中的Visual formatting model,Visual fomatting model定义了视觉媒体该怎样处理文档内容,BFC属于Normal flow(正常流),它与其他正常流元素并没有本质的区别,BF

块级格式化上下文

初识块级格式化上下文(Block Formatting Contexts) 前言 html文档中元素的定位有3种方式(普通流.绝对定位.浮动),除普通流以外,浮动与绝对定位都会导致元素脱离普通流,按照各自的方式进行定位. 带有BFC属性的容器属于普通流的一种. 块级格式化上下文 (BFC) 块格式化上下文是页面 CSS 视觉渲染的一部分.它是用于决定块盒子的布局及浮动相互影响范围的一个区域. BFC是元素在拥有某些特定属性才显示的一种属性,有BFC特性的元素和其他普通流中的元素在样式上没有区别.

块级格式化上下文(Block Formatting Context)

前言 在 CSS 2.1 中,有三种定位方案——普通流 (Normal Flow) .浮动 (Floats) 和绝对定位 (Absolute Positioning) ,下面分别对这三种布局简略说明一下. 普通流(Normal Flow) 在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在这个过程中,行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行, 除非另外指定,否则所有元素默认都是普通流定位,也可以说,普通流中元素的位置由该元素在 HTML 文档中的

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

在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ,也就是本文的主角 Block Formatting Contexts (块级格式化上下文),本文会基于上文关于 BFC 的部分进行拓展,进一步说明 BFC 的特性. 但在进一步说明 BFC 特性之前,Kayo 首先要介绍另一个在 CSS 的可视化格式模型 (Visual Formatting Model) 中具有非常重要地位的概念——定位方案.定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Norma

常规流之块级格式化上下文(Block Formating Context)

在css2.1中,常规流包括块框(block boxes)的块格式化(block formatting),行内框(inline boxes)的行内格式化(inline formatting),块级框(block-level-boxes)或行内级框(inline-level-boxes)的相对定位.常规流中的框属于一个格式化上下文,可能是块或者是行内,但不能同时都是.块级框参与块级格式化上下文,行内级框参与行内级格式化上下文.今天我们先来说说块级格式化上下文,也就是我们常说的BFC. 一.形成块级

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

那么如何触发BFC呢? float 除了none以外的值 overflow 除了visible 以外的值(hidden,auto,scroll ) display (table-cell,table-caption,inline-block) position(absolute,fixed) fieldset元素 BFC的特性: 1)块级格式化上下文会阻止外边距叠加 当两个相邻的块框在同一个块级格式化上下文中时,它们之间垂直方向的外边距会发生叠加.换句话说,如果这两个相邻的块框不属于同一个块级格

Block Formatting Contexts (块级格式化上下文) 详解

     最近在学习BootStrap框架,发现里面清除浮动的类 .clearfix 跟平时自己用的不太一样.它的样式是这样的: .clearfix:before { content: " "; display: table; } .clearfix:after { content: " "; display: table; clear: both; } 用:befor和:after伪元素清除浮动是我熟悉的,不过一般我使用display:block而非display

Block formatting contexts (块级格式化上下文)简称 BFC 的特性

如何触发BFC呢? float 除了none以外的值 overflow 除了visible 以外的值(hidden,auto,scroll ) display (table-cell,table-caption,inline-block) position(absolute,fixed) fieldset元素 需要注意的是,display:table 本身并不会创建BFC,但是它会产生匿名框(anonymous boxes),而匿名框中的display:table-cell可以创建新的BFC,换