Discourse 上的粘性元素(CSS position: sticky)在我的 iPad(第 9 代,所有系统均已更新)上一直有些卡顿。滚动时会轻微抖动,对突然改变滚动方向的反应迟钝,有延迟。
随着新侧边栏(也是一个粘性元素)的引入,这种情况变得更加明显,因为它占据了 UI 的很大一部分,而且不太稳定。
罪魁祸首是 --header-offset 变量。在 CSS 中移除此变量可以使 UI 的粘性元素稳定下来,正如它应该的那样。
默认情况下,页眉高度为 4em。我已将时间轴、粘性头像和侧边栏的 CSS 中的 --header-offset 变量替换为 4em,以计算它们的位置:
.d-header
{
box-sizing: border-box;
height: 4em;
}
.sidebar-wrapper
{
top: 4em;
height: calc(100vh - 4em);
}
@media screen and (min-width: 925px)
{
.container.posts .topic-navigation
{
top: 6em;
}
}
.topic-post.sticky-avatar .topic-avatar
{
top: 3.75em;
}
(box sizing 存在是因为我的页眉有边框,这与问题无关)
我对这个变量的功能感到好奇,据我所知,页眉的高度从未改变过,除了改变文本大小,并且使用 em 作为其高度可以解决这个问题。
我不知道是否有办法优化 Safari 移动版上的 --header-offset,但我的解决方法解决了这个小性能问题。当粘性元素真正粘性十足时,Discourse 看起来更加精致 ![]()
(我在台式机的 Firefox 或 Chrome 上使用这些元素没有任何问题,所以这可能是 Safari 的一个 bug)