常见margin塌陷问题及其解决办法

问题:当两个盒子在垂直方向上设置margin值时会出现塌陷的现象。

兄弟盒子垂直并列

<!DOCTYPE HTML>
<html>

<body>
  <div class="box1"></div>
  <div class="box2"></div>
</body>
<style>
  * {
    margin: 0;
    padding: 0;
  }
  .box1 {
    width: 100px;
    height: 100px;
    background: yellowgreen;
    margin-bottom: 20px;
  }
  .box2 {
    width: 100px;
    height: 100px;
    background: skyblue;
    margin-top: 30px;
  }
</style>

</html>

渲染的结果
在这里插入图片描述

我们在看到现象之前会不会觉得两个盒子的间距是50px,然而却不是。
两盒子之间的距离仅是30px,我们可以得出:垂直之间塌陷的原则是以两盒子最大的外边距为准。

嵌套关系(父级元素塌陷)

<!DOCTYPE HTML>
<html>

<body>
  <div class="box1">
    <div class="box2"></div>
  </div>
</body>
<style>
  * {
    margin: 0;
    padding: 0;
  }
  .box1 {
    width: 200px;
    height: 200px;
    background: yellowgreen;
  }
  .box2 {
    width: 100px;
    height: 100px;
    background: skyblue;
    margin-top: 10px;
  }
</style>

</html>

渲染结果
在这里插入图片描述
子盒子和父盒子之间并没出现期望的10px间隙而是父盒子与子盒子一起与页面顶端产生了10px间隙(即父级盒子往下塌陷了10px)
解决的办法:
父盒子:

  1. 设置透明边框 border: 1px solid transparent;
  2. 溢出盒子的部分隐藏展示 overflow: hidden;
  3. 设置定位 position:absolute;
  4. 设置成行块级元素 display: inline-block;
  5. 利用浮动来改变样式 float: left;
	/* 设置透明边框 */
    /* border: 1px solid transparent; */
    /* 溢出盒子的部分隐藏展示 */
    /* overflow: hidden; */
    /* 设置相对定位 */
    /* position:absolute; */
    /* 设置成行块级元素 */
    /* display: inline-block; */
    /* 利用浮动来改变样式 */
    /* float: left; */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值