相关文档:

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. 错误记录:html隐藏域的值存字符串时出错

    问题 webform在后台给前台传值.  <input type="hidden" value="<%=userType %>" id=&qu ...

  2. php生成百度新闻源xml

    <?php /* http://baike.baidu.com/view/125547.htm#2 百度网新闻开放协议 */ mysql_connect($CFG['db_host'] ,$CF ...

  3. centos6.3 安装配置redis

    1.下载安装 1.1 下载包 注:在http://download.redis.io/releases查询需要下载的版本 wget http://download.redis.io/releases/ ...

  4. manacher算法_求最长回文子串长度

    很好的总结,转自: http://blog.csdn.net/dyx404514/article/details/42061017 总结为:两大情况,三小情况. 两大情况:I. i <= p 1 ...

  5. 机器学习(1)_R与神经网络之Neuralnet包

    本篇博客将会介绍R中的一个神经网络算法包:Neuralnet,通过模拟一组数据,展现其在R中是如何使用,以及如何训练和预测.在介绍Neuranet之前,我们先简单介绍一下神经网络算法. 人工神经网络( ...

  6. yum 安装 php5.6 和 mysql5.6

    安装 PHP rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm; rpm - ...

  7. Array.prototype.slice.call

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组 ,::'age'}; Array.prototype.slice.call(arr); ...

  8. sqlite 批量插入, 重复插入(更新)

    [FMDBManager inDatabase:^(FMDatabase *db) { [db shouldCacheStatements]; //开始启动事务 [db beginTransactio ...

  9. sqlserver中GUID的默认值设置

    sqlserver中GUID的默认值设置 YID uniqueidentifier not null default (NEWSEQUENTIALID()), //有序GUID(只能用于表设计的时候的 ...

  10. 应用dom4j读取xml的例子

    1. 样例xml <?xml version="1.0" encoding="UTF-8"?> <students> <stude ...