【发布时间】:2017-08-05 21:27:29
【问题描述】:
说明
我有一个<header> 元素,它使用position: sticky 在用户滚动过去时粘在页面顶部。不知何故,在 Chrome 中,所述元素没有按预期显示,而是在元素的顶部和左侧添加了一些空间。我设法从我的 CSS 文件中分离出代码以重现该错误并在 Chrome(Android 和 Windows 7 桌面版)中成功重现它。有谁知道为什么会发生这种情况以及是否有解决方案?
代码示例(也可作为 Codepen 提供)
body {
margin: 0;
}
header {
display: block;
height: 44px;
background: #263238;
color: #fafafa;
padding: 2px 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.18), 0 2px 3px rgba(0, 0, 0, 0.26);
white-space: nowrap;
overflow-x: auto;
overflow-y: hidden;
}
header.sticky {
position: -webkit-sticky;
position: sticky;
z-index: 1101;
top: 0;
}
<p>Blah blah</p>
<header class="sticky">
<button>Home</button>
<button>About</button>
</header>
<!-- some spacing to allow users to scroll the page -->
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
错误和预期行为的屏幕截图
下图显示了<header> 元素在所有浏览器上的外观。目前,Chrome 似乎无法正确显示(见下图)。
这张图片展示了 <header> 元素在 Chrome 中的样子。请注意元素左侧和顶部的小空间。
注意事项
- 据我所知,我的 CSS 的其余部分并没有真正影响元素的样式,正如您从 Codepen 和提供的 sn-p 中看到的那样。
- 由于这个错误出现在我的 CSS 框架中,为了避免自我宣传,项目的名称和徽标已从屏幕截图中删除。
- 提供前面的注释,我更喜欢纯 CSS 解决方案(不使用 Javascript 或更改 HTML)来解决问题,除非没有。
- 我可以在 Android 5.0.2 上的 Chrome 56.0.2924.87 和 Windows 7(64 位)上的 Chrome 57.0.2987.98(64 位)中成功重现该错误。
【问题讨论】:
-
无法在 Chrome 中重现问题...根本没有边距!
-
@andreas 我可以在我的两个设备上复制,如前所述。您使用的是什么版本的 Chrome 以及什么平台?
-
Win10 上的 Chrome 57.0.2987.98
-
您的代码在 Windows 10 上的 Chrome、Firefox 和 Opera 中按预期工作。它在 Internet Explorer 11 上也严重失败。所有浏览器上的最新版本。
-
在使用
position:sticky之前先检查一下caniuse.com/#search=position%3A%20sticky,它并不兼容所有浏览器。
标签: html css google-chrome sticky