Chrome 在 121 版本开始,原生支持了两个滚动条样式相关的样式 scrollbar-color 和 scrollbar-width。

要知道,在此前,虽然有 ::-webkit-scrollbar 规范可以控制滚动条,可是,::-webkit-scrollbar 是非标准特性,在 MDN 文档中都明确了不应该在生产环境使用它。

MDN - ::-webkit-scrollbar

Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

scrollbar-colorscrollbar-width 是官方标准,在 CSS Scrollbars Styling Module Level 1 规范中被提出。

本文,我们就将一起学习看看这两个属性的使用。

scrollbar-color 设置滚动条颜色

顾名思义,scrollbar-color 就是用于设置滚动条颜色的。

不过有意思的是,一个完整的滚动条,其实是有多个小组件组成的,所以能设置的颜色其实也有很多。

以非标准规范 ::-webkit-scrollbar 为例,它将滚动条拆分成了这么多个部分:

当然,新规范没有这么复杂,我们简化上述的图,可以得到这么一张图:

scrollbar-color 能够设置的,正是上图中的 track 和 thumb 的颜色:

  • 轨道(track)是指滚动条,其一般是固定的而不管滚动位置的背景。
  • 滑块(thumb)是指滚动条通常漂浮在轨道的顶部上的移动部分。

简单举个例子:

<div class="scroll-box">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quaerat ipsam fugit fugiat cupiditate asperiores neque libero natus atque, suscipit error esse inventore numquam molestiae quas laborum eius debitis cum?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quaerat ipsam fugit fugiat cupiditate asperiores neque libero natus atque, suscipit error esse inventore numquam molestiae quas laborum eius debitis cum?
...
</p>
</div>
.scroll-box {
border: 1px solid #666;
overflow: scroll;
}

正常而言,当 <p> 标签内的内容足够多,溢出到开始滚动,则滚动条样式为:

此时,我们可以通过 scrollbar-color 设置滚动条的轨道颜色和滑块颜色:

.scroll-box {
border: 1px solid #666;
overflow: scroll;
scrollbar-color: #fff #000;
// OR
scrollbar-color: #000 #fff;
}

则,样式表现如下:

看图就非常好理解了,简单而言 scrollbar-color: #000 #fff,需要设置两个颜色,将第一种颜色应用于滚动条滑块,第二种颜色应用于滚动条轨道。

当然,上图是在 Windows 操作系统下的样式表现,我再补充一张在 macOS/iOS 操作系统下的样式表现效果:

由于 macOS/iOS 操作系统默认情况下,即便容器内是可滚动的,也不会显示滚动条,上述效果都是在 Hover 状态或者滚动状态下的效果。

并且,值得注意的是,大家可以发现,macOS/iOS 操作系统下滚动条轨道是透明的,无法被设置颜色,只能设置滚动条滑块的颜色

完整的 DEMO,你可以戳这里:CodePen Demo -- Scrollbar-color Demo

当然,值得注意的是。很多人看中文版的 MDN 文档(2024-04-06),会看到除了直接设置两个颜色值,以及上面的 auto 关键字,规范还提供了 lightdark 关键字:

{
/* Keyword values */
scrollbar-color: auto;
scrollbar-color: dark;
scrollbar-color: light;
}

在我实测过后,发现实际没有任何浏览器(用户代理)目前支持 lightdark 关键字。

中文文档存在一定的滞后性,还是推荐大家直接看英文文档:

scrollbar-width设置滚动条粗细

了解完 scrollbar-color 后,我们再来看看 scrollbar-width。这个从名字也很好理解,设置滚动条的宽度。

那是否和我们想象的一样,可以任意设置滚动条的宽度,甚至乎,可以定制化的设置滑块和轨道的宽度?

遗憾的是,在 CSS Scrollbars Styling Module Level 1 一期滚动条规范中,这个属性的功能被设置的非常弱。

不要说分别设置滑块和轨道的宽度,scrollbar-width 目前甚至不支持接受一个宽度数值。

什么意思呢?也就是,当前 scrollbar-width 只接收 3 个关键字:

{
/* Keyword values */
scrollbar-width: auto;
scrollbar-width: thin;
scrollbar-width: none;
}
  • scrollbar-width: auto:系统默认的滚动条宽度。
  • scrollbar-width: thin:系统提供的瘦滚动条宽度,或者比默认滚动条宽度更窄的宽度
  • scrollbar-width: none:不显示滚动条,但是该元素依然可以滚动

简单示意图如下:

完整的 DEMO,你可以戳这里:CodePen Demo -- Scrollbar-width Demo

总结一下

可以看到,其实就目前 scrollbar-width 而言,其能力还是属于比较鸡肋的。相对正常的样式,仅仅多了一种瘦版样式选择以及提供了无滚动条模式。

当然,整个 scrollbar-colorscrollbar-width 相较于非标准的 ::-webkit-scrollbar 规范已经是非常大的一步跨越。只是其功能的丰富性和全面性还需要等待。

最后

好了,本文到此结束,希望对你有帮助

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

参考链接

