开发者社区> 问答> 正文

使用不同方法创建的bfc有无区别?

按现在的理解,要解决两个段落间边距合并,要在一个段落外套一个div,并设置overflow: hidden;,如下:

<div>
 <p>1<p>
 <div class="bfc">
  <p>2</p>
 </div>
</div>

.bfc{
  overflow: hidden;
}

1.但是,既然设置overflow之后,按理就已经触发了bfc,为何不能在第二个p标签中设之overflow属性而非要再添加一个div才能生效?也就是,下面这样为什么不能生效?

 <div>
  <p>1</p>
  <p class="bfc">2</p>
 </div>

2.如果用display: inline-block;来触发bfc,为什么上面这个就可以了?

谢谢!

展开
收起
杨冬芳 2016-06-17 11:01:20 1976 0
1 条回答
写回答
取消 提交回答
  • IT从业

    "触发bfc能解决margin collapse"这句话本身就有问题,触发bfc(这句话其实也有问题,更确切的说法是建立的新bfc(establish new block formatting context),bfc是个名词啊)之所以能解决margin collapse,是因为margin collapse的一个前提条件是“处于同一bfc下的相邻元素可能发生margin collapse”,新建bfc影响的是子元素所处的bfc,自身所处的bfc不受影响,故父元素新建bfc使得父元素在老bfc下,子元素在父元素新建立的bfc下,所以生效,但是若子元素新建bfc,那么父元素和子元素仍然处于原有的bfc下,子元素的子元素才处于新的bfc下,既然父子元素仍然处于同一bfc,当然不生效啦。
    另inline-block触发ifc,ifc下永远不发生maragin collapse。

    2019-07-17 19:42:11
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多