我挺喜欢 position: sticky;
的。它有实际的用例。我认为它可以用于将目录保持在长篇文章侧边栏中,但作为一个相当简单的实现,并且没有在尴尬的方式重叠事物的风险。 但 Elad Shechter 这里是对的:它并没有被广泛使用——至少部分原因是——可能因为它有点难以理解。
我喜欢 Elad 用“粘性项目”和“粘性容器”来解释它。 容器需要足够大,以便滚动相关,并且粘性才能发挥作用。
还有其他陷阱。 我感觉每次我在真实环境中尝试使用 position: sticky;
时,都有大约 30% 的几率会成功。 总有一些父/子关系问题我无法解决,导致重叠。 或者,有一些父元素使用 overflow: hidden;
,出于我无法理解的原因,破坏了这一点。
Safari 存在一个 bug(去年报告过),其中 z-index 不受尊重,并且在 position:sticky div 之后的下一个(非粘性)div 始终位于其下方——除非屏幕大小调整或刷新或启动开发工具——非常令人沮丧。 示例
我将你的代码复制到 codepen 并打开它,在 safari 上看起来不错
https://codepen.io/chaofix/live/c921cce69341a44b01af52bcff24ba3e
另一方面,你在 safari 上的 url 存在 bug……很奇怪
codepen 上有什么东西忽略了 safari 上的这个 bug?
那个 Codepen 链接没有用,所以我 做了同样的事情
所以是的,它在 Codepen 中有效——Codepen 是否使用它自己的浏览器引擎,无论在哪个浏览器中查看它?
如果不是,那么一定是由于它的重新加载/刷新方式造成的。 Safari bug 很奇怪,因为它会在刷新或调整窗口大小或启动开发工具时修复。
前几天我遇到了静态元素在我的页面上分层在我的相对和绝对定位元素之上的问题。 我一直在努力弄清楚为什么,直到我从我的标题中删除了“position: sticky”。 之后一切都恢复正常。 这种不可预测的行为让我不愿意在未来再次使用它。