边框属性对上边距的影响

yuy*_*raj 2 html css margin

参考以下代码:

body {
  height: 500px;
  width: 80%;
  margin-top: 0;
  margin-bottom: 0;
  margin-left: auto;
  margin-right: auto;
  padding: 0;
  background-color: lightgray;
}
.header {
  width: 80%;
  height: 100px;
  margin-left: auto;
  margin-right: auto;
  background-color: yellow;
  /* border: solid 1px black; */
}
Run Code Online (Sandbox Code Playgroud)
<div class="header">
  <ul>
    <li><a href="index.html">Dashboard</a></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

当我border: solid 1px black从 .header 中删除时,我会在 div 元素上方获得一些空间。但是当我添加边框属性时,我得到了完美的结果(即删除了空间)。边界属性应该对这个空间产生什么影响?

Sal*_*n A 5

这是由于边距崩溃(MDNW3.org)。

在您的示例中, header 元素包含一个无序列表,默认情况下,该列表具有顶部和底部边距。由于边框折叠,它的边距被转移到标题,而标题又被转移到正文。结果,当标题和列表与正文的顶部对齐时,正文被下推。

顶部:ul 的边距,底部:主体的边距

添加边框是防止边距折叠的一种方法(请参阅 W3 规范)。如果要避免添加边框,请使用其他方法,例如分配overflow: hidden给标题。

body {
  height: 500px;
  width: 80%;
  margin-top: 0;
  margin-bottom: 0;
  margin-left: auto;
  margin-right: auto;
  padding: 0;
  background-color: lightgray;
}
.header {
  width: 80%;
  height: 100px;
  margin-left: auto;
  margin-right: auto;
  background-color: yellow;
  /*border: solid 1px black;  */
  overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)
<div class="header">
  <ul>
    <li><a href="index.html">Dashboard</a></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)