1、什么是BFC

BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。

通俗讲,BFC就是一种布局方式,在创建了 BFC后,其子元素会一个接一个地放置:盒子们自所在的 containing block 顶部起,水平方向上一个接一个撑满整个宽度,垂

直方向上他们的起点是包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性。在 同一个BFC中,两个元素才有可能发生垂直Margin的重叠,这个包括相邻

元素,嵌套元素,只要他们之间没有间隔(即父元素的边框,非空内容,padding等)就会发生margin重叠,即margin会发生重合。更重要的是:创建BFC,能消除元素对相邻

元素的布局影响,常见的应用 是:使用overflow:hidden创建BFC ,来清除浮动元素对后面元素的布局影响 。

2、如何创建BFC

当一个HTML元素满足下面条件的任何一点,都可以产生BFC:

float的值不为”none” (如:float:left/right)

overflow的值不为”visible”(如:overflow:hidden)

display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个

position的值不为 “static” 或 “relative”中的任何一个(如:position:absolute)

3、BFC的作用

1.不和浮动元素重叠

如果一个浮动元素后面跟着一个非浮动的元素,那么就会产生一个覆盖的现象,很多自适应的两栏布局就是这么做的。比如下图的效果,参考例子:

<style>
*{margin: 0;padding: 0;}
.userinfo{width: 200px;height: 200px;color: #fff;overflow: hidden;padding: 10px;_zoom:1;}
.userinfo a{width: 80px;height: 80px;background-color: #080;float: left;margin-right: 5px;}
.userinfo .txt{overflow: hidden;line-height: 20px;padding: 0 5px;*zoom: 1;}/* overflow: hidden;触发bfc;zoom: 1;触发ie的haslayout以达到同bfc一样的显示效果 */
</style>
<div>
<a href="#"><img src="" alt="用户头像" /></a>
<div>
<p>您好, <b>xxxx</b></p>
<p>一段文字描述!一段文字描述!一段文字描述!一段文字描述!</p>
</div>
</div>

2.清除元素内部浮动

只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就可以了(IE Haslayout)。

3.嵌套元素Margin边距折叠问题的解决

按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如没有边框,非空内容,

padding等)就会发生margin重叠。

因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠了。

分析CSS布局中BFC的更多相关文章

  1. 认识和理解css布局中的BFC

    认识和理解css布局中的BFC BFC的定义 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. Block Formatting Con ...

  2. CSS布局基础——BFC

    what's BFC? 第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使 ...

  3. DIV+CSS布局中主要CSS属性介绍

    Float: Float属性是DIV+CSS布局中最基本也是最常用的属性,用于实现多列功能,我们知道<div>标签默认一行只能显示一个,而使用Float属性可以实现一行显示多个div的功能 ...

  4. CSS布局中的水平垂直居中

    CSS布局中的水平垂直居中 各位好,先说两句题外话.今天是我开通博客园的博客第一天,虽然我申请博客园的账号已经有一年半了,但是由于各种原因迟迟没有开通自己的博客.今天非常有幸开通博客,在此也写一篇关于 ...

  5. DIV CSS布局中position属性用法深入探究

    本文向大家描述一下DIV CSS布局中的position属性的用法,position属性主要有四种属性值,任何元素的默认position的属性值均是static,静态.这节课主要讲讲relative( ...

  6. DIV CSS布局中绝对定位和浮动用法

    转自:http://developer.51cto.com/art/201009/223337_1.htm 你对DIV CSS布局中绝对定位和浮动的概念及使用是否熟悉,这里和大家分享一下,CSS中,实 ...

  7. DIV+CSS布局中自适应高度的解决方法

    div乱跑问题  (文件<DIV+CSS布局中自适应高度的解决方法.rar>)   float 是个很危险的东西 得小心使用 本来有一很好的关于CSS+DIV的论坛 不过现在关门了 甚是可 ...

  8. CSS布局中最小高度的妙用

    CSS布局中最小高度的妙用 --最小高度可以设定一个BOX的最小高度,当其内容较少时时,也能保持BOX的高度为一定,超出就自动向下延伸最小高度可以设定一个BOX的最小高度,当其内容较少时时,也能保持B ...

  9. CSS 布局和 BFC

    什么是 BFC 在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的.W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子 ...

随机推荐

  1. __must_check必须处理函数返回值

    include/linux/compiler-gcc4.h  #define __must_check            __attribute__((warn_unused_result)) _ ...

  2. win10 下eclipse tomcat 热部署问题?

    前言: 问题的描述: 用的环境是maven,java,tomcat,win10 tomcat server配置如下 项目发布之后,修改jsp,报错,错误详情如下: 解决办法.勾选server opti ...

  3. 06 Memcached中的一些参数限制

    一: Memcached中的一些参数限制 Key的长度:250字节(二进制协议支持65536个字节) value的限制:1M ,一般都是存储一些文本,如新闻标题等等这个值足够了, 内存的限制:32位下 ...

  4. UVa 10651 Pebble Solitaire(DP 记忆化搜索)

    Pebble Solitaire Pebble solitaire is an interesting game. This is a game where you are given a board ...

  5. Matlab典型论坛

    Matlab典型论坛 http://www.ilovematlab.cn/forum.php?tid=271705&goto=lastpost

  6. 解决php函数json_encode转换后中文被编码为unicode

    大家都知道使用函数json_encode()可以方便快捷地将数组进行json编码转换,但是如果数组值存在着中文,json_encode会将中文转换为unicode编码,例如: <?PHP $ar ...

  7. GUN C中的错误报告

    在C语言中,很多库函数在调用失败时都会返回特定的值.比如返回-1,空指针,EOF等.但是这些值仅仅表示的调用失败,并未给出详细的错误信息.如果想查看详细的错误内容,就要去查看errno的错误代码,er ...

  8. spring BeanFactory加载xml配置文件示例

    项目目录结构如下: HelloWorld.java package com.thief.demo; public class HelloWorld { public void sayHello() { ...

  9. C++模板类[初步]

    /* * stacktp.h * * Created on: 2014年3月29日 * Author: */ /** * - 模板类的概念,与使用 * -# export template <c ...

  10. 在VS2017环境中编译libxml2库

    libxml2库编译 1.下载libxml2,官网是:http://www.xmlsoft.org/downloads.html, 我下载的版本是:libxml2-sources-2.9.7.tar. ...