相关文档:

http://blog.sina.com.cn/s/blog_877284510101jo5d.html

http://www.cnblogs.com/dojo-lzz/p/3999013.html

http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html

BFC(Block
Formatting CoFSADntext)直译为“块级格式化范围”

1.是 W3C CSS 2.1 规范中的一个概念,它决定了元素怎样对其内容进行定位。以及与其他元素的关系和相互作用。

当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中依照一定规则进行布局。一个环境中的元素不会影响到其他环境中的布局。比方浮动元素会形成BFC。浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。

这里有点类似一个BFC就是一个独立的行政单位的意思。

也能够说BFC就是一个作用范围。能够把它理解成是一个独立的容器,而且这个容器的里box的布局,与这个容器外的毫不相干。

2.还有一个通俗点的解释是:在普通流中的 Box(框) 属于一种 formatting context(格式化上下文) 。类型能够是 block ,或者是 inline 。但不能同一时候属于这两者。

而且, Block boxes(块框) 在 block formatting context(块格式化上下文) 里格式化,
Inline boxes(块内框) 则在 inline formatting context(行内格式化上下文) 里格式化。不论什么被渲染的元素都属于一个 box 。而且不是 block 。就是 inline 。即使是未被不论什么元素包裹的文本,依据不同的情况,也会属于匿名的 block boxes 或者 inline boxes。

所以上面的描写叙述,即是把全部的元素划分到相应的 formatting context 里。

DEMO1:


<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<link href="" rel="stylesheet">

<style>

    body {

        width: 300px;

        position: relative;

    }

 

    .aside {

        width: 100px;

        height: 150px;

        float: right;

        background: #f66;

    }

 

    .main {

        height: 200px;

        background: #fcc;

        

    }

</style>

</head>

<body>

    <div class="aside"></div>

    <div class="main"></div>

</body>

</html>
显示效果如图:能够看到因为深红色快的浮动导致不占文档位置所以会浮动在粉红色块上

开启BFC:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<link href="" rel="stylesheet">

<style>

    body {

        width: 300px;

        position: relative;

    }

 

    .aside {

        width: 100px;

        height: 150px;

        float: right;

        background: #f66;

    }

 

    .main {

        height: 200px;

        background: #fcc;

         overflow: hidden;

    }

</style>

</head>

<body>

    <div class="aside"></div>

    <div class="main"></div>

</body>

</html>
给当中非浮动的元素加入了overflow:hidden后看到效果例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb21vZ2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

两个div不再堆叠在一起了


DEMO2
<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<style>

    .par {

        border: 5px solid #fcc;

        width: 300px;

       

    }

 

    .child {

        border: 5px solid #f66;

        width:100px;

        height: 100px;

        float: left;

    }

</style>

</head>

<body>

      <div class="par">

        <div class="child"></div>

        <div class="child"></div>

    </div>

</body>

</html>

显示效果如图所看到的:因为子节点的浮动导致脱离了父节点文档,所以父节没有被撑开

开启BFC:
<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<style>

    .par {

        border: 5px solid #fcc;

        width: 300px;

       overflow: hidden;;

    }

 

    .child {

        border: 5px solid #f66;

        width:100px;

        height: 100px;

        float: left;

    }

</style>

</head>

<body>

      <div class="par">

        <div class="child"></div>

        <div class="child"></div>

    </div>

</body>

</html>
效果例如以下图所看到的:给父节点加入了overflowhidden,这时候就能够被子节点撑开了

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb21vZ2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

DEMO3:




<!DOCTYPE html>

<html>  

<head> 

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <!--The viewport meta tag is used to improve the presentation and behavior of the samples 

    on iOS devices-->

  <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

  <title></title>





  <style> 

    html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

    .left{

      background:pink;

      float: left;

      width:180px;

      height:200px;

    }

    .center{

      background:lightyellow;

      overflow:hidden;

       height:200px;

      

    }

    .right{

      background: lightblue;

      width:180px;

       height:200px;

      float:right;

    }

  </style> 

  

  

</head> 





<body> 

  <div class="container">

    <div class="right">right</div>

    <div class="left">left</div>

    <div class="center">center</div>  

  </div>

</html>
显示效果如图:我们看到三个div成一行排列了,注意这里的cener并没有设置宽度是自己主动撑开的,非常吊!

只是注意一点center必须再html标签的顺序上放在最后才干实现这个效果

DEMO4:
<!DOCTYPE html>

<html>  

<head> 

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <!--The viewport meta tag is used to improve the presentation and behavior of the samples 

    on iOS devices-->

  <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

  <title></title>





  <style> 

    html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

    .main{border:2px blue solid;}

    .left{

      background:pink;

      float: left;

      width:180px;

      height:200px;

    }

  </style> 

  

  

</head> 





<body> 

<div class="main">

  <div class="c">

    <div class="left">right</div>

    <div class="left">left</div>

  </div>

   <div class="c">

    <div class="left">right</div>

    <div class="left">left</div>

  </div>

