CSS外边距合并

2017-09-03  本文已影响0人  zh_yang

块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距,这种行为称为外边距塌陷(margin collapsing),有的地方翻译为外边距合并。

发生外边距塌陷的三种基本情况:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    body {
      background: yellow;
    }
    div {
      width: 100px;
      height: 100px;
      border: 1px solid;
      margin: 50px;
    }
  </style>
</head>
<body>
  <div class="d1">d1</div>
  <div class="d2">d2</div>
</body>
</html>
测试01.png

但是后者清除浮动后则不会合并:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    div {
      width: 100px;
      height: 100px;
      border: 1px solid;
      margin: 50px;
      float: left;
    }
    .d2 {
      content: "";
      display: both;
      clear: both;
    }
  </style>
</head>
<body>
  <div class="d1">d1</div>
  <div class="d2">d2</div>
</body>
</html>
测试02.png
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    body {
      background: yellow;
    }
    .d1,.ct {
      width: 200px;
      height: 100px;
      background: blue;
      margin-top: 50px;
    }
    .d2 {
      width: 50px;
      height: 50px;
      background: red;
      margin-top: 50px;
    }
  </style>
</head>
<body>
  <div class="d1">d1</div>
  <div class="ct">
    <div class="d2">d2</div>
  </div>
</body>
</html>
测试03.png

类似的,若块级父元素的 margin-bottom 与它的最后一个子元素的margin-bottom 之间没有父元素的 border、padding、inline content、height 、min-height 、max-height 分隔时,就会发生下外边距合并 现象。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
  <style>
    body {
      background: yellow;
    }
    .d1,.d3 {
      width: 300px;
      height: 50px;
      background: red;
    }
    .d2 {
      margin-top: 50px;
      margin-bottom: 50px;
    }
  </style>
<body>
  <div class="d1">d1和d2相距50px</div>
  <div class="d2"></div>
  <div class="d3">d1和d2相距50px</div>
</body>
</html>
测试04.png

合并规则:

不让相邻元素外边距合并的方法:

上一篇 下一篇

猜你喜欢

热点阅读