html - 为什么 div 的子元素会改变 body 和 html 之间的边距?

标签 html css

为什么在 body 内的 p 标签上添加 60px 边距,同时也会使用 class* header 更改 div 的位置。固定位置元素难道不应该不受页面上其他元素的影响吗?

.header {
  position: fixed;
}
.left {
  margin-top: 60px;
}

<body>
  <div class="header">
      Exercise 2.4
  </div>
  <p class="left">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sed magna vitae lorem hendrerit posuere. Nullam ut ex ipsum. Cras volutpat augue in metus tempus ultricies sit amet nec lacus.
  </p>
</body>

如果我从 p 标签中删除 left 类,正文和 html 之间的间距将按预期减少到 8 像素。

最佳答案

Collapsing margins !

如果有两个带有上边距的嵌套元素,则它们之间共享边距。也就是说,两个元素的边距值相同。

通常,这只会影响父元素中的第一个子元素,但在这种情况下,浏览器将为您异常(exception),因为第一个元素具有 position:fixed,因此它将采用第二个元素。

解决方案:给.left一个填充而不是边距。

.header {
  position: fixed;
}
.left {
  padding-top: 60px;
}
  <div class="header">
      Exercise 2.4
  </div>
  <p class="left">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sed magna vitae lorem hendrerit posuere. Nullam ut ex ipsum. Cras volutpat augue in metus tempus ultricies sit amet nec lacus.
  </p>

关于html - 为什么 div 的子元素会改变 body 和 html 之间的边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928337/

相关文章:

html - 悬停状态不影响显示属性

javascript - 鼠标悬停改变div

html - CSS 网格 : wrap three divs simultaneously

php - 如何设置Froala编辑器默认文本?

html - 在 Bootstrap 中放置 Div "inline"

javascript - 匹配元素的高度

html - 将 td 一分为二

javascript - 如何在 HTML 页面加载 + Bootstrap 时淡出消息

javascript - 将多个codemirror脚本应用于一个iframe

javascript - 如何将本地日期转换为UTC格式?