如何无需JavaScript实现滚动200px后显示粘性按钮?
纯CSS实现滚动超过指定距离显示回到顶部按钮
可以实现,核心思路是利用position: sticky的:stuck伪类结合兄弟选择器控制元素可见性,无需JavaScript。
实现原理
- 创建一个高度为200px的隐形触发元素,设置
position: sticky; top: 0——初始状态下它会随页面滚动,当页面滚动距离超过200px时,该元素会被"粘"在视口顶部,此时:stuck伪类生效。 - 通过兄弟选择器,在触发元素处于
: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
相关产品推荐
相关产品推荐

