CSS布局:BFC理解及应用
1、什么是BFC
BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。
通俗讲,BFC就是一种布局方式,在创建了 BFC后,其子元素会一个接一个地放置:盒子们自所在的 containing block 顶部起,水平方向上一个接一个撑满整个宽度,垂直方向上他们的起点是包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性。在 同一个BFC中,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有间隔(即父元素的边框,非空内容,padding等)就会发生margin重叠,即margin会发生重合。更重要的是:创建BFC,能消除元素对相邻元素的布局影响,常见的应用 是:使用overflow:hidden创建BFC ,来清除浮动元素对后面元素的布局影响 。
2、如何创建BFC
当一个HTML元素满足下面条件的任何一点,都可以产生BFC:
float的值不为”none” (如:float:left/right)
overflow的值不为”visible”(如:overflow:hidden)
display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个
position的值不为 “static” 或 “relative”中的任何一个(如:position:absolute)
3、BFC的作用
1.不和浮动元素重叠
如果一个浮动元素后面跟着一个非浮动的元素,那么就会产生一个覆盖的现象,很多自适应的两栏布局就是这么做的。比如下图的效果,参考例子:
<style> *{margin: 0;padding: 0;} .userinfo{width: 200px;height: 200px;background-color: #f00;color: #fff;overflow: hidden;padding: 10px;_zoom:1;} .userinfo a{width: 80px;height: 80px;background-color: #080;float: left;margin-right: 5px;} .userinfo .txt{overflow: hidden;line-height: 20px;padding: 0 5px;*zoom: 1;}/* overflow: hidden;触发bfc;zoom: 1;触发ie的haslayout以达到同bfc一样的显示效果 */ </style> <div> <a href="#"><img src="" alt="用户头像" /></a> <div> <p>您好, <b>xxxx</b></p> <p>一段文字描述!一段文字描述!一段文字描述!一段文字描述!</p> </div> </div>
2.清除元素内部浮动
只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就可以了(IE Haslayout)。
3.嵌套元素Margin边距折叠问题的解决
按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如没有边框,非空内容,padding等)就会发生margin重叠。
因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠了。