本文主要是针对BFC特性的应用,至于什么是BFC,可以参看MDN的简介:
 
   
使用Block Formatting Context可以解决如下问题:
 
  (1)父元素的垂直外边距不会和子元素的垂直外边距重叠
  (2)开启该特性的元素不会被浮动元素所覆盖
  (3)开启该特性的父元素可以包含浮动的子元素
 
BFC的这个特性默认是不具有的,所以我们需要手动的去开启这个特性,开启的方法如下所示:
 
  (1)设置浮动(脱离了文档流)
  (2)设置绝对定位(脱离了文档流)
  (3)设置display为inline-block(如果是块级元素,这样设置会具有行内元素的特性)
  (4)设置overflow设置为除visible之外的值(副作用最小的方式)

(1)使用BFC特性解决块级父元素无法包含浮动子元素的问题
利用上面的BFC的第三点特性就可以解决该问题。
首先,我们先进行一下问题场景重现。如下所示的两个div:
 <div class="box1">
<div class="inBox1"> </div>
</div>
box1中包含inBox1,当我们不显示的给box1设置一个高度时,box1的高度取决于inBox1的高度,也就是子元素会把父元素“撑开”。效果如下所示:

如图所示,红色边框的是box1,蓝色边框的是inBox1。CSS如下:
 <style type="text/css">
/*
设定box1的样式
*/
.box1{
border: 5px solid red;
}
/*
设定box1内部的inBox1的样式
*/
.box1 .inBox1{
width: 100px;
height: 100px;
border: 1px solid blue;
}
</style>
接下来,如果我们手动的为inBox1设置一个浮动属性(float:left;),就会成为如下所示的效果:

这时,我们就可以形象的称父div——box1出现了“高度塌陷”问题。
造成这个问题的原因就是给inBox1设置了浮动属性后,子div和父div不在同一层了,所以子元素就无法承担起“撑开”父元素的任务了。
解决方法就是将box1的overflow属性设置为hidden。这样设置的好处就是副作用很小。添加后如下所示:


(2)使用BFC特性解决父元素的垂直外边距和子元素的垂直外边距重叠
场景还原如下:
<!DOCTYPE html>
<html>
<head>
<title>BFC</title>
<style type="text/css">
/*
设定box1的样式
*/
.box1{
background-color: red;
/* 为了演示重叠,我们给父元素也设置一个上外边距 */
margin-top: 20px;
}
/*
设定box1内部的inBox1的样式
*/
.box1 .inBox1{
width: 100px;
height: 100px;
border: 1px solid yellow;
/* 为子元素设置一个上外边距 */
margin-top: 100px;
}
</style>
</head>
<body>
<div class="box1">
<div class="inBox1"> </div>
</div>
</body>
</html>
在运行结果中我们可以看到子元素的上外边距与父元素的上外边距发生了重叠,并且取了一个最大值,也就是子元素的上外边距。

也许我们想要的效果并不是这样的,我们需要子元素以父元素的上边界外参考设置margin-top,解决方法同样是为父元素设置overflow:hidden;属性,效果如下所示:


(3)使用BFC特性解决浮动覆盖问题
如果有两个div如下所示:

如果我们给红色div块加上一个左浮动属性,则红色块会脱离文档流并位于文档流上层,所以红色块会盖住蓝色块。效果如下所示:

为了不让蓝色块被盖住,我们可以给蓝色块设置一个overflow:hidden;开启BFC特效,效果如下所示:

代码如下所示:
 <!DOCTYPE html>
<html>
<head>
<title>BFC</title>
<style type="text/css">
/*
为box1设置样式
*/
.box1{
width: 100px;
height: 100px;
background-color: red;
/* 为红色块设置一个浮动属性,使其脱离文档流 */
float: left;
}
/*
为box2设置样式
*/
.box2{
width: 100px;
height: 100px;
background-color: blue;
/* 为蓝色块开启BFC特性 */
overflow: hidden;
}
</style>
</head>
<body>
<div class="box1"> </div>
<div class="box2"> </div>
</body>
</html>

