You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需JavaScript实现滚动200px后显示粘性按钮?

纯CSS实现滚动超过指定距离显示回到顶部按钮

可以实现,核心思路是利用position: sticky的:stuck伪类结合兄弟选择器控制元素可见性,无需JavaScript。

实现原理

  1. 创建一个高度为200px的隐形触发元素,设置position: sticky; top: 0——初始状态下它会随页面滚动,当页面滚动距离超过200px时,该元素会被"粘"在视口顶部,此时:stuck伪类生效。
  2. 通过兄弟选择器,在触发元素处于:stuck状态时,将目标sticky按钮的visibility从hidden切换为visible。

修改后的完整代码

HTML

<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
  <header></header>
  <!-- 滚动触发元素 -->
  <div class="trigger"></div>
  <div class="container"></div>
  <div class="sticky">
    <a href="#top">ScrollToTop</a>
  </div>
  <footer></footer>
</body>
</html>

CSS

body {
  margin: 0;
  padding: 0;
}

header {
  height: 150px;
  background-color: black;
}

/* 滚动触发元素:高度等于目标滚动距离,隐形且粘性定位 */
.trigger {
  height: 200px;
  position: sticky;
  top: 0;
  visibility: hidden;
}

.container {
  height: 1500px;
  background-color: azure;
}

footer {
  height: 500px;
  background-color: grey;
}

.sticky {
  display: flex;
  justify-content: flex-end;
  position: sticky;
  bottom: 10px;
  margin: 10px;
  /* 初始隐藏 */
  visibility: hidden;
}

/* 触发元素粘住时,显示按钮 */
.trigger:is(:stuck) ~ .sticky {
  visibility: visible;
}

.sticky a {
  background-color: black;
  color: #fff;
  padding: 5px;
}

注意事项

  • :stuck伪类是较新的CSS特性,目前支持Chrome 110+、Firefox 120+、Edge 110+等现代浏览器,若需兼容旧版本浏览器,仍需借助JavaScript实现。
  • 触发元素的高度必须严格等于目标滚动距离(此处为200px),才能保证滚动到对应位置时精准触发状态切换。

内容的提问来源于stack exchange,提问作者Nero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:02:43