深入分析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发生重叠了。

时间: 2024-09-15 08:35:07

深入分析CSS布局中BFC及例子应用的相关文章

DIV+CSS布局中的兼容性问题hack做法

DIV+CSS布局中的兼容性问题,除了一些小技巧外,常常还需要结合CSS Hack写法来解决.CSS Hack的原理是针对各浏览器对CSS属性的支持和解析结果不同,以及CSS执行中的优先级问题,来针对不同浏览器写不同的CSS. 1)IE中浮动错位问题 经常,我们定义一个DIV浮动的时候,特别是CSS里有用到margin属性,Mozilla Firefox正常,但是IE中这个DIV会跑到下一行去,解决办法很简单,你只需要在你的CSS属性里加上句:display:inline,如:  代码如下 复制

CSS布局自适应等分比例例子

CSS等比例划分,在CSS布局中是比较重要的,下面分享几种常用方法和探讨一下兼容性. 一:浮动布局+百分比  代码如下 复制代码 emmet html代码:ul.float-ul>li*5>.con>h3{等分标题}+p{等分内容等分内容} .float-ul{width: 100%; overflow: hidden; zoom: 1;} .float-ul li{float: left; width: 20%;} 该样式兼容性较好,但是无法实现当里面的列增多时比例也随着变化,必须手动

如何使文本在DIV+CSS布局中垂直居中

css DIV+CSS布局中垂直居中的实现. <html><head><style>body{TEXT-ALIGN: center;}#center{ MARGIN-RIGHT: auto;MARGIN-LEFT: auto;height:200px;background:#F00;width:400px;vertical-align:middle;line-height:200px;}</style></head><body><

CSS布局中自适应高度的解决方法

css|解决|自适应 这是div+css布局中经常会碰到的基础问题,个人觉得采用背景图填充的方法,还是比较简单和切实可行的.最终效果. CSS源代码: body{ background: #EDEDED; font-size: 70%; font-family: Arial, Helvetica, sans-serif; line-height: 130%; color: #666666; margin: 0; padding: 0; text-align: center; } #layout{

XHTML+CSS布局中兼顾SEO的两点建议

  XHTML+CSS布局模式因其表现和内容相分离,提高搜索引擎对网页的索引效率,代码简洁.提高页面浏览速度,易于维护和改版等众多优点而在广泛地被人们所接受.以下笔者结合手机商务类网站,对XHTML+CSS布局中兼顾SEO进行一些总结,希望能给站长同仁一些有益的参考. 一.做好网页的架构分析工作,是设计好网页的前提 一个拥有高访问量的网站是成功网站的一个衡量因素,我们在设计网页时要根据主题的不同进行合理的板式选择和色彩配,将网站要达到的宣传效应通过合理搭配而构成的美丽页面来吸引客户的兴趣,促使他

div+css布局中header部分的优化

在div+css布局中,一般都这样来整体构架的: <div id="header"></div><div id="center"></div><div id="footer"></div>而对于header部分,肯定要显示网站标题,除了显示网站标题外,还可能要显示其他比较重要的对象,比如网站的导航栏: <div id="header"> <

CSS布局中最小高度的妙用

css 最小高度可以设定一个BOX的最小高度,当其内容较少时时,也能保持BOX的高度为一定,超出就自动向下延伸,但到目前为止,只有Opera 和 Mozilla 支持,IE7开始也支持了,但IE7处于测试阶段,等正式版发布到普及需一段也许比较长的时间,除非MS把它捆绑在某个操作系统上,如何在现有基础上(IE6 80-90%),合理.妙用最小高度了? 假定有二个BOX,我们需要它的最小高度为150PX. CSS      div.box1,div.box2{      width: 300px; 

简述CSS布局中的基础知识

刚接触设计工作的朋友不得不使用CSS,本文就简单介绍一些在使用CSS的时候经常用到的一些属性的使用信息,希望对你有所帮助. 一.可设置的CSS属性包括:字体属性.文本属性.颜色及背景属性.边框属性.容器属性(边距属性.填充属性).分类属性.鼠标属性. 二.基础属性 字体属性:font-family font-style font-variant font-weight font-size 文本属性:word-spacing letter-spacing text-decoration verti

DIV+CSS布局中如何组织样式表以便于简化和维护

对于简单的Web站点,可以只使用一个CSS文件.对于大型的复杂站点,对样式表进行分割以便简化维护是一种好做法.如何分割样式表是需要仔细考虑的.我一般用一个CSS文件处理基本布局,用另一个文件处理版式和设计修饰.这样的话,在布局确定之后,就很少需要修改布局样式表.这可以防止布局样式表被意外地改动或破坏. 还可以进一步细分,比如用单独的CSS文件处理颜色.这样的话,如果希望提供新的颜色方案,就只需要创建一个新的颜色样式表.如果站点上有许多表单,那么可以用单独的CSS文件处理所有表单样式.可以只在需要