视频:https://www.bilibili.com/video/BV1pE411q7FU?p=153
使用margin定义块元素的垂直外边距时,可能会出现外边距的合并。

对于两个嵌套关系(父子关系)的块元素,父元素有上边距同时子元素也有外边距,此时父元素会坍陷较大的外边距值。
这说的是啥???
下面看看例子吧。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. .father {
  10. width: 500px;
  11. height: 300px;
  12. background-color: blue;
  13. margin-top: 200px;
  14. }
  15. .son {
  16. width: 100px;
  17. height: 100px;
  18. background-color: red;
  19. margin-top: 100px;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div class="father">
  25. <div class="son"></div>
  26. </div>
  27. </body>
  28. </html>

效果图
image.png
红的并没有距离蓝的上边并没有100px,只有0px。
为啥呢???
下面用浏览器调试看看。
父div
image.png
子div
image.png
所以,子div的margin-top:100px,坍陷到父div的margin-top:200px的区域内了,就不能实现子div距离父div的上边为100px。

解决方案

  1. 为父元素定义上边框(border-top)
  2. 可以为父元素定义上内边距(padding)
  3. 可以为父元素添加overflow: hidden
  4. 其他方法,比如浮动、固定、绝对定位的盒子不会有坍陷问题。

下面是实现后的效果
image.png