html - margin-top 和 position: 粘在 Edge
问题描述
我正在尝试创建一个粘性标题,并注意到在 Edge 中,由于某种原因,标题的边距翻了一番。
已更新 这是整页示例 https://codepen.io/galuka/full/qBZJOeJ上的 URL
更新 2 看起来基于 Chromium 的新 Microsoft Edge 工作正常,因此问题仅出现在非 Chromium Edge 版本上。
这是该问题的简化示例:
.container {
margin: 0 auto;
width: 600px;
}
.sticky {
margin-top: 80px;
position: sticky;
top: 0;
background-color: orange;
height: 100px;
}
<div class="container">
<div class="sticky">
Here goes sticky header
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
</div>
在 Chrome 和 Firefox 中,它按预期工作,但在 Edge 中,边距看起来像 160 像素而不是 80 像素。
我还注意到,如果我向容器类添加任何正填充,例如 1px,则可以解决该问题。
.container {
margin: 0 auto;
width: 600px;
padding-top: 1px;
}
.sticky {
margin-top: 80px;
position: sticky;
top: 0;
background-color: orange;
height: 100px;
}
<div class="container">
<div class="sticky">
Here goes sticky header
</div>
<div>
Lorem ipsum dolor sit amet, ...
</div>
</div>
我对 CSS 很陌生,所以如果有人能解释这种行为,我会非常感激。
解决方案
浏览器通过称为用户代理样式表的 CSS 文件实现一些默认样式。为了确保不同浏览器之间的一致性,您应该在 CSS 文件的顶部添加一条小规则。代码将边距和填充清零以确保一致性:
*{
margin: 0;
padding: 0;
}
正如您所说,添加填充解决了问题,这绝对是解决方案。此外,您可以右键单击网页上的任何元素并选择inspect element
,您将能够看到应用于该元素的所有 CSS。
推荐阅读
- c++ - 使用命名空间 C++ 的未定义引用
- entity-framework - 如何在两端使用 FK 在 EF Core 中配置一对一关系
- c# - 在另一个表达式中使用保存的表达式
- c++ - 为什么 const int 需要 extern 而 const char* 不需要
- javascript - 无法在页面加载事件(纯 JS)上将焦点设置为输入文本字段
- c# - 无法让 ASP.NET Web api 使用未指定的内容类型
- python - 是否可以将 Tkinter tickinterval 设置为幅度?
- java - 使用 Visual Code Java 从主类调用子类属性
- flutter - 安装flutter应用程序时不显示应用程序图标,但将发布apk直接安装到手机时显示图标
- mysql - 连接太多 Nodejs + mysql2/promise