博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从0开始学习BFC
阅读量:6650 次
发布时间:2019-06-25

本文共 1219 字,大约阅读时间需要 4 分钟。

为什么需要BFC?

    

1

2

3

复制代码

最常见的问题就是margin折叠。div1和div2之间的间距是20px,而不是预想的40px。该问题创建BFC就可以解决,因为BFC不会影响其他元素的布局。

BFC是什么?

BFC:Box Formatting Context,直译为块级格式化上下文。在中定义的一个关于css渲染定位的概念。BFC是一个独立的渲染区域,规定该区域内部的box 如何布局,并且与这个区域的外部毫不想干。

在CSS2.1规范中,还定义了Inline formatting context(IFC)。CSS3中添加了G(grid)FC和F(flex)FC

如何创建BFC?

详情请看

这里写个总结,满足以下条件之一的元素便会生成BFC。

  • 根元素
  • 浮动元素: float的值不为none
  • 绝对定位元素: position的值为absolute或fixed
  • 行内块元素: display: inline-block
  • 表格单元格: display的值为table-cell,table-caption
  • overflow的值不为visible的元素
  • 弹性盒子 display:flex或inline-flex

BFC的规则是什么?

  1. 内部的box会在垂直方向上一个接一个放置。
  2. 垂直方向的距离有margin决定,属于同一个BFC的两个相邻box的margin会发生重叠,与方向无关。
  3. 每个元素的margin box的左边与包含块border box的左边相接触。存在浮动也是如此。
  4. BFC的区域不会与float的元素区域重叠。
  5. 计算BFC的高度时,浮动子元素也参与计算。
  6. BFC就是页面上的一个隔离的独立容器,容器里的子元素不会影响到外面元素,反之亦然

回归问题

文章开头的问题?

三个div同属于一个BFC(此处是body)中,所以根据规则第二点,margin会发生重叠。

解决方案:

p标签外在添加一个容器,并设置属性overflow:hidden。这样就产生了3个BFC,3个p在3个不同的BFC中,就不会产生margin重叠的问题。

  

1

1

1

复制代码

除了margin重叠还有其他的作用吗?

  1. 清除浮动
  
box1
box2
复制代码

参考规则第五点,计算BFC的高度时,浮动子元素也参与计算。形成BFC后,par就会把浮动子元素的高度也计算进去。

2.
不和浮动元素重叠

  
复制代码

形成自适应两列布局。应用了BFC规则第四点。

转载于:https://juejin.im/post/5ca3046ff265da30ba5b0c5b

你可能感兴趣的文章
jqueryMobile框架页面与页面切换
查看>>
对PostgreSQL中tablespace 与 database, table的理解
查看>>
图像编辑之一键特效(Lomo,反转负冲,柔光)
查看>>
android中checkbox的padding引发的问题
查看>>
mvn dependency:tree
查看>>
使用GoodFeaturesToTrack进行关键点检测---29
查看>>
Android自定义控件View(一)
查看>>
使用下拉列表框<select>标签,节省空间
查看>>
参考SQLHelper编写的OracleHelper
查看>>
C/C++中的getline函数总结:
查看>>
[Angular 2] Handle Reactive Async opreations in Service
查看>>
linux下操作PostgreSQL的常用命令
查看>>
C# Webservice
查看>>
Spring学习笔记1——IOC: 尽量使用注解以及java代码(转)
查看>>
【转】雪崩光电二极管(APD)偏置电源及其电流监测
查看>>
iOS设置圆角的三种方式
查看>>
C#ShowCursor光标的显示与隐藏
查看>>
PHP 正则表达式匹配函数 preg_match 与 preg_match_all
查看>>
关于CAShapeLayer的一些实用案例和技巧
查看>>
Unity又称Unity Application Block
查看>>