css-margin塌陷、margin合并

本次博客主要记录两个经典css的bug:margin塌陷margin合并。在讲这个两个问题之前我们先用html与css构建一个黑色的方框包裹一个红色方框的效果以便于后续的对比:

    <div class="wrapper">
        <div class="box"></div>
    </div>
*{
    padding: 0;
    margin: 0;
}
.wrapper{
    width: 100px;
    height: 100px;
    margin-left: 100px;
    background-color: black;
}
.box{
    width:50px;
    height: 50px;
    background-color: red;
}

效果:
在这里插入图片描述

一、Margin塌陷

1.1、问题描述

我们在上述代码上在红色方框的css中添加:margin-left:50px;也就是期望红色的方框在黑色方框中向右平移50px:

.box{
	margin-left:50px;
    width:50px;
    height: 50px;
    background-color: red;
}

效果:
在这里插入图片描述
可以发现效果与我们预想的一致。但是我们将margin-left:50px换成margin-top:50px之后(也就是期望红色的方框在黑色方框中向下平移50px):

.box{
    margin-top:50px;
    width:50px;
    height: 50px;
    background-color: red;
}

**效果:效果:
我们会发现渲染效果并不是和我们预想的一样,而是直接带着黑色方框一起向下平移了50px。这个渲染效果与我们设想效果的不一致就是margin塌陷造成的。
margin塌陷其实是一种很形象化的说话。把margin-top看作一个顶棚。黑色的顶棚在红色的顶棚上面。本来红色的顶棚是要相对于黑色下移的,但是黑色的顶棚塌了,所以红色就直接相对于浏览器下移了

1.2、解决办法

  • 顶棚塌陷了修好顶棚:在黑色方框的css上加上:border-top:1px solid black
.wrapper{
    width: 100px;
    height: 100px;
    margin-left: 100px;
    background-color: black;
    border-top:1px solid black;
}

这个方法看上去就不太好。在公司里一般代码审核不能通过

  • 触发BFC:
    凡是带有以下属性中的一种或几种的元素,都能改变margin塌陷的问题:
    1)position:absolute
    2)display:inline-block
    3)float:left/right
    4)overflow:hidden
    比如在黑色方框中加上overflow: hidden;
.wrapper{
    overflow: hidden;
    width: 100px;
    height: 100px;
    margin-left: 100px;
    background-color: black;
}

上述两种解决办法的效果:
在这里插入图片描述

二、Margin合并

2.1、问题描述

比如以下两个盒子,左边的margin-right:50px;右边的margin-left:60px:最后两者之间的间距为60px。这就是margin合并(取二者的最大值):
在这里插入图片描述

2.2、解决办法

margin合并无需解决,计算好两个盒子之间的间距就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值