详解margin坍塌与合并

在网页布局中,有时需要设置css外边距(margin), 但是会出现css外边距合并(即重叠)的情况。

外边距塌陷 – 父子元素叠加

现象

css外边距塌陷是指两个垂直相邻的块级父子元素,当上下两个边距相遇时,外边距会产生重叠的现象,且重叠后的外边距等于其中较大者。

  • 如果一方有margin-top,则父子盒子一起有同样值上外边距;
  • 如果两方都有margin-top,则父子盒子取较大值的上边距;

效果图如下:

解决方法

  • 给父元素加边框 border(值可以是1px)(不推荐)
  • 给父元素加内边距 padding(值可以是0.02px,或者直接设置以达到想要 的效果)(不推荐)
  • 父元素触发 BFC(推荐)

BFC:Block Formatting Context块级格式化上下文,BFC决定了元素对其内容定位,以及当前元素与其他元素之间的关系和相互作用。其目的就是形成一个独立的空间,让空间中的子元素不会影响到这个独立空间之外的布局。这样我们在写页面的时候就可以根据自己的需求,选择一些比较合适的解决方案。

小结触发BFC方法:

  • 子元素或者父元素的float不为none,即为leftright
  • 子元素或者父元素的position不为relativestatic,即为absolutefixed
  • 父元素的overflowautoscrollhidden
  • 父元素的display的值为flexinline-blocktable-celltable-caption

外边距合并 – 相邻元素叠加

现象

这个比较好理解, 相邻的两个元素, 如果它们的上下边距相遇,即会产生叠加。

这种现象发生在两个并列的元素之间。给一个元素设置下外边距(margin-bottom),并同时给一个元素设置上外边距(margin-top)。两个元素之间的距离不等于这两个外边距之和,而是等于其中最大的一个外边距。

  • 若值相同,则其中一个margin会不起作用;
  • 若值不同,则只有值较大的会起作用;

效果图如下:

解决方法

  • 只设置其中一个值就可以了(推荐)

在实际的开发中,可以根据自己的需求,设置其中一个元素的margin相加的值即可。比如本例中,可以设置第一个元素的margin-bottom的值而不设置第二个元素的margin-top值。反之亦然。

  • 每个要设置外边距的元素,套上一个触发 BFC 的 父元素(不推荐)
<div class="wrap">
	<div class="top"></div>
</div>
<div class="wrap">
	<div class="tottom"></div>
</div>
.wrap {
    overflow: hidden;
}
.top {
    width: 200px;
    height: 200px;
    background: red;
    margin-bottom: 50px;
}
.tottom {
    width: 200px;
    height: 200px;
    background: black;
    margin-top: 30px;
}

添加父元素,会改变html的搭配结构,所以这种方式不是很推荐大家使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

定栓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值