position: sticky 在 Chrome 中的元素周围添加一些 space

position: sticky adds some space around element in Chrome

描述

我有一个 <header> 元素,它使用 position: sticky 在用户滚动经过它时固定在页面顶部。似乎在 Chrome 中,所述元素没有按预期显示,而是在元素的顶部和左侧添加了一些 space。我设法从我的 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 中的样子。注意元素左侧和顶部的小 space。

备注

将不受支持的 position: sticky 替换为 position: fixed; width: 100%; 并在所有浏览器上试用。正如@aje 提到的,在使用 experimental/new css3 样式之前总是检查浏览器兼容性。

现在我明白你想说什么了,box:shadow 在这种情况下是邪恶的。我假设你不能删除它,所以我在 body css 中添加了 overflow:hidden。 看看下面的片段。

body {
  margin: 0;
  overflow:hidden;
  background: red
}

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>

我遇到了同样的问题。这是我修复它的方法。

overflow: hidden 添加到 body 将禁用滚动。所以,我只添加了 overflow-x: hidden

html,body{
  overflow-x: hidden;
  margin: 0;
  padding: 0;
}

希望对大家有所帮助。