CSS 滚动条样式模块 第 1 级

W3C 候选推荐快照,

关于本文档的更多细节
此版本:
https://www.w3.org/TR/2021/CR-css-scrollbars-1-20211209/
最新发布版本:
https://www.w3.org/TR/css-scrollbars-1/
编辑草稿:
https://drafts.csswg.org/css-scrollbars/
历史:
https://www.w3.org/standards/history/css-scrollbars-1
实施报告:
https://wpt.fyi/results/css/css-scrollbars?label=experimental&label=master&aligned
反馈:
CSSWG 问题库
编辑:
Tantek Çelik (Mozilla)
(Microsoft)
Florian Rivoal (受邀专家)
建议对该规范进行编辑:
GitHub 编辑器

摘要

该 CSS 模块定义了影响滚动条视觉样式的属性,介绍了其颜色和宽度的控制。

CSS 是描述结构化文档(如 HTML 和 XML)在屏幕、纸张等上呈现的语言。

本文档的状态

本节描述了本文档在发布时的状态。当前 W3C 发布的列表以及该技术报告的最新修订可以在 W3C 技术报告索引 中找到。

本文档由 CSS 工作组 作为候选推荐快照发布,使用推荐流程。 作为候选推荐发布并不意味着得到 W3C 及其成员的认可。 候选推荐快照已接受 广泛审查,旨在收集实施经验,并得到了工作组成员的承诺,提供免版税许可的实施。 本文档旨在成为 W3C 推荐;在收集额外反馈之前,它将至少保持候选推荐状态,直到

请通过 在 GitHub 上提交问题(首选),在标题中包括规范代码“css-scrollbars”,例如:“[css-scrollbars] …评论摘要…”。 所有问题和评论都被归档。 或者,反馈可以发送至(归档)公共邮件列表 www-style@w3.org

本文档受 2021年11月2日 W3C 过程文档 管辖。

本文档由一个遵循 W3C 专利政策 的小组制作。 W3C 保持 任何专利披露的公共列表,该列表包括与小组交付物相关的披露; 该页面还包含披露专利的说明。 任何实际知晓其认为包含 基本索赔 的专利的人,必须根据该政策 的要求进行披露。 并且在此过程中,由 W3C 专利政策 规定的要求必须遵守。

1. 引言

本节为非规范性内容。

该 CSS 模块引入了影响滚动条视觉样式的属性,包括它们的颜色(scrollbar-color)和厚度(scrollbar-width)。

1.1. 范围

CSS 滚动条模块专门用于样式化滚动条控件本身,例如它们在第 1 级的颜色和宽度,而不是它们的布局或任何内容是否可滚动。所有布局影响和内容可滚动性在CSS 溢出模块中说明。

根据文档中的用例,该模块旨在解决关于滚动条的三种主要用例:

  1. 为滚动条着色,以更好地适应网页应用的 UI。
  2. 在滚动区域较小时使用较薄的滚动条。
  3. 隐藏用户代理提供的滚动条,以便提供自定义的滚动接口,而不影响其他滚动性方面。

1.1.1. 超出范围

滚动条的内部结构、布局和配置,以及对其颜色的精确控制,不在本范围之内。这是因为不同平台具有不同的滚动条结构和样式约定,操作系统不断发展其滚动条设计,以提供更好的用户体验。选择滚动条特定部分的伪元素,例如,被考虑并被拒绝。虽然这种细微控制对作者而言具有吸引力,但各种部分的排列——或是否全部存在——无法依赖。提供过多的控制可能会导致作者在某些平台上获得完美结果,但以牺牲其他平台的结果为代价。

注意: 向 Web 暴露与滚动条相关的::-webkit- 前缀伪元素被 CSS 工作组和 Webkit 视为错误。

1.2. 值定义

本规范遵循CSS 属性定义约定,来源于[CSS2],使用值定义语法,来源于[CSS-VALUES-3]。本规范未定义的值类型在 CSS 值和单位[CSS-VALUES-3]中定义。与其他 CSS 模块的组合可能扩展这些值类型的定义。

除了在其定义中列出的特定于属性的值外,本规范中定义的所有属性也接受CSS 宽关键字作为其属性值。为了可读性,这些值没有被重复明确列出。

2. 滚动条颜色:scrollbar-color 属性

名称: scrollbar-color
值: auto | <color>{2}
初始: auto
适用对象: 滚动容器
继承:
百分比: 不适用
计算值: 指定关键字或两个计算颜色
规范顺序: 按语法
动画类型: 按计算值

此属性允许作者设置元素滚动条的颜色。

用户代理必须将根元素上设置的 scrollbar-color 值应用于视口。

