包含(父子)元素外边距合并解析

外边距合并在实际应用中存在一定意义。但有时会造成一些意想不到的效果。(有点乱,有时间再改)

1.2个多更多个相邻块级元素在垂直外边距相遇时,会将垂直方向上的2个外边距合并为一个外边距


现象:如果发生合并的外边距全部为正值,则合并后的外边距的高度等于这些发生合并的外边距的高度值中的较大者;如果发生合并的外边距不全是正值,则会拉近2个块级元素的垂直距离,甚至会发生重叠现象。


2.父子元素外边距合并:

现象:当父元素没有内容 或 内容在子元素的后面且没有内边距或没有边框时,子元素的上外边距将和父元素的上外边距合并为1个上外边距,且值为最大的那个上外边距,同时该上外边距作为父元素的上外边距。

2.如何防止这种情况:

只需在子元素前面设置父元素内容 或 保持父元素内容不变的情况下添加内边距或添加边框或使用浮动或绝对定位或使用一些条件触发BFC

如下例子所示:原来是想设置b和c之间的边距,最后的效果是a和b的边距:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            height:100px;
            font-size:36px;
            color:#000;
            text-align: center;
        }
        .a{
            width:100px;
            background: pink;
        }
        .b{
            width:200px;
            height:160px;
            background :yellow;
        }
        .c{
            width:100px;
            background: #aae8ae;
            margin-top:20px;/*对盒子添加上外边距,目的是b和c之间的边距,但是效果却是a和b之间的边距*/
        }
    </style>
</head>
<body>
    <div class="a">A</div>
    <div class="b">
        <div class="c">C</div>
        B
    </div>
</body>
</html>

所以要取消B和C的外边距合并,且保持内容位置不变的情况下,可以给父级盒子B加内边距、给父级B加上边框、使用浮动或绝对定位、触发BFC来防止外边距合边。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            height:100px;
            font-size:36px;
            color:#000;
            text-align: center;
        }
        .a{
            width:100px;
            background: pink;
        }
        .b{
            width:200px;
            height:160px;
            background :yellow;
            display: inline-block;/*触发BFC*/
        }
        .c{
            width:100px;
            background: #aae8ae;
            margin-top:20px;/*对盒子添加上外边距,目的是b和c之间的边距*/
        }
    </style>
</head>
<body>
    <div class="a">A</div>
    <div class="b">
        <div class="c">C</div>
        B
    </div>
</body>
</html>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值