CSS-margin折叠现象

样式设置Margin的时候会出现的有趣现象:

先给这样的一个页面:

        <style>
            #div_1{
                width: 400px;
                height: 300px;
                background-color: aqua;
            }
            #div_2{
                width: 50px;
                height: 50px;
                background-color:hotpink;
            }
            #div-3{
                width: 50px;
                height: 50px;
                background-color: yellow;
               
            }
        </style>

        <body>
        <div id="div_1">
            <div id="div_2">div2
            </div>    
            <div id="div-3">div3
            </div>

        </div>

        </body>

 然后只给div2设置外边距:margin-top: 50px;

#div_2{
    width: 50px;
    height: 50px;
    background-color:hotpink;
    margin-top: 50px;
}

 只添加margin-bottom

#div_2{
    width: 50px;
    height: 50px;
    background-color:hotpink;
    margin-bottom: 50px;
}

 只添加margin-left

#div_2{
    width: 50px;
    height: 50px;
    background-color:hotpink;
    margin-bottom: 50px;
}

         这时我并未给蓝色div设置边距,所以蓝色div应该不会移动,对比之下,可以发现添加左右边距时,蓝色的div1并没有移动,添加上边距时,div1随着一起向下移动了???

        这就是我想说的margin折叠现象。

        父级div1会随着子级div2设置边距margin-top也出现边距。

        那我给div加上浮动呢?float:left;结果如下:

        可以清楚的看到蓝色div1是没有上边距的:

        那我们再给div3加上margin-top: 50px;

 蓝色div1此时也是没有边距的。

父级元素第一个非浮动的子级元素添加margin-top时,会自动的添加在父级元素上。

那给父元素加上边框看看:

            #div_1{
                width: 400px;
                height: 300px;
                background-color: aqua;
                border: 1px solid black;
            }

            #div_2{
                width: 50px;
                height: 50px;
                background-color:hotpink;
                margin-top: 50px;
            }
            #div-3{
                width: 50px;
                height: 50px;
                background-color: yellow;
 
            }

此时的蓝色div1也没有边距。也就是说: 

一个没有边框的父级元素第一个非浮动的子级元素添加margin-top时,会自动的添加在父级元素上。

以上加边框的方法可以解决,其实也可以给div1添加padding-top:50px;

            #div_1{
                width: 400px;
                height: 300px;
                background-color: aqua;
                /* border: 1px solid black; */
                padding-top: 50px;
            }

            #div_2{
                width: 50px;
                height: 50px;
                background-color:hotpink;
                /* margin-top: 50px; */
            }
            #div-3{
                width: 50px;
                height: 50px;
                background-color: yellow;
            }

 那我们再看看兄弟元素

            #div_1{
                width: 400px;
                height: 300px;
                background-color: aqua;
            }
            #div_2{
                width: 50px;
                height: 50px;
                background-color:hotpink;
                margin-bottom: 50px;
            }
            #div-3{
                width: 50px;
                height: 50px;
                margin-top: 50px;
                background-color: yellow;
            }

这里我们给div2设置了下边距margin-bottom: 50px;,给div3设置了上边距margin-top: 50px;,但很明显div2和3之间的距离不是100px,是50px;

            #div_1{
                width: 400px;
                height: 300px;
                background-color: aqua;
            }
            #div_2{
                width: 50px;
                height: 50px;
                background-color:hotpink;
                margin-bottom: 10px;
            }
            #div-3{
                width: 50px;
                height: 50px;
                margin-top: 50px;
                background-color: yellow;
            }

 

这里我们给div2设置了下边距margin-bottom: 10px;,给div3设置了上边距margin-top: 50px;,但很明显div2和3之间的距离不是60px,是50px;

再给div2设置了下边距margin-bottom: 50px;,给div3设置了上边距margin-top: 10px;,结果没有变化。

也就是说,相邻的元素之间的同一块区域设置margin时,只有最大的那个边距生效,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值