注意:overflow (以及 overflow-*)属性不同,设置在 HTML body 元素上的 scrollbar-color 值不会传播到视口。

auto
用户代理决定滚动条的颜色。 应遵循平台约定, 但可以根据color-scheme或其他上下文信息进行调整, 以更好地适应页面。
<color>
将第一个颜色应用于滚动条的滑块, 第二个颜色应用于滚动条的轨道。

详细信息:

轨道指的是滚动条的背景, 通常在滚动位置上是固定的。

滑块指的是滚动条的移动部分, 通常悬浮在轨道上方。

如果该属性计算出的值不同于auto, 实现可能会渲染出比默认平台 UI 渲染更简单的滚动条, 并相应地为其着色。

注意:有时用户代理无法自定义本机 滚动条的颜色, 可能是由于其结构或本机工具包提供的控制权不足。 上述规定允许用户代理用其能够着色的不同构造的滚动条替换它们。

(注意:添加示意图显示不同命名部分 - 类似于http://www.howtocreate.co.uk/tutorials/scrlbar.html)

(注意:添加一个溢出元素的示例,其颜色化的滚动条与页面样式相匹配, PNG图像在支持它的浏览器中的相同效果)

实现可以忽略任何颜色, 如果对应的部分在基础平台上不存在。

当使用scrollbar-color属性并指定颜色值时, 作者应确保指定的颜色之间有足够的对比度。 对于关键字值,用户代理应确保使用的颜色有足够的对比度。 请参见WCAG 2.1 SC 1.4.11 非文本对比度 [WCAG21]。 用户代理可能会根据明确的用户偏好忽略这些对比度要求 (例如,当用户选择一个配置选项/设置时, 始终确保特定的滚动条颜色/使用系统默认滚动条)。

注意:当用户与滚动条交互时(例如,悬停或 激活), 实现可能会改变哪些滚动条颜色适用于哪些滚动条部分。

注意:IE 使用命名的系统颜色作为每个滚动条 颜色属性的默认值。 参见相关问题 1956

以下示例 (来源于https://www.w3.org/Style/Examples/007/scrollbars.en.html) 重置了 IE 中的滚动条颜色。

html {
    scrollbar-color: ThreeDFace Scrollbar;
}

3. 滚动条厚度:scrollbar-width 属性

名称: scrollbar-width
值: auto | thin | none
初始值: auto
适用对象: 滚动容器
继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法
动画类型: 按计算值

此属性允许作者指定元素滚动条的所需厚度。

此属性的主要目的是不是让作者选择特定的滚动条美学,而是让他们指出在某些小型或拥挤的页面元素中,较小的滚动条是可取的。

滚动条是与页面互动的重要 UI 机制。操作系统倾向于希望这些控件保持一致性,以通过熟悉性提高可用性,用户可以通过操作系统或用户代理设置调整各种 UI 组件的外观,包括滚动条。

虽然在支持特定用户体验目标时使用此属性是合适的,但作者应当避免覆盖用户的偏好。

auto
实现必须使用默认的滚动条宽度。

注意:在大多数系统上,这对应于传统的较宽滚动条。 然而,通过操作系统或用户代理设置,用户可以更改此默认设置,使默认滚动条的宽度可能大于或小于典型值。

thin
实现应使用比auto更薄的滚动条。 这可能意味着平台提供的滚动条的细变体,或比默认平台滚动条更薄的自定义滚动条。 但滚动条必须保持足够的宽度以便可用。 (实现者可能希望参考WCAG 2.1 SC 2.5.5 目标大小[WCAG21]

注意:用户代理可以使用各种策略确保窄滚动条的可用性。 例如,在覆盖滚动条的情况下, 它们可以在用户尝试与其交互时动态增大滚动条。 在触摸屏设备上,用户代理也可以调整如何解释手指点击,以便更方便地与视觉上小的触摸目标进行交互。

用户代理可以忽略此值并将其视为auto, 例如,当用户通过某个用户代理或操作系统设置表示对薄滚动条的不适时。 (鼓励用户代理提供这样的设置。)

注意:某些平台默认只有一个微小的滚动条,无法合理地变得更薄。 在这种情况下,此值将表现得像auto

none
实现必须不显示任何滚动条,但元素的滚动性不受其他方式的影响。
使用此值可能会导致仅使用鼠标的用户无法滚动。作者应确保仅使用鼠标的用户仍然能够到达隐藏的内容,即使他们没有滚轮。
使用none的作者应提供一种替代/等效的视觉提示,以表明可以滚动且有更多内容。

注意:对于只通过程序手段而不是直接用户操作来滚动的情况,作者应使用overflow: hidden而不是scrollbar-width: none

注意:发现thin样式的滚动条无法使用的用户,可以在其用户样式表中包含以下规则:
* { scrollbar-width: auto !important; }

这将确保所有滚动条的大小根据操作系统和用户代理设置进行调整,无论作者样式如何。

用户代理必须将根元素上设置的scrollbar-width值应用于视口。

注意:overflow属性(及其长形式)不同,在HTML body 元素上设置的scrollbar-width值不会传播到视口。

注意:此规范未定义滚动条的确切位置或形状, 也不包括任何动画效果,例如渐变或滑入/滑出视图。

附录 A. 感谢

本附录为非规范性

感谢Tab AtkinsXidorn Quan的用例、原型、实施和反馈。感谢#3315中来自Patrick H. Lauke的可访问性审查和贡献。

附录 B. 变更

本附录为非规范性

2021-12-02 工作草案以来的变更

2021-08-05 工作草案以来的变更

2018-09-25 第一个公共工作草案以来的变更

附录 C. 安全性和隐私考虑

本附录为非规范性

安全性考虑

未发现与本规范相关的具体安全问题。

隐私考虑

未发现与本规范相关的具体隐私问题。

自我审查问卷

根据自我审查问卷:安全性和隐私:需考虑的问题

  1. 本规范是否涉及个人可识别信息?

    没有。

  2. 本规范是否涉及高价值数据?

    没有。

  3. 本规范是否引入在浏览会话之间持久存在的原点状态?

    没有。

  4. 本规范是否向网络暴露持久的跨源状态?

    没有。

  5. 本规范是否向原点暴露其他当前没有访问权限的数据?

    没有。

  6. 本规范是否启用新的脚本执行/加载机制?

    没有。

  7. 本规范是否允许原点访问用户的位置?

    没有。

  8. 本规范是否允许原点访问用户设备上的传感器?

    没有。

  9. 本规范是否允许原点访问用户本地计算环境的某些方面?

    没有。

  10. 本规范是否允许原点访问其他设备?

    没有。

  11. 本规范是否允许原点对用户代理的本地 UI 有一定控制?

    是的。scrollbar-* 属性允许页面更改用户代理本地 UI 的滚动条的颜色和宽度,例如页面窗口中的滚动条、嵌入页面的框架内容中的滚动条或页面中溢出元素的滚动条。

  12. 本规范是否向网络暴露临时标识符?

    没有。

  13. 本规范是否区分第一方和第三方上下文中的行为?

    没有。

  14. 本规范在用户代理的“隐身”模式下应该如何工作?

    没有不同。

  15. 本规范是否将数据持久化到用户的本地设备?

    没有。

  16. 本规范是否有“安全性考虑”和“隐私考虑”部分?

    是的。

  17. 本规范是否允许降低默认安全特性?

    没有。

附录 D. 可访问性考虑

本附录为非规范性

正如在属性定义中提到的,作者需要注意使用scrollbar-width: thin的可访问性影响。滚动条是用户代理界面的重要组成部分,网站作者不应仅因美观考虑而改变其大小。该属性可支持在网页拥挤区域内使用细滚动条更有效地利用空间的情况。然而,最终,用户通过其用户代理需要对此类问题拥有最后的决定权。

在这种情况下使用该属性优于作者通过脚本或专有扩展构建自定义细滚动条,因为它确实给了用户覆盖的机会。

用户样式表确实提供了这样的覆盖,并且鼓励用户代理提供设置,让用户表示他们不希望使用细滚动条。

CSS工作组还承认一些用户需要比典型宽度更宽的滚动条。操作系统和用户代理可以提供一种方式,让用户表达这种偏好,在这种情况下,CSS会尊重该选择。

符合性

文档约定

符合性要求通过描述性断言和RFC 2119术语的组合来表达。关键字“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”和“OPTIONAL”在本文件的规范部分应按照RFC 2119中的描述进行解释。然而,为了可读性,这些词在本规范中并不全部以大写字母出现。

本规范的所有文本都是规范性的,除了明确标记为非规范性的部分、示例和注释。[RFC2119]

本规范中的示例以“例如”开头,或通过class="example"与规范性文本区分开,如下所示:

这是一个信息性示例。

信息性注释以“注”开头,并通过class="note"与规范性文本区分开,如下所示:

注:这是一个信息性注释。

建议是以规范性部分形式呈现,旨在引起特别关注,并通过<strong class="advisement">与其他规范性文本区分开,如下所示: 用户代理必须提供可访问的替代方案。

符合性类别

本规范的符合性定义为三个符合性类别:

样式表
一个CSS样式表
渲染器
一个用户代理,解释样式表的语义并渲染使用它们的文档。
创作工具
一个用户代理,编写样式表。

如果样式表中使用本模块定义的语法的所有语句都符合通用CSS语法和本模块中定义的每个特性的单独语法,则该样式表符合本规范。

如果渲染器除了按照适当的规范解释样式表外,还通过正确解析并相应地渲染文档来支持本规范定义的所有特性,则该渲染器符合本规范。然而,用户代理因设备限制无法正确渲染文档并不意味着该用户代理不符合规范。(例如,用户代理不需要在单色显示器上渲染颜色。)

如果创作工具编写的样式表在语法上符合通用CSS语法和本模块中每个特性的单独语法,并满足本模块中描述的样式表的所有其他符合性要求,则该创作工具符合本规范。

部分实现

为了使作者能够利用向前兼容的解析规则来分配回退值,CSS渲染器必须将其视为无效(并且根据需要忽略)任何他们没有可用支持级别的at规则、属性、属性值、关键字和其他语法构造。特别是,用户代理不得选择性地忽略不支持的组件值,并在单个多值属性声明中尊重支持的值:如果任何值被视为无效(因为不支持的值必须如此),CSS要求整个声明被忽略。

不稳定和专有特性的实现

为了避免与未来稳定CSS特性的冲突,CSS工作组建议遵循最佳实践来实现不稳定特性和专有扩展

非实验性实现

一旦规范达到候选推荐阶段,可以进行非实验性实现,实施者应发布任何他们能证明根据规范正确实现的CR级特性的未加前缀的实现。

为了建立和维护CSS在实现之间的互操作性,CSS工作组要求非实验性CSS渲染器在发布任何CSS特性的未加前缀的实现之前,向W3C提交实施报告(如有必要,提交用于该实施报告的测试用例)。提交给W3C的测试用例将由CSS工作组进行审查和更正。

有关提交测试用例和实施报告的更多信息,请访问CSS工作组的网站https://www.w3.org/Style/CSS/Test/。如有疑问,请联系public-css-testsuite@w3.org邮件列表。

CR退出标准

为了将本规范提升为提议推荐,必须有至少两个独立、互操作的实现每个特性。每个特性可以由不同的产品集实现,没有要求所有特性由单一产品实现。为此标准,我们定义以下术语:

独立的
每个实现必须由不同的方开发,不能共享、重用或衍生自其他合格实现使用的代码。与本规范的实现无关的代码部分不受此要求的限制。
互操作的
通过官方CSS测试套件中的相关测试用例,或者,如果该实现不是Web浏览器,则为等效测试。测试套件中的每个相关测试应创建等效测试,如果要使用此类用户代理(UA)来声明互操作性。此外,如果要使用此类UA声明互操作性,则必须有一个或多个其他UA也能以相同方式通过这些等效测试。等效测试必须公开可用,以便进行同行评审。
实现
一个用户代理,它:
  1. 实现规范。
  2. 对公众开放。该实现可以是一个已发货的产品或其他公开可用的版本(即,beta版本、预览版本或“夜间构建”)。非已发货产品发布必须在至少一个月内实现特性,以证明稳定性。
  3. 不是实验性的(即,专门设计用于通过测试套件的版本,并不打算向前进行正常使用)。

该规范将保持候选推荐状态至少六个月。

索引

本规范定义的术语

引用定义的术语

参考文献

规范性参考文献

[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley. CSS颜色模块第4版. 2021年6月1日. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-COLOR-ADJUST-1]
Elika Etemad; 等. CSS颜色调整模块第1版. 2021年6月16日. WD. URL: https://www.w3.org/TR/css-color-adjust-1/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS溢出模块第3版. 2021年12月2日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS值和单位模块第3版. 2019年6月6日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS值和单位模块第4版. 2021年10月16日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS2]
Bert Bos; 等. 层叠样式表第2级修订版1 (CSS 2.1) 规范. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[RFC2119]
S. Bradner. 在RFC中指示需求级别的关键词. 1997年3月. 最佳现行实践. URL: https://datatracker.ietf.org/doc/html/rfc2119

非规范性参考文献

[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS层叠和继承第5级. 2021年10月15日. WD. URL: https://www.w3.org/TR/css-cascade-5/
[HTML]
Anne van Kesteren; 等. HTML标准. 现行标准. URL: https://html.spec.whatwg.org/multipage/
[WCAG21]
Andrew Kirkpatrick; 等. 网页内容无障碍指南 (WCAG) 2.1. 2018年6月5日. REC. URL: https://www.w3.org/TR/WCAG21/

属性索引

名称 初始值 适用对象 继承 百分比 动画类型 规范顺序 计算值
scrollbar-color auto | <color>{2} auto 滚动容器 不适用 按计算值 按语法 指定的关键词或两个计算颜色
scrollbar-width auto | thin | none auto 滚动容器 不适用 按计算值 按语法 指定的关键词