能隐藏滚动条又保留滚动能力,必须满足两个前提:容器有明确尺寸限制且overflow设为auto或scroll;Firefox用scrollbar-width:none,Chrome/Safari/Edge用::-webkit-scrollbar{width:0;height:0},IE/旧Edge用-ms-overflow-style:none。
能隐藏滚动条又不破坏滚动能力的方案,必须同时满足两个前提:容器有明确尺寸限制 + overflow 设为 auto 或 scroll。用 overflow: hidden 不是“隐藏”,而是直接砍掉滚动上下文——scrollTop 失效、scrollIntoView() 静默失败、键盘和屏幕阅读器也进不去溢出区域。
这是 Firefox 唯一原生支持、语义最干净的方案,只影响视觉,不干扰滚动逻辑或无障碍访问。
scrollbar-width 必须写在设置了 overflow-y: auto 或 scroll 的块级元素上,写在 html 或 body 上会失效auto(默认)、thin、none;写成 hidden 或 0 会被忽略<textarea>、<select> 等表单控件无效这不是可选装饰,而是 WebKit/Blink 下唯一可靠路径。但只写 ::-webkit-scrollbar { display: none } 在部分旧版 Safari(iOS 15 及更早)中不生效,稳妥写法是把宽高设为 0 并清空背景。
height 或 max-height,且已启用 overflow-y: auto
::-webkit-scrollbar、::-webkit-scrollbar-track 和 ::-webkit-scrollbar-thumb,否则某些 Chrome 版本仍留白边<style> 标签或外部 CSS 文件里这个属性只对 IE10+ 和 EdgeHTML 引擎有效,现代 Chromium Edge 已废弃,但仍有遗留项目需兼容。
overflow-y: scroll 或 auto 才触发html 或 body 上会失效,建议限定到具体容器如 .list-container
scrollbar-width: none 共存时互不干扰:Firefox 忽略前者,IE 忽略后者最容易被忽略的是:所有隐藏方案生效后,若容器原本有 padding-right,内容可能被裁切——得手动补 padding-right: 0 校准;另外,移动端 Safari 对伪元素支持不稳定,iOS 16+ 才较可靠,而 iOS 15 及更早必须用 width: 0; height: 0; 替代 display: none。