改变 margin-top 会影响其他人

changing margin-top affects others

当我增加或减少 #navmargin-top 时,它会影响 #header,但是当我增加 #headermargin-top 时,它不会影响 #nav.

当我更改导航或 header 它不应该影响其他时,如何更正此问题?

body {
  width: 960px;
  margin: auto;
  color: #000000;
  background-color: #fff;
}

h1 {
  margin: 0;
  padding: 5px;
}

#header {
  float: left;
  color: #000000;
  font-size: 20px;
  margin-top: 10px;
}

#header h1 {
  float: left;
}

#nav {
  width: 900px;
  ;
  height: 20px;
  position: relative;
  margin-top: 34px;
}

#nav li {
  display: inline;
  float: left;
}
<div id="header">
  <h1>rrrr</h1>

</div>

<div id="nav">
  <ul>
    <li><a href="#">sss</a></li>
    <li><a href="#">www</a></li>
    <li><a href="#">fff</a></li>
    <li><a href="#">ttt</a></li>
  </ul>
</div>

您遇到了 margin-collapsing 问题。由于您将 header 设为浮动元素,因此 #nav 成为第一个流入元素,因此其边距将与主体边距一起折叠。

top margin of a box and top margin of its first in-flow child

因此,当您增加导航的边距时,您会增加折叠的边距,即正文的边距,并将所有内容向下推,包括 #header

要解决此问题,您需要通过在 body.

中添加(例如)padding-top 来避免边距崩溃

body {
  width: 960px;
  margin: auto;
  color: #000000;
  background-color: #fff;
  padding-top: 1px;
}

h1 {
  margin: 0;
  padding: 5px;
}

#header {
  float: left;
  color: #000000;
  font-size: 20px;
  margin-top: 10px;
}

#header h1 {
  float: left;
}

#nav {
  width: 900px;
  ;
  height: 20px;
  position: relative;
  animation: ani1 2s;
  margin-top: 34px;
}

#nav li {
  display: inline;
  float: left;
}
<div id="header">
  <h1>rrrr</h1>
</div>
<div id="nav">
  <ul>
    <li><a href="#">sss</a></li>
    <li><a href="#">www</a></li>
    <li><a href="#">fff</a></li>
    <li><a href="#">ttt</a></li>
  </ul>
</div>