本文主要是针对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. unity3d使用脚本保存屏幕截图

    using UnityEngine; using System.Collections; using System.IO; public class FrameAnimation : MonoBeha ...

  2. 咏南IOCP中间件支持海量并发方案(集群)

    咏南IOCP中间件支持海量并发方案(集群) 支持D7~XE10.1.1开发 支持负载均衡,自动故障转移 可以在不停机的状态下,根据负载情况灵活增加中间件机器 中间件使用IOCP通信,单中间件支持并发数 ...

  3. eclipse 的操作

    1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右 侧Text file encodin ...

  4. C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节

    一项目直接在VS里面,调试就可以正常运行.但部署到IIS下就提示,配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节 ...

  5. js 格式化日期 ("/Date(1400046388387)/")

    var date = new Date(parseInt(str.replace(/\/Date\((-?\d+)\)\//, '$1'))); var d= date.getFullYear() + ...

  6. 实践中的Git常用指令分析

    从工作开始,一直都在使用为知笔记(作为程序员需要知道的内容很多---不需要很深入理解,一段时不使用的东西可能就会忘记).但本周一同步不同PC端时,了解到为知会在2017/1/1开始收费! 既然收费了, ...

  7. 【洛谷P3398】仓鼠找sugar

    画个图就能多少看出些规律 证明借鉴一下大牛的题解: 设从A到B,经过的深度最小的点为X 同理,C,D的为Y 题目是一个点从A出发到B 一个从C出发到D 那么从A到B可以分解成 先从A到X 再从X到B. ...

  8. lua 入门学习

    -- 1.Hello world print( "--------------1--------------") print("Hello world"); - ...

  9. Java 第11章 类的无参方法

    类的无参方法 类的方法由哪几部分组成? 方法的定义: 1.访问权限修饰符 2.方法返回的数据类型 3.方法的名称 4.方法的主体 成员变量和局部变量的区别有那些? ~ 作用域不同 - 成员变量的作用域 ...

  10. Jade之Template Inheritance

    Template inheritance jade支持通过关键字block和extends来实现模板继承. 比如,在layout.jade写上如下代码 html head title My Site ...