码迷,mamicode.com
首页 > 其他好文 > 详细

bfc

时间:2015-09-15 01:34:46      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

1.  BFC(block formatting context,中文常译为块级格式化上下文)是  W3C CSS 
2.1  规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关
系和相互作用。
在进行盒子元素布局的时候, BFC 提供了一个环境, 在这个环境中按照一定规则进
行布局不会影响到其它环境中的布局。比如浮动元素会形成 BFC,浮动元素内部子元素
的主要受该浮动元素影响,两个浮动元素之间是互不影响的。
也就是说,如果一个元素符合了成为 BFC 的条件,该元素内部元素的布局和定位
就和外部元素互不影响(除非内部的盒子建立了新的  BFC), 是一个隔离了的独立容器。
在  CSS3  中,BFC  叫做  Flow Root。
2.  形成 BFC 的条件(符合以下任一条件即可): 
1)  float 的值不为 none;
2)  overflow 的值不为 visible;
3)  display 的值为  table-cell、table-caption 和 inline-block 之一;
4)  position 的值不为  static 或  relative 中的任何一个;
3.  BFC 常见作用
1)  包含浮动元素
BFC 会 根据子元素的情况自 适应 高度 ,这个 特性 是 对父元素 使 用
overflow:hidden/auto/scroll、 float:left/right 样式可以闭合浮动的
原理。
此外 网上 有 资 料 说 使用 display:table 可以 隐 式 触 发 table-cell/table-caption,来创建 BFC。
<div style="border:1px solid #00F;overflow:hidden;width:300px;">
<div style="float:left;background:#939;">我的父元素是 BFC</div>
</div> 
<div style="line-height:3em;">----------我是华丽分割线-----------</div>
<div style="border:1px solid gray;width:300px;">
<div style="float:left;background:#3C6;">我的父元素不是 BFC</div>
</div>
上面的例子中,有两个  div  ,它们各包含一个设置了浮动的 div 元素,但
第二个 div 出现了“高度塌陷”,这是因为内部的浮动元素脱离了普通流,因此
该  div  相当于一个空标签,没有高度和宽度,即高度为  0  ,上下边框也重叠在
一起。而第二个 div 使用 overflow: hidden 创建了  BFC ,可以包含浮动
元素,因此能正确表现出高度,其边框位置也正常了。
PS:此方法只能在支持 BFC 的浏览器(IE8+, firefox, chrome, safari)通
过创建新的 BFC 闭合浮动;在不支持  BFC 的浏览器 (IE6-7),需要通过触发
hasLayout  闭合浮动。
2)  不被浮动元素覆盖
浮动元素会无视兄弟元素的存在, 覆盖在兄弟元素的上面, 为该兄弟元素创建
BFC 后可以阻止这种情况的出现,如下示例:
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div>
<div style="width:200px;height:80px;background:#30F;color:#fff;">
我是非浮动元素,并且没有创建 BFC
</div>
<div style="line-height:3em;">----------我是华丽分割线-----------</div>
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div> 
<div 
style="width:200px;height:80px;background:#30F;color:#fff;display:inl
ine-block;">
我是非浮动元素,创建了 BFC
</div>
效果图所示,蓝色背景的元素通过 display:inline-block 创建了 BFC,
则浮动的兄弟元素就不覆盖在该元素上面了。
以上的情况仅是元素宽度之和没有超出父元素宽度的情况,假设浮动元素宽度
和它的非浮动兄弟元素宽度都超过了父元素的宽度,非浮动元素会下降到下一行,
即处于浮动元素下方,如下所示:
<div style="width:300px;">
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div>
<div 
style="width:200px;height:80px;background:#30F;color:#fff;overflow:hi
dden;">
我是非浮动元素,创建了 BFC
</div>
</div>
3)  阻止父子元素的 margin 折叠
在 《认识 margin 折叠》 一文中讲过外边距折叠的规则:仅当两个块级元素毗
邻并且在同一个块级格式化上下文时,它们垂直方向之间的外边距才会叠加。也就
是说,即便两个块级元素相邻,但当它们不在同一个块级格式化上下文时它们的边
距也不会折叠。示例如下。
<div style="margin-top:20px;background:yellow;width:300px;">
<div style="margin-top:20px;">
我的上外边距是 20px,父级元素不是 BFC
</div>
</div>
<div style="margin-top:20px;background:yellow;overflow:auto;width:300px;">
<div style="margin-top:20px;">
我的上外边距是 20px,父级元素是 BFC
</div>
</div>

bfc

标签:

原文地址:http://www.cnblogs.com/liboives/p/4808995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!