Margin Collapse&&BFC

上一篇中说道了position、display、float三兄弟,它们三者之间拥有各自的特性以及相互作用。而这些影响归根揭底都是盒子模型的位置问题,但盒子模型的位置问题不止是它们三者作用,还有本文中要说道的两位:Margin Collapse和BFC。

Margin Collapse翻译成中文是外边距塌陷,也可以说外边距叠加。他的定义是:

当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

外边距叠加有几种情况,借用W3School几张图作为直观说明:

第一种情况是两垂直盒子:

第二种情况是父子盒子:

第三种情况是空内容元素本身叠加:

第四种情况是空元素本身叠加又叠加另一个元素的外边距:

而在外边距叠加中有一个注意事项,只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。而且必须处于同一个BFC中。

因此,在外边距叠加问题中又出现一个新的概念,什么是BFC?

w3c规范中的BFC的定义:

浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。

也就是说,在BFC中的元素是不受外界影响的。

同样,也就是说明创建了新的BFC的元素(例如浮动元素或者’overflow’值为’visible’以外的元素)与它的子元素的外边距不会折叠。

当然,BFC同样可以应用在清除浮动的不利影响下。

生成BFC的方法:

根元素

float属性不为none

position为absolute或fixed

display为inline-block, table-cell, table-caption, flex, inline-flex

overflow不为visible

总结消除外边距叠加的方法:

创建BFC

元素为inline-block时,它与其兄弟元素、子元素和父元素的外边距都不会折叠

创建单侧margin值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,686评论 1 92
  • 建议在PC端阅读本文面向对象:对标题中的概念基本不了解或仅仅听说过名字的人。如果已有一定了解请直接拉到最下看推荐阅...
    粉肠w阅读 3,682评论 0 0
  • 1.盒模型是CSS的基石之一,它指定元素如何显示以及(在某种程度上)如何相互交互。页面上的每个元素被看作是一个矩形...
    garble阅读 3,564评论 0 0
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 4,558评论 0 2
  • 在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例块元素直接接触的垂直外...
    老虎爱吃母鸡阅读 3,283评论 0 0