margin到底相对谁?

27 篇文章 0 订阅

margin垂直方向上存在以下问题:

  • 外边距合并现象
    • 如果两个div上下排列,给上面div设置margin-bottom,给下面div设置margin-top,那么两个margin会发生合并现象,会取较大的margin值。
    • 注意:左右不会发生 外边距合并现象
  • 上下塌陷现象
    • 一个大盒子 中包含一个小盒子,给小盒子设置一个margin-top,大盒子会一起向下平移。
    • 注意:margin左右没有塌陷现象

如果父元素在子元素的margin的同向上有padding或border的话,子元素的margin相对于父元素,否则相对于父元素以外的元素。

上面这句总结不要记住,理解原理:就是BFC,可以参考我的一篇博客:高度坍塌问题-BFC解析

我们还是看例子吧:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>margin</title>
<style type="text/css">
    .parent{width: 300px;line-height: 1.8; outline: 1px dashed red;}
    .sample{height: 150px;background-color: pink;}
    .sb{width: 300px;height: 150px;background-color: #0ff;}
    .sample{margin-bottom: 50px;}
</style>
</head>
<body>
    <div class="parent">
        <div class="sample">sample</div>
    </div>
    <div class="sb">after</div>
</body>
</html>

此时父元素在子元素的margin的同向上(bottom)没有padding或border,子元素的margin相对于父元素以外的元素。红色框包围的是父元素,效果如图:

这里写图片描述

这个时候,如果给父元素添加下边框(与子元素margin同向)的话,css为:.parent{border-bottom: 5px solid red;} 那么子元素的margin相对于父元素。效果如下:

这里写图片描述

如果我们不加边框而是增加下内边距(与子元素margin同向)的话,css为:.parent{padding-bottom: 50px;}
那么子元素的margin相对于父元素(为了看到内边距效果,可以在父元素上设 .parent{outline: 1px dashed red;})。效果如下:

这里写图片描述

padding或者border会产生BFC,此外还有很多情况会产生BFC,但是padding和border只会产生对应方向上的。比如我这里只设置padding-bottom,若子元素还有margin-top:10px、那么top仍然会产生这个现象。

最后,真的好好理解BFC。

可以参考我的一篇博客:高度坍塌问题-BFC解析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值