子元素的垂直margin值对父元素的影响

首先得说一下 margin折叠
所谓margin折叠,即相邻的不同margin值有可能会被折叠成同一个margin值。看清楚哦,只是有可能会。至于哪些是相邻元素?哪些又会存在折叠?
这个链接https://blog.coding.net/blog/css-margin里阐述很全面。

这里只分析子元素的垂直margin值对父元素的影响
(HTML结构:灰色父块,红色子块,绿色子块,白色父块,黄色子块。两父块相邻)

第一种情况:父块 没有padding、没有border边框时

HTML结构

<body>
    <div class="parent">
        <div class="son1"></div>
        <div class="son2"></div>
    </div>

    <div class="parent2">
        <div class="son3"></div>
    </div>
</body>

CSS样式

<style type="text/css">
    body{ background:#CF9; }
    body,div{ margin:0;padding:0; }
    .parent{ 
        background:#ccc;
        width:400px;
        margin-left:10px;   

    }
    .parent2{
        background:#eee;
        width:400px;
        margin-left:100px;
    }
    .son1{  
        background:red;
        height:50px;
        opacity:0.5;
        width:50%; 
        margin-left:10px;
        margin-top:20px;        
    }
    .son2{
        background:green;
        opacity:0.5;
        width:50%;
        height:50px;
        margin-top:20px;
        margin-left:10px;
        margin-bottom:-20px;
    }
    .son3{
        height:100px;
        background:#CF3;
        width:50%;
        margin-left:100px;      
    }   
</style>

浏览器显示结果如下:
(黄绿色为body部分,灰色为第一个div父块,红色和绿色为div子块,白色为下一个div父块)
红色子块设置了margin-top值为20px,而灰色父块设置的margin-top值为0px,
绿色子块设置margin-bottom值为-20px,灰色父块设置margin-bottom值为0px。

此时父块没有padding、没有border边框
结果是灰色父块受到了影响,它实际的margin-top值变为20px,margin-bottom值变为-20px
此时第二个父块(白色父块)也受相邻灰色父块影响,margin值发生折叠,因此白色父块的margin-top变成了-20px,因此会覆盖掉灰色父块的20像素的高度。
(不明白的请查看上面链接中的“折叠后的margin大小”)
这里写图片描述

当绿色子块margin-bottom值为+20px时结果如下:

同理第一个父块受到了影响,它的margin-bottom值变为20px,而第二个父块的margin-top值也变为+20px
这里写图片描述

第二种情况:第一父块 padding:1px;
CSS样式增加一行代码
.parent{padding:1px;}

浏览器显示如下:
红色子块设置了margin-top值为20px,而灰色父块设置的margin-top值为0px,
绿色子块设置margin-bottom值为-20px,灰色父块设置margin-bottom值为0px。

此时灰色父块的margin-top值不会再受红色子块的影响。灰色父块的margin-bottom值也不受绿色子块的影响,即它的margin-top和margin-bottom值仍然为0px,
但是因为绿色子块的margin-bottom值为-20px,因此相邻的父块底边界会上移,绿色子块溢出,采用overflow:hidden可以隐藏溢出部分。
白色父块margin-top值也仍然为0px,和第一父块相接。
这里写图片描述

绿色子块margin-bottom值为+20px时结果如下:
灰色父块的margin-top不会再受红色子块的影响。灰色父块的margin-bottom也不受绿色子块的影响,
即它的margin-top和margin-bottom值仍然为0px,
这里写图片描述

第三种情况:border:1px solid black;
第一种情况基础上的CSS样式增加一行代码
.parent{border:1px solid black;}
浏览器效果与第二种情况相同,只是多了边框,道理基本相同
红色子块设置了margin-top值为20px,而灰色父块设置的margin-top值为0px,
绿色子块设置margin-bottom值为-20px,灰色父块设置margin-bottom值为0px。
这里写图片描述

绿色子块设置margin-bottom值为+20px
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值