【现代 CSS】标准滚动条控制规范 scrollbar-color 和 scrollbar-width的更多相关文章

  1. PHP.3-DIV+CSS标准网页布局准备工作(上)

    DIV+CSS标准网页布局准备工作(上) 概述 使用"DIV+CSS"对网站进行布局符合W3C标准,采用这种方式布局通常是为了说明与HTML表格定位方式的区别.因为现在的网站设计标 ...

  2. 原来你一直写错了?!实力分享一波 CSS 使用的书写规范顺序与偏门又实用的样式...

    我们在埋头写代码的时候,还要学会收集整理一些常用的代码小技巧,以便在工作时候,可以及时调取,提高工作效率. 今天,我把之前收集整理的一些CSS代码小技巧分享出来,供你参考学习,希望对你有帮助. 一.C ...

  3. html中css、div命名规范

    html中css.div命名规范 1.类class的命名规范示例 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column ...

  4. 自定义滚动条——控制div的大小和透明度

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...

  5. CSS设置滚动条样式

    因为在现在的大部分项目中很多都用到了滚动条,有时候用到模拟的滚动条,现在说下滚动条的CSS也能解决. 比如网易邮箱的滚动条样子很好看,就是利用的CSS来设置的,而且是webkit浏览器的.如图所示: ...

  6. 前端编码规范(4)—— CSS 和 Sass (SCSS) 规范

    CSS and Sass (SCSS) style rules ID and class naming ID和class(类)名总是使用可以反应元素目的和用途的名称,或其他通用名称.代替表象和晦涩难懂 ...

  7. 人人网FED CSS编码前端开发规范

    文件相关规范 1.文件名必须由小写字母.数字.中划线-组成 2.文件必须用utf-8编码 3.文件引入可通过外联或内联方式引入: 3.1 外联方式:<link rel=”stylesheet” ...

  8. CSS设置滚动条样式[转]

    原文转载地址:http://www.javascript100.com/?p=756 webkit浏览器css设置滚动条 主要有下面7个属性 ::-webkit-scrollbar 滚动条整体部分,可 ...

  9. 转载自前端开发:CSS设置滚动条样式

    浏览器默认的滚动条样子太过屌丝了,得自己动手整整.记得IE浏览器有几个设置滚条的样式,不过比较鸡肋,只能设置颜色之类的,而且webkit下面也不支持.无意间看到网易邮箱的滚动条样子很好看,一开始以为是 ...

  10. CSS自定义滚动条样式

    原文地址:http://www.qianduan.net/css-custom-scroll-bar-style/ 相信很多人都遇到过在设计中自定义滚动条样式的情景,之前我都是努力说服设计师接受浏览器 ...

随机推荐

  1. HarmonyOS NEXT应用开发案例——自定义TabBar

    介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果. 效果图预览 使用说明: 依次点击tabBar页面,除了社区图标之外 ...

  2. 大型企业数据库服务首选,AliSQL这几大企业级功能你了解几个?

    MySQL代表了开源数据库的快速发展,从2004年前后的Wiki.WordPress等轻量级Web 2.0应用起步,到2010年阿里巴巴在电商及支付场景大规模使用MySQL数据库,再到2012年开始阿 ...

  3. 深度解读 MongoDB 最全面的增强版本 4.4 新特性

    MongoDB 在今年正式发布了新的 4.4 大版本,这次的发布包含众多的增强 Feature,可以称之为是一个维护性的版本,而且是一个用户期待已久的维护性版本,MongoDB 官方也把这次发布称为「 ...

  4. JavaScript 数组常用方法整理

    数组变异方法 push() 数组末尾添加一个项目,返回新数组长度,arr.push(item)pop() 数组末尾删除一个元素,返回被删除元素,arr.pop()shift() 删除数组开头第1个元素 ...

  5. 动态规划-DP 完整版

    动态规划 学完了五大基础dp 做个简单总结 dp特征 动态规划问题 首要是找到做题的目的 是求最大/小值 还是其他: 其二 要确定问题的状态转移方程 这是关键: 第三 为dp数组找到边界. 最后 检查 ...

  6. C 语言编程 — 异常处理

    目录 文章目录 目录 前文列表 异常处理 perror() 和 strerror() 输出异常信息 程序退出状态 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基 ...

  7. AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?

    丰富组件,满足千人千面! AIRIOT物联网低代码平台的可视化组态引擎,具备丰富的可视化看板及组件,满足各类工艺流程图.数据可视化需求.支持三维编辑.图形绘制.图表设计等设计方式,PPT模式设计软件界 ...

  8. rocketmq 搭建配置

    broker组1: # NameServer地址 namesrvAddr=192.168.1.100: 9876;192.168.1.101: 9876 # 集群名称 brokerClusterNam ...

  9. Dubbo SPI扩展机制源码详解(基于2.7.10)

    Dubbo SPI 一. 概述 本文主要分享 Dubbo 的拓展机制 SPI. 想要理解 Dubbo ,理解 Dubbo SPI 是非常必须的.在 Dubbo 中,提供了大量的拓展点,基于 Dubbo ...

  10. VMware Workstation安装Ubuntu窗口太小的解决方式

    1.选择菜单中的:虚拟机--------安装VMware-Tools 2.点击DVD图标 3.将压缩文件复制到桌面 4.解压压缩文件 5.进入解压后的目录,执行命令: sudo perl vmware ...