塌陷问题


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

①垂直并列(少见)

    首先设置两个DIV,并为其制定宽高
  1.  /*HTML部分*/
    <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>
          margin-塌陷问题-LMLPHP
     
     对box1我们为其设置margin-bottom:50px;
     对box2我们为其设置margin-top: 40px;
  1.  <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,事实上并非如此.
     如下图所示:
          margin-塌陷问题-LMLPHP
     两盒子之间的距离仅是50px,也就是说两盒子之间的margin出现了重叠部分,故而我们可以得出:垂直之间塌陷的原则是以两盒子最大的外边距为准。
 

②嵌套关系(常见)

  1.  /*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-塌陷问题-LMLPHP
    当为子盒子添加margin-top:10px;时会发生如下情况:
          margin-塌陷问题-LMLPHP
    子盒子和父盒子之间并没出现期望的10px间隙而是父盒子与子盒子一起与页面顶端产生了10px间隙。
 
解决方法:
(1)为父盒子设置border,为外层添加border后父子盒子就不是真正意义上的贴合。
(2)为父盒子添加overflow:hidden;
(3)为父盒子设定padding值。
04-26 07:34