前端面试必备——外边距合并

因本人最近正忙于校招应聘,因此特此设计《前端面试必备》系列,总结面试问题并分享给你们,因能力不足,若有问题,敬请指正,特此感谢。html

块的顶部外边距和底部外边距有时候会被折叠为单个外边距,其大小为两值中的最大值,这种行为就被称为外边距合并。
通常发生外边距合并主要有如下三种状况:前端

  • 相邻兄弟姐妹元素
  • 父元素和子元素
  • 空元素

相邻兄弟姐妹元素

两个兄弟元素之间的外边距,会取两个元素外边距的最大值。面试

<p style="margin-bottom: 30px;">这个段落的下外边距被合并...</p>
<p style="margin-top: 20px;">...这个段落的上外边距被合并。</p>复制代码

按照上面的例子能够得出,两个p元素之间距离为30px。segmentfault

父元素和子元素

这种状况又能够分为如下两种:spa

  • 父元素的上外边距和第一个子元素的上外边距
  • 父元素的下外边距和最后一个子元素的下外边距

这两种状况,最终显示出来的结果都是取两者中的最大值。设计

空元素

本身的上外边距会和本身的下外边距合并code

<p style="margin-bottom: 0px;">这个段落的和下面段落的距离将为20px</p>

<div style="margin-top: 20px; margin-bottom: 20px;"></div>

<p style="margin-top: 0px;">这个段落的和上面段落的距离将为20px</p>复制代码

这样第一个p元素和第三个p元素之间距离为20pxhtm

阻止合并方法

这部分将讲解不会发生外边距合并的状况。get

通用方法

  1. 处于静态流元素会发生合并,因此floatposition:absolute都不会发生合并
  2. 设置为inline-block ,也不会发生合并

针对于父元素和子元素状况不合并方法

如下都不会发生合并string

  1. 设置了清除浮动属性
  2. 由于margin须要直接接触才能合并,因此父元素或子元素中有borderpadding,或者两者之间有元素

注意

  • 若是两个外边距值中有一个为0,也会发生合并。
  • 若是有负外边距,合并后外边距为最大正边距加上最小负边距(绝对值最大的一个),如上面元素下边距为20px,下面元素上边距为-20px,则最后为0px

参考资料

外边距合并MDN
「CSS」Margin Collapsing - 外边距合并


欢迎订阅掘金专栏知乎专栏

相关文章
相关标签/搜索