css中常见margin塌陷问题之解决办法

当两个盒子在垂直方向上设置margin值时,会出现一个有趣的塌陷现象。

①垂直并列

首先设置两个DIV,并为其制定宽高

<body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</body>
/*CSS部分*/
<style> 
    *{
         margin: 0; 
         padding: 0; 
    }
     .box1{ 
         width: 200px; 
         height: 200px; 
         background: yellowgreen;
     } 
    .box2{ 
         width: 200px; 
         height: 200px; background: gray; 
    }
</style>   

在这里插入图片描述
对box1我们为其设置margin-bottom:50px;
对box2我们为其设置margin-top: 40px;

<style>
*{
    margin:0;
    padding:0;
}
.box1{
    width:200px;
    height:200px;
    background: yellowgreen;
    margin-bottom: 50px;
}
.box2{
    width:200px;
    height:200px;
    background: gray;
    margin-top: 40px;
}
</style>

我们肯定会很理所当然的认定这两个盒子之间的距离为90px,事实上并非如此.
    如下图所示:
    在这里插入图片描述
    两盒子之间的距离仅是50px,也就是说两盒子之间的margin出现了重叠部分,故而我们可以得出:垂直之间塌陷的原则是以两盒子最大的外边距为准。

②嵌套关系(父级元素塌陷)
/*CSS部分*/
<style>
.box1{
    width:400px;
    height:400px;
    background: pink;
}
.box2{
    width:200px;
    height:200px;
    background: lightblue;
}
</style>
/*HTML部分*/
<body>
    <divclass="box1">
    <divclass="box2"></div>
</div>
</body>

在这里插入图片描述
当为子盒子添加margin-top:10px;时会发生如下情况:
在这里插入图片描述
子盒子和父盒子之间并没出现期望的10px间隙而是父盒子与子盒子一起与页面顶端产生了10px间隙(即父级盒子往下塌陷了10px)。

解决方法:

  1. 为父盒子添加overflow:hidden;(常用)
  2. 为父盒子设定padding值
  3. 为父盒子添加 display:table;
  4. 为父盒子设置border,为外层添加border后父子盒子就不是真正意义上的贴合 (可以设置成透明:border:1px solid transparent)。
  5. 利用伪元素给子元素的前面添加一个空元素
.son:before{ content:"";
             overflow:hidden; }
发布了41 篇原创文章 · 获赞 3 · 访问量 4617

猜你喜欢

转载自blog.csdn.net/fesfsefgs/article/details/101113629
今日推荐