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;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发生重叠了。

最新文章

  1. iOS FONT字体名
  2. Hacker(六)----黑客藏匿之地--系统进程
  3. 可以改变文本行距(行间距)的Label
  4. Python_自定义栈
  5. 软件工程_8th weeks
  6. 2.Django|简介与静态文件| URL控制器
  7. 概念、DW介绍
  8. ural1519
  9. ssrf绕过总结
  10. underscore.js源码研究(6)
  11. Commonjs、AMD、CMD
  12. unity3d 几种镜头畸变
  13. RabbitMQ入门_05_多线程消费同一队列
  14. IntelliJ IDEA + Maven + Tomcat 本地开发、部署、调试。
  15. Android之安全机制
  16. centos7 搭建svn服务
  17. css左右布局,左侧固定,右侧自适应
  18. Ubuntu 14.04 下安装Skype
  19. Java实现的词频统计——功能改进
  20. socketserver用法列子

热门文章

  1. PHP 使用 GeoLiteCity 库解析 IP 为地理位置
  2. LeetCode 206. Reverse Linked List(迭代和递归两种实现)
  3. android greendao3.0 多表关联关系讲解(转)
  4. cnn 实例
  5. CentOS 7 mini 试用笔记
  6. mongodb 指南
  7. ubuntu 解决更换源失败问题
  8. 关于iphone自动播放音频和视频问题的解决办法
  9. VS2019取消git源代码管理
  10. Centos 初始化服务器防火墙没有启动找不到/etc/sysconfig/iptables