margin塌陷、margin合并的解决方案

前端的日常大多还是跟样式打交道,快速渲染页面和解决样式bug是一个合格的前端最基础的能力,这次记录一下两个样式小问题:margin塌陷和margin合并。

margin塌陷

问题起源:

在有父子关系的子元素里,期望让子元素距离父元素的顶部50px,如果直接只给子元素margin-top:50px会怎样呢?

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
*{
    margin: 0px;
}
.father{
    width: 200px;
    height: 200px;
    background-color:red
}
.son{
    width: 100px;
    height: 100px;
    background-color: yellow;
    margin-top: 50px;
}
</style>
<body>
<div class="father">
    <div class="son">
    </div>
</div>
</body>
</html>

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

由效果图我们可以发现,子元素并没有如我们所期待的那样距离父元素顶部50px,而是让父元素距离顶部有了50px的距离,也就是父元素的顶棚对子元素来说没有作用,相当于塌陷下来了,这就是所谓的margin塌陷。

解决方案:

方案1: 子元素的margin-top改为padding-top
方案2:给父元素添加样式overflow:hidden,触发BFC

由此延伸一下BFC的知识点:

BFC,块级格式化上下文,它是一个独立的渲染区域,让处于BFC内外的元素相互隔离,使内外元素的布局不会相互影响。

触发BFC的几种方式:

1. overflow不为visible
2. float 不为none
3. position 为absolute/fixed
4. display 为inline-block/table-cell/table-caption

margin合并

问题起源: 两个兄弟元素,一个设置下边距为50px,一个设置上边距为30px,那么它们之间的间距是否是80px呢?

代码实现:

*{
    margin: 0px;
}
div{
    width: 200px;
    height: 200px;
}
.bro1{
    margin-bottom: 50px;
    background-color: yellow;
}
.bro2{
    margin-top: 30px;
    background-color: green;
}

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

由审查元素的效果图我们可以发现,两个元素之间的间距是50px,也就是它们的margin-top和margin-bottom合并了,显示的是较大值。

解决方案:
方案1: 给其中一个兄弟元素套一个父元素,并且设置为overflow:hidden
在这里插入图片描述

方案2:通过数学计算的方式只给其中一个元素margin-top或margin-bottom,比如给bro1 margin-bottom:80px

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值