css为什么设置margin之后父元素跟着动起来了

这是一个经典的问题       “垂直外边距叠加”

            块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距,这种行为称为外边距塌陷(margin collapsing),有的地方翻译为外边距合并。

发生外边距塌陷的三种基本情况:

相邻的兄弟姐妹元素

               毗邻的两个兄弟元素之间的外边距会塌陷(除非后者兄弟姐妹需要清除过去的浮动)。例如:

这个段落的下外边距被合并......这个段落的上外边距被合并。

可以发现这两个段落中间的距离,不是 ”上面段落的下边距“ 与 ”下面段落的上边距“ 的 求和 ,而是两者中的较大者(在此示例中为30px)。

块级父元素与其第一个/最后一个子元素

                   如果块级父元素中,不存在上边框上内补、inline content、清除浮动这四条属性(对于上边框和上内补,也可以说,当上边距及上内补宽度为0时),那么这个块级元素和其第一个子元素的上边距就可以说”挨到了一起“。此时这个块级父元素和其第一个子元素就会发生 上外边距合并 现象,换句话说,此时这个父元素对外展现出来的外边距将直接变成这个父元素和其第一个子元素的margin-top的较大者。

                   类似的,若块级父元素的margin-bottom与它的最后一个子元素的margin-bottom之间没有父元素的borderpadding、inline content、heightmin-heightmax-height分隔时,就会发生 下外边距合并 现象。

空块元素

                   如果存在一个空的块级元素,其borderpadding、inline content、heightmin-height都不存在。那么此时它的上下边距中间将没有任何阻隔,此时它的上下外边距将会合并。例如:

这个段落的和下面段落的距离将为20px这个段落的和上面段落的距离将为20px,当以上情形同时出现时,外边距合并会更加复杂(会比较两个以上外边距来最终计算出真实的边距值)。

即使外边距为0,这些规则也仍旧生效。因此,无论父元素的外边距是否为0,第一个或者最后一个子元素的外边距会被父元素的外边距"截断"(根据上面的规则),在负外边距的情况下,合并后的外边距为最大正外边距与最小负外边距之和。

当有负边距存在时,合并后的外边距将是最大正边距加上最小负边距(即负边距中绝对值最大的一个)。

如两个兄弟元素,上面的元素的下边距为 20px ,下面的元素的上边距为 -20px ,那么发生外边距合并后,这两个元素的实际距离将变成 0px 。

浮动绝对定位元素外边距不会合并。

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,686评论 1 92
  • 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 特征: 脱离正常文档流,沿其容器的左侧...
    _Dot912阅读 4,042评论 0 3
  • margin合并是什么? 我们来简单看一下MDN对margin合并的解释: 块的顶部外边距和底部外边距有时被组合(...
    盛夏晚清风阅读 12,128评论 9 19
  • 前言 总括: 对于盒子模型,BFC,IFC和外边距合并等概念和问题的总结 原文地址:从CSS盒子模型说起 知乎专栏...
    秦至阅读 4,127评论 0 3
  • 最近有个项目,因为启用了新的Zabbix Server,需要把对主机的Zabbix 监控从版本2.2 迁移到3.2...
    eriolchan阅读 4,716评论 0 0