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. 大型企业数据库服务首选,AliSQL这几大企业级功能你了解几个?

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

  2. PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能

    ​简介:2022 年 5 月25日,阿里云开源 PolarDB-X 升级发布新版本!PolarDB-X 从 2009 年开始服务于阿里巴巴电商核心系统, 2015 年开始对外提供商业化服务,并于 20 ...

  3. 【ClickHouse 技术系列】- 在 ClickHouse 中处理实时更新

    ​简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...

  4. Nacos 2.0 升级前后性能对比压测

    简介: Nacos 2.0 通过升级通信协议和框架.数据模型的方式将性能提升了约 10 倍,解决继 Nacos 1.0 发布逐步暴露的性能问题.本文通过压测 Nacos 1.0,Nacos 1.0 升 ...

  5. [FAQ] Cordova 模拟器中不能访问域名, 未联网 ?

    首先保证电脑已联网,然后打开模拟器的浏览器输入常用网址,看看是否能够联网. 如果访问失败,在本机中在 cmd 中 ping www.baidu.com 获得百度的ip地址,然后在浏览器中输入 http ...

  6. dotnet 修复多框架 TargetFrameworks 包含不受支持平台导致构建失败

    本文将告诉大家如何修复 dotnet 项目里的多框架 TargetFrameworks 如果包含了当前系统无法支持的平台时,如何进行跳过.解决在 Linux 平台构建时提示 Mac Catalyst ...

  7. OpenTK 入门 初始化窗口

    本文属于 OpenTK 入门博客,这是一项使用 C# 做底层调用 OpenGL 和 OpenAL 和 OpenCL 的技术.但值得一提的是,如果是想做渲染相关的话,当前是不建议使用 OpenGL 的, ...

  8. localstory,sessionstory,vuex,cook

    函数式组件 1.特点 没有this(没有实例) 没有响应式数据 它只是一个接受一些 prop 的函数. render MVVM分为Model.View.ViewModel三者. Model:代表数据模 ...

  9. vue点击旋转,再点击复原

    效果: 1.html.通过绑定t值控制不同的class名, 原图是右边方向的箭头 <img class="right" v-if="item.t" src ...

  10. R2_ES中数据的存储测试

    基本概念:ES(一): 架构及原理 关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引(Index) ⇒ 类型(Type) ⇒ 文档(Documen ...