外边距塌陷

  1. 为了解决段落之间垂直方向的空隙,让一些元素垂直方向间距相同。
  2. 发生块级元素垂直方向身上
  3. 外边距计算
    • 正数 && 正数 取最大的数
    • 负数 && 负数 取绝对值最大的数
    • 正数 && 负数 取相加的和
  4. 发生外边距塌陷的情况
    1. 相邻父子元素垂直外边距塌陷
      <!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>
          <style>
             * {
              padding: 0px;
              margin: 0px;
             }
             .father {
              width: 300px;
              height: 300px;
              background-color: tomato;
             }
             .son {
              width: 200px;
              height: 200px;
              background-color: cadetblue;
              margin-top: 100px;
             }
          </style>
      </head>
      <body>
          <div class="father">
              <div class="son"></div>
          </div>
      </body>
      </html>
      
    • 想象中的效果:子元素在父元素里垂直向下移动100px
    • 实际上的效果:父子外边距合并,作用在父元素身上。
    • 注意:同时给父元素和子元素设置上外边距时,外边距合并,会取两则较大值并作用在父元素身上,父元素和子元素一起向下移动。
    1. 相邻兄弟元素垂直外边距重叠

      <!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>
          <style>
             * {
              padding: 0px;
              margin: 0px;
             }
             .broA {
              width: 150px;
              height: 150px;
              background-color: brown;
              margin-bottom: 50px;
             }
             .broB {
              width: 150px;
              height: 150px;
              background-color: teal;
              margin-top: 100px;
             }
          </style>
      </head>
      <body>
          <div class="broA"></div>
          <div class="broB"></div>
      </body>
      </html>
      
      • 我们想象的可能是:兄弟元素间间距为50+100=150px
      • 实际运行结果:外边距塌陷(合并),兄弟元素共用一个外边距,且取较大值
  5. 解决方法
    1. 相邻父子元素垂直外边距塌陷
      • 给父元素添加 border

        .father {
            width: 300px;
            height: 300px;
            background-color: tomato;
            border: 1px solid transparent;
        }
        
      • 给父元素添加 padding

        .father {
            width: 300px;
            height: 300px;
            background-color: tomato;
            padding: 1px;
        }
        
      • 将父元素设置成BFC,形成独立的渲染区域

        • 给父元素设置 overflow: hidden

          .father {
              width: 300px;
              height: 300px;
              background-color: tomato;
              overflow: hidden;
          }
          
        • 给父元素设置浮动

          .father {
              width: 300px;
              height: 300px;
              background-color: tomato;
              float: left;
          }
          
        • 给父元素设置绝对定位

          .father {
              width: 300px;
              height: 300px;
              background-color: tomato;
              position: absolute;
          }
          
    2. 相邻兄弟元素垂直外边距重叠
      • 将下面的兄弟元素设置为浮动

        .broB {
            width: 150px;
            height: 150px;
            background-color: teal;
            margin-top: 100px;
            float: left;
        }
        
      • 将下面的兄弟元素设置为绝对定位

        .broB {
            width: 150px;
            height: 150px;
            background-color: teal;
            margin-top: 100px;
            position: absolute;
        }
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值