浅入“Block Formatting Context”的更多相关文章

  1. Block formatting context(块级格式化上下文)

    今天看到豆瓣面试官的一篇文章,讲到关于CSS中的一个知识点:Block formatting context  ,感觉这个确实挺有用,同时我也挺赞同作者的一些观点的,这里就不展开谈我的感受了, 此文只 ...

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

    在CSS2.1中,有三种定位方案--普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inline元素水平排列,直到行被占满后换行,block元素则被渲染为完整的一行,除非指定,所有元素 ...

  3. 【转】关于Block Formatting Context--BFC和IE的hasLayout

    转自穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为“块级格式化范围”. 是 W3C CSS ...

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

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  5. 关于Block Formatting Context--BFC和IE的hasLayout

    转文请标明 --- 出处:穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为"块级格式 ...

  6. css Block formatting context BFC

    w3c关于BFC解释: http://www.w3.org/TR/CSS21/visuren.html#block-formatting Mdn描述: A block formatting conte ...

  7. Block formatting context

    不会JS中的OOP,你也太菜了吧!(第一篇)   一.你必须知道的 1) 字面量 2) 原型 3) 原型链 4) 构造函数 5) 稳妥对象(没有公共属性,而且其方法也不引用this的对象.稳妥对象适合 ...

  8. CSS BFC(Block Formatting Context)

    BFC是 W3C CSS 2.1 规范中的一个概念Block Formatting Context的缩写即格式化上下文,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.简单讲,它是提 ...

  9. 什么是BFC(Block Formatting Context)

    原文:https://segmentfault.com/a/1190000012221820 https://www.w3.org/TR/CSS2/visuren.html#block-formatt ...

随机推荐

  1. clang format 官方文档自定义参数介绍(中英文)

    官方文档:http://clang.llvm.org/docs/ClangFormatStyleOptions.html 中文 在代码中配置样式 当使用 clang::format::reformat ...

  2. RGBA 与opacity

    RGBA是一种表示颜色的方式,初次看到觉得很奇怪,与RGB的区别是什么?后面查了下,才发现RGBA的好处. RGBA各个字母的含义为: R:红色值,正整数 | 百分数: G:绿色值,正整数 | 百分数 ...

  3. LoadRunner中文乱码问题解决方案

    一下内容纯属网上方法集合: 我用loadrunner录制,脚本里的乱码一直没有解决.看到网上很多贴子.采用的方法:1.第一步:去lr 的vugen的Tools -> Recoding Optio ...

  4. Ubuntu10.0.4安装NDK

    android版本遇到.so文件crash,需要使用ndk来定位报错代码. 从这里下载ndk安装文件: http://www.androiddevtools.cn/ 运行 ./android-ndk- ...

  5. Activity的生命周期及各生命周期方法的作用

    一.Activity的生命周期中各个方法的作用 onCreate(): 做Activity上所需要数据的初始化工作. onStart(): 显示Activity界面,此时用户对界面可见但不可交互. o ...

  6. oracle decode(nvl(estimate_qty,0),0,1,estimate_qty) 函數

    oracle   decode(nvl(estimate_qty,0),0,1,estimate_qty) 函數

  7. 融云官方cordova示例使用指南

    最近公司要在App里加IM功能,用融云IM.于是下载其cordova版示例:https://github.com/rongcloud/cordova-plugin-rongcloud-im-demo ...

  8. Fire uva 11624

    题目连接:http://acm.hust.edu.cn/vjudge/problem/28833 /* 首先对整个图bfs一次得到火焰燃烧的时刻表 之后在bfs搜路径时加一个火烧表的判断 坑点在于:如 ...

  9. day4----装饰器

    装饰器本质是函数,装饰其他函数,就是为其他函数添加附加功能. 原则:1.不能修改被装饰的函数的源代码           2.不能修改被装饰的函数的调用方式   实现装饰器 知识储备 1.函数即“变量 ...

  10. C语言中scanf()的用法!

    好文章转自:http://blog.tianya.cn/blogger/post_show.asp?BlogID=287129&PostID=3668453 scanf详解 scanf 原型: ...