CSS 嵌套块元素垂直外边距的塌陷解决方案

文章目录

        • 1. 什么是嵌套块元素垂直外边距的塌陷?
        • 2. 解决方案

1. 什么是嵌套块元素垂直外边距的塌陷?

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷相对较大的外边距值,而子元素没有实现上外边距效果。

1.在只给父元素加上上外边距时能正常:


<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件title>
  head>
  <style>
  .father{
    height:200px;
    width:200px;
    background-color:pink;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
  }
  style>
 <div class="father">
   <div class="son">div>
 div>
  body>
html>

CSS 嵌套块元素垂直外边距的塌陷解决方案_第1张图片
2.当给子元素也添加一个比父元素小的上外边距时:(margin-top:10px)
CSS 嵌套块元素垂直外边距的塌陷解决方案_第2张图片
3.但当子元素的上外边距大于父元素的上外边距呢?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件</title>
  </head>
  <style>
    *{
      margin:0px;
      padding:0px;
    }
  .father{
    height:200px;
    width:200px;
    background-color:pink;
    margin-top: 20px;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
    margin-top:40px;
  }
  </style>
 <div class="father">
   <div class="son"></div>
 </div>
  </body>
</html>

CSS 嵌套块元素垂直外边距的塌陷解决方案_第3张图片
这就是我们所说的嵌套垂直外边距的塌陷问题。

2. 解决方案

五种种解决方案:

  • 可以为父元素定义边框
  • 可以为父元素定义内边距
  • 可以为父元素添加overflow:hidden
  • 给父或子元素添加固定
  • 给父或子元素用绝对定位

第一种方案:


<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件title>
  head>
  <style>
    *{
      margin:0px;
      padding:0px;
    }
  .father{
    height:200px;
    width:200px;
    background-color:pink;
    margin-top: 20px;
    border:1px solid transparent;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
    margin-top:50px;
  }
  style>
 <div class="father">
   <div class="son">div>
 div>
  body>
html>

CSS 嵌套块元素垂直外边距的塌陷解决方案_第4张图片
第二种方案:


<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件title>
  head>
  <style>
    *{
      margin:0px;
      padding:0px;
    }
  .father{
    height:200px;
    width:200px;
    background-color:pink;
    margin-top: 20px;
    padding:1px;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
    margin-top:50px;
  }
  style>
 <div class="father">
   <div class="son">div>
 div>
  body>
html>

第三种方案:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件</title>
  </head>
  <style>
    *{
      margin:0px;
      padding:0px;
    }
  .father{
    height:200px;
    width:200px;
    background-color:pink;
    margin-top: 20px;
    overflow: hidden;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
    margin-top:50px;
  }
  </style>
 <div class="father">
   <div class="son"></div>
 </div>
  </body>
</html>

CSS 嵌套块元素垂直外边距的塌陷解决方案_第5张图片

第四种方案:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件</title>
  </head>
  <style>
    *{
      margin:0px;
      padding:0px;
    }
  .father{
    height:200px;
    width:200px;
    background-color:pink;
    margin-top: 20px;
    position:fixed;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
    margin-top:50px;
  }
  </style>
 <div class="father">
   <div class="son"></div>
 </div>
  </body>
</html>

CSS 嵌套块元素垂直外边距的塌陷解决方案_第6张图片
第五种方案:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插件</title>
  </head>
  <style>
    *{
      margin:0px;
      padding:0px;
    }
  .father{
    height:200px;
    width:200px;
    background-color:pink;
    margin-top: 20px;
    position:absolute;
  }
  .father .son{
    height:100px;
    width:100px;
    background-color: yellow;
    margin-top:50px;
  }
  </style>
 <div class="father">
   <div class="son"></div>
 </div>
  </body>
</html>

CSS 嵌套块元素垂直外边距的塌陷解决方案_第7张图片
缺点:

  • 第一种、第二种:影响了容器的大小
  • 第三种:当子元素上外边距移动过大,子容器会被隐藏,但通常这是合理的,很少情况会让子元素显式地超出父元素

你可能感兴趣的:(布局效果)