CSS滚动条生成器
自定义滚动条曾经是一场充斥着厂商前缀伪元素的噩梦。如今,scrollbar-color和scrollbar-width已能在所有现代浏览器中处理常见场景:窄宽度或普通宽度,以及双色(滑块和轨道)主题。若需像素级控制(轨道内边距、滑块圆角、悬停状态),旧版::-webkit-scrollbar伪元素在Chrome和Safari中仍然可用。本生成器会同时输出这两种写法,并正确进行层叠。
如何为滚动条设置样式
-
1
选择宽度
auto(平台默认宽度)、thin(更窄),或通过webkit规则指定具体的像素值。
-
2
设置滑块和轨道颜色
现代的`scrollbar-color`接受两种颜色。webkit规则可分别设置颜色、圆角和悬停状态。
-
3
添加悬停效果(可选)
滑块在悬停时会变亮。通过`::-webkit-scrollbar-thumb:hover`实现。
-
4
确定作用范围
应用于`html` / `body`(整个页面),或仅应用于某个特定的滚动容器。
-
5
复制CSS
现代规则与webkit规则相结合:在每个现代浏览器中都能正常运行,并具备优雅的回退。
现代标准属性(2023年及以后)
/* Applies to the element that scrolls */
html {
scrollbar-width: thin; /* auto | thin | none */
scrollbar-color: #4f46e5 #e5e7eb; /* thumb track */
}
浏览器支持(2024年):
scrollbar-width:Chrome 121+、Safari 18.2+、Firefox 64+。scrollbar-color:Chrome 121+、Safari 18.2+、Firefox 64+。scrollbar-gutter: stable:Chrome 94+、Safari 14+、Firefox 97+。即使不需要滚动条,也会为其预留空间,防止布局偏移。
webkit伪元素(Chrome、Safari、旧版Edge)
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: #e5e7eb;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: #4f46e5;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: #3730a3;
}
更精细的控制。width设置垂直滚动条的宽度;height设置水平滚动条的高度。对于可双向滚动的容器,请同时添加这两者。
层叠两种方案
先指定现代规则,再将webkit作为增强,用于同时渲染两者的浏览器:
.scroll-area {
scrollbar-width: thin;
scrollbar-color: #4f46e5 #e5e7eb;
}
.scroll-area::-webkit-scrollbar { width: 8px; }
.scroll-area::-webkit-scrollbar-track { background: #e5e7eb; }
.scroll-area::-webkit-scrollbar-thumb {
background: #4f46e5;
border-radius: 4px;
border: 2px solid #e5e7eb;
}
Firefox仅遵循现代的scrollbar-*规则。Chrome和Safari遵循webkit规则(这些规则会覆盖现代规则,因此行为保持一致)。
scrollbar-gutter防止内容偏移
若未预留间隙,当滚动条出现时内容会重新排布(在动态列表中很常见)。解决方法:
html { scrollbar-gutter: stable; }
/* or */
html { scrollbar-gutter: stable both-edges; }
无论内容是否滚动,都会为滚动条预留位置。both-edges会在相对的一侧添加相匹配的间隙,使内容在视觉上保持居中。
完全隐藏滚动条
.no-scrollbar {
scrollbar-width: none; /* Firefox */
}
.no-scrollbar::-webkit-scrollbar { display: none; } /* Chrome, Safari */
请注意:隐藏滚动条会让用户看不到内容可以滚动。仅在配有明确指示(箭头、页面圆点)时使用,或者当滚动行为从上下文中显而易见时使用(如水平轮播、聊天记录)。
移动端注意事项
在iOS和Android上,滚动条仅在滚动时短暂出现。你自定义的滚动条CSS仍会生效,但用户看到它的时间可能不会超过一秒。请据此进行设计,不要在很少出现的视觉细节上投入过多精力。
无障碍性
- 对比度:滑块相对于轨道,应满足非文本对比度3:1(WCAG 1.4.11)。
- 宽度:细滚动条用鼠标较难抓取,对运动功能受限的用户尤其如此。普通宽度是更安全的默认值。
- 切勿移除滚动区域上的滚动条,除非提供其他滚动方式。依赖滚动条的用户否则将无法操作。
常见问题
可以,使用现代的scrollbar-width和scrollbar-color属性即可。Firefox不支持webkit伪元素,因此为了在各浏览器间获得一致的外观,请先使用现代属性,再将webkit规则作为增强添加。
因为默认滚动条会覆盖在内容之上,在需要之前不会预留空间。请在滚动元素上设置scrollbar-gutter: stable,始终预留间隙,从而避免滚动条出现或消失时发生重排。
通常应该隐藏,因为滚动条显得格格不入,并与内容相互干扰。请添加可见的分页圆点或箭头控件,让用户仍然知道内容可以滚动。如果使用滚动吸附(scroll-snapping),请遵循prefers-reduced-motion。
有可能。非常细或对比度很低的滚动条,对运动功能受限和视力较弱的用户来说很难使用。请将滚动条宽度保持在至少8–10px以便舒适抓取,并在滑块与轨道之间保持3:1的对比度。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
电话号码验证器
根据各国号码规划检查结构,并显示地区、类型以及E.164、国际、国内和RFC 3966格式。
BBCode 转 HTML 转换器
将 BBCode(论坛标记)转换为干净的 HTML。支持格式标签、列表、引用、代码、图片和链接。
随机颜色生成器
生成 1 到 50 个随机 HEX 颜色,查看色块,复制代码,并用于 CSS、测试或配色探索。