</div> 

</html>
显示效果如图所看到的:尽管left div是分别放在两个c div里面的。 可是因为浮动导致子节点脱离文档流 而使子节点不占位 同一时候排成一行来布局

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb21vZ2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

开启BFC:
<!DOCTYPE html>

<html>  

<head> 

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <!--The viewport meta tag is used to improve the presentation and behavior of the samples 

    on iOS devices-->

  <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

  <title></title>





  <style> 

    html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

    .main{border:2px blue solid;}

    .c{overflow: hidden;;}

    .left{

      background:pink;

      float: left;

      width:180px;

      height:200px;

    }

  </style> 

  

  

</head> 





<body> 

<div class="main">

  <div class="c">

    <div class="left">right</div>

    <div class="left">left</div>

  </div>

   <div class="c">

    <div class="left">right</div>

    <div class="left">left</div>

  </div>

</div> 

</html>
显示效果如图所看到的:给c div加入了overflow:hidden的时候触发了BFC  所以原本浮动的子节点并没有超出C div来影响到c外的节点,所以变成了两行

最后总结:
能够看到本篇文章通篇都是在解说怎样使用overflow来触发BFC,事实上除了overflow外还有其它的触发方法。仅仅只是临时还没遇到先不表,以上代码均通过IE7~[包含IE7]和谷歌的检測,能够放心使用

CSS定位规则之BFC 你居然一直不知道的东西!!!!!的更多相关文章

  1. CSS定位与布局:普通流

    CSS定位与布局属于CSS的基础,也是CSS布局影响很大的一部分,具体主要包括三种定位与布局机制( Positioning schemes):普通流,浮动,绝对定位. 其实除了这三种之外,还有一些定位 ...

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

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

  3. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  4. css Block formatting context BFC

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

  5. CSS定位与布局:浮动

    浮动的特点   浮动(float)属性提出的作用是实现文字的环绕效果,一个元素浮动后,会脱离普通流.主要的特点如下: 浮动的元素会向左或者向右移动直到它的外边缘接触容器框(containing blo ...

  6. html5--6-33 CSS定位是什么

    html5--6-33 CSS定位是什么 一.总结 一句话总结: 1.常规文档流是一套体系,浮动是另外一套体系. 2.标签清除浮动之后会跑到常规文档流它本来的地方. 3.浮动是否占据常规文档流:应该不 ...

  7. CSS定位的属性值

    关于CSS定位都是老生常谈的问题了,不过有一个问题,最新的属性值在某些网站上并没有被更新到教程上 下面我记录一下 position现在有五个属性值 1.static:静态定位,没有特殊的定位规则,遵循 ...

  8. 十分钟复习CSS盒模型与BFC

    css盒模型与BFC 本文为收集整理总结网上资源 旨在系统复习css盒模型与bfc 节省复习时间 阅读10分钟 什么是盒模型 每一个文档中,每个元素都被表示为一个矩形的盒子,它都会具有内容区.padd ...

  9. 有关CSS 定位中的盒装模型、position、z-index的学习心得

    开始整体之前我需要说明两个概念: 第一个就是   一切皆为框  也就是说在HTML中的不管是是块级的还是内联的,都可以认为成块的,唯一的区别就是块的会独自占据一行 第二个文档流:  一个网页可以看作是 ...

随机推荐

  1. selenium python (三)鼠标事件

    # -*- coding: utf-8 -*-#鼠标事件 #ActionChains类中包括:                     # context_click()  右击:           ...

  2. TortoiseGit's Settings

    将鼠标停放在Settings-TortoiseGit窗体上的editbox,checkbox上,有些会弹出有用的提示信息. 2.35.1. General settings: 设定自己偏好的语言,Gi ...

  3. phonegap 新窗口 WebView

    自定义WebView窗口打开 import com.ap.work.QuickWeb public class QuickPlugin extends CordovaPlugin { /** * 新开 ...

  4. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  5. Percona Xtrabackup备份mysql(转)

    add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...

  6. Hadoop学习笔记(2)

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  7. MSSQL手札三 MSSQL存储过程

    --存储过程完成一段sql代码的封装 create proc trim --参数列表,多个间用逗号分隔 ) as --自定义代码段 ) set @str1=LTRIM(RTRIM(@str)) pri ...

  8. css之clear属性

    clear属性用来设置元素左右两边是否可以存在浮动元素. 它的值包括:left,right,both,none.其中none代表左右两边可以出现浮动元素.

  9. FZU2143Board Game(最小费用流)

    题目大意是说有一个B矩阵,现在A是一个空矩阵(每个元素都为0),每次操作可以将A矩阵相邻的两个元素同时+1,但是有个要求就是A矩阵的每个元素都不可以超过K,求 这个的最小值 解题思路是这样的,新建起点 ...

  10. GC:垃圾回收器简介

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...