解决margin击穿的几种方法

2019-11-13 17:08:32 浏览数 (1)

前端开发过程中经常会遇到这种问题,明明设置的是子元素的margin值,结果却作用在了父元素上,例如的代码:

HTML部分:嵌套两层div

代码语言:javascript复制
<div class="box">
    <div class="inner">
        margin击穿
    </div>
</div>

style/css部分:给元素设置宽高和背景,便于观察,给内部的自元素设置一个 100px 的上边距。

代码语言:javascript复制
.box{
    margin: 0 auto;
    background: red;
    width: 500px;
    height: 300px;
}
.inner{
    margin-top: 100px;
    background: green;
    color: #FFF;
    width: 200px;
    height: 100px;
}

我明明只设置了子元素 .inner 的 margin 值,结果这个 100px 的 margin-top 却作用在了父元素 .box 上,运行结果如下图,这就是所谓的margin击穿。

margin 击穿就是两个元素嵌套,哪个 margin 较大则哪个生效。

解决 margin 击穿的方法有以下几种:

1、给父元素加一个边框

代码语言:javascript复制
.box{
    1px solid #000;
}

缺点:会多一个边框,不可取。

2、在父元素添加 overflow:auto; (推荐) 或者 overflow:hidden;

代码语言:javascript复制
.box{
    overflow:auto;
}

3、给子元素设置 display:inline-block;

代码语言:javascript复制
.inner{
    display:inline-block;
}

4、给子元素设置浮动再清除浮动,太麻烦,不推荐。

代码语言:javascript复制
.inner{
    float:laft;
}
.box::after{
    content: '';
    display: block;
    clear: both;
}

0 人点赞