CSS 基本用户界面模块 第四级

W3C 工作草案,

此版本:
https://www.w3.org/TR/2021/WD-css-ui-4-20210316/
最新发布版本:
https://www.w3.org/TR/css-ui-4/
编辑草案:
https://drafts.csswg.org/css-ui-4/
以前版本:
测试套件:
http://test.csswg.org/suites/css-ui-4_dev/nightly-unstable/
问题跟踪:
CSSWG 问题仓库
规范中的内联问题
编辑:
Florian Rivoal (代表彭博社)
为此规范建议编辑:
GitHub 编辑器

摘要

本规范描述了与用户界面相关的属性和值,用于样式化 HTML 和 XML(包括 XHTML)。它包括并扩展了前几个 CSS 级别中的用户界面相关功能,使用各种属性和值对文档中的基本用户界面元素进行样式化。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等上的渲染的语言。

本文件的状态

本节描述了本文件在发布时的状态。其他文件可能会取代本文件。W3C 当前出版物的列表以及本技术报告的最新修订版可在 https://www.w3.org/TR/ 的 W3C 技术报告索引中找到。

本文件由 CSS 工作组 作为 工作草案 发布。作为工作草案发布并不意味着 W3C 成员的认可。

这是一个草案文件,可能会随时被其他文件更新、替换或废弃。不应将此文件引用为工作进行中的其他内容。

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

本文件受 2020年9月15日的 W3C 过程文件 约束。

本文件由遵循 W3C 专利政策 的小组制作。W3C 维护了与小组可交付成果相关的任何专利披露的公共列表;该页面还包括披露专利的说明。个人如果实际知道某项专利并认为它包含必要声明,必须按照W3C 专利政策第6节披露信息。

以下功能存在风险,可能在 CR 期间被删除:

“存在风险”是 W3C 过程中的术语,不一定意味着该功能有被删除或延迟的危险。这意味着工作组认为该功能可能在及时互操作性实现方面有困难,标记为“存在风险”允许工作组在必要时在转为建议提案阶段时删除该功能,而无需先发布没有该功能的新候选推荐。

1. 简介

本模块描述了 CSS 属性,使作者能够为用户界面相关的属性和值设置样式。

CSS1 第 2.1 节 [CSS1]CSS2 第 18 章 [CSS21] 引入了多个与用户界面相关的属性和值。CSS3 用户界面(2000 年 2 月 16 日) 引入了一些新的用户界面相关功能。

[CSS-UI-3] 后来被引入,以整合、扩展并取代这些功能。本规范延续了这项工作,并进一步取代了 [CSS-UI-3]

1.1. 目的

本规范的目的是实现以下目标:

2. 模块交互

本文档定义了先前规范中未出现的新功能。此外,它取代了 [CSS-UI-3],而 [CSS-UI-3] 本身则取代了以下内容:

注意: box-sizing 属性之前在本节规范中定义,但已移至 CSS Sizing 3 §3.3 盒边缘尺寸:box-sizing 属性

注意: text-overflow 属性之前在本节规范中定义,但已移至 CSS Overflow 3 §4.1 溢出省略号:text-overflow 属性

2.1. 值定义

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

除了其定义中列出的特定属性值外,本规范中定义的所有属性还接受 CSS-wide 关键字 作为其属性值。 为了可读性,它们没有被重复明确列出。

3. 轮廓属性

样式表的作者有时可能希望在按钮、活动表单字段、图像映射等视觉对象周围创建轮廓,以使其突出显示。轮廓与边框的不同之处在于:

  1. 轮廓不占用空间。
  2. 轮廓可以是非矩形的。
  3. 用户代理通常在元素处于 :focus 状态时渲染轮廓。

轮廓属性控制这些动态轮廓的样式。

这些轮廓的渲染堆叠显式留给实现者,以便在每个平台上提供更好的用户体验。这取代了在 CSS 2.1 附录 E [CSS21] 中定义的轮廓堆叠。

键盘用户,特别是可能无法以其他方式与页面交互的残障人士,依赖于在 :focus 状态下轮廓的可见性,因此作者不得在这些元素上使轮廓不可见,除非确保提供了替代的高亮机制。

在 CSS3-UI 中,应用变换到轮廓的渲染显式未定义。

3.1. 轮廓速记:outline 属性

名称: outline
值: [ <'outline-color'> || <'outline-style'> || <'outline-width'> ]
初始值: 见各个属性
适用于: 所有元素
继承:
百分比: 不适用
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 按语法

3.2. 轮廓厚度:outline-width 属性

名称: outline-width
值: <line-width>
初始值: medium
适用于: 所有元素
继承:
百分比: 不适用
计算值: 绝对长度;如果轮廓样式是 none,则为 0
规范顺序: 按语法
动画类型: 按计算值

3.3. 轮廓样式:outline-style 属性

名称: outline-style
值: auto | <outline-line-style>
初始值: none
适用于: 所有元素
继承:
百分比: 不适用
计算值: 指定的关键字
规范顺序: 按语法
动画类型: 按计算值

3.4. 轮廓颜色:outline-color 属性

名称: outline-color
值: <color> | invert
初始值: invert
适用于: 所有元素
继承:
百分比: 不适用
计算值: 对于 invert 的计算值为 invert。对于 <color> 值,请参见 [CSS-COLOR-4] 中的 [[!CSS-COLOR-4#resolving-color-values]]。
规范顺序: 按语法
动画类型: 按计算值

使用轮廓属性创建的轮廓是绘制在盒子“上方”的,也就是说,轮廓始终位于顶部,不影响盒子或其他盒子的位置或大小。因此,显示或隐藏轮廓不会导致页面重排。

轮廓可以是非矩形的。例如,如果元素被分隔到几行,轮廓应为围绕所有元素盒子的最小集合。

轮廓的每个部分应完全连接,而不是在某些边上开放(与当行被分隔时的行内元素的边框不同)。

轮廓的各个部分不必是矩形。到轮廓跟随 边框边缘 的程度,它应遵循 border-radius 曲线。

轮廓的位置可能会受到子孙盒子的影响。

用户代理应使用确定轮廓的算法来包含适合传达焦点概念的区域。

注意: 本规范未定义轮廓的确切位置或形状,但通常绘制在边框盒子外侧。

outline-width 属性接受与 border-width 相同的值(CSS Backgrounds 3 §3.3 线厚度:边框宽度属性)。

<outline-line-style> 接受与 <line-style>CSS Backgrounds 3 §3.2 线样式:边框样式属性)相同的值,含义相同,除了 hidden 不是合法的轮廓样式。此外,outline-style 属性接受值 autoauto 值允许用户代理渲染自定义轮廓样式,通常是平台的用户界面默认样式,或者可能是比 CSS 中详细描述更丰富的样式,例如,具有半透明外部像素的圆边轮廓,看起来像在发光。因此,本规范未定义在渲染 auto 样式轮廓时,如何结合或使用(如果有)outline-coloroutline-width。用户代理可以将 auto 视为 solid

outline-color 属性接受所有颜色以及关键字 invertinvert 期望对屏幕上的像素执行颜色反转。这是一种常见的技巧,确保焦点边框可见,无论背景颜色如何。

符合规范的用户代理可以在不支持屏幕上像素颜色反转的平台上忽略 invert 值。

如果用户代理不支持 invert 值,则必须在解析时拒绝该值,并且 outline-color 属性的初始值为 currentColor 关键字。

outline 属性是一个速记属性,设置了 outline-styleoutline-widthoutline-color

注意: 轮廓在所有边上都是相同的。与边框不同,没有 outline-topoutline-left 等属性。

本规范未定义如何绘制多个重叠轮廓或如何绘制被其他元素部分遮挡的盒子的轮廓。

这是在 BUTTON 元素周围绘制粗轮廓的示例:
button { outline: thick solid }

图形用户界面可能会在元素周围使用轮廓,以告诉用户页面上哪个元素具有焦点。这些轮廓是边框的补充,打开或关闭轮廓不应导致文档重新布局。焦点是文档中用户交互的对象(例如输入文本或选择按钮)。

例如,要在元素具有焦点时绘制粗黑线,在其处于活动状态时绘制粗红线,可以使用以下规则:
:focus  { outline: thick solid black }
:active { outline: thick solid red }

注意: 由于轮廓不会影响格式化(即盒模型中没有为其留出空间),它可能会与页面上的其他元素重叠。

3.5. 轮廓偏移:outline-offset 属性

默认情况下,轮廓从 边框边缘 外侧开始绘制。然而,可以偏移轮廓并将其绘制在 边框边缘之外。

名称: outline-offset
值: <length>
初始值: 0
适用于: 所有元素
继承:
百分比: 不适用
计算值: 绝对长度
规范顺序: 按语法
动画类型: 按计算值

如果 outline-offset 的计算值不为 0,则轮廓从 边框边缘 偏移相应的量。

例如,要在焦点轮廓与具有焦点或处于活动状态的元素之间留出 2 像素的空间,可以使用以下规则:
:focus,:active  { outline-offset: 2px }

负值必须使轮廓缩小到边框盒内。为了确保即使有较大的负值也能渲染轮廓,轮廓所绘制的形状外部的高度和宽度均不应变得小于 outline-width 属性计算值的两倍。用户代理应在每个维度上独立应用此约束。如果轮廓被绘制为多个不相连的形状,则此约束适用于每个形状。

4. 调整大小

CSS2.1 提供了一种控制滚动机制(例如滚动条)在块级容器元素上外观的机制。本规范为此增加了一种机制,用于控制元素的用户可调整大小性以及指定文本溢出行为的能力。

4.1. 调整盒子的大小:resize 属性

resize 属性允许作者指定一个元素是否可以由用户调整大小,如果可以,沿哪个轴或哪些轴调整大小。

名称: resize
值: none | both | horizontal | vertical | block | inline
初始值: none
适用于: 具有非 visible 溢出的元素,以及可选地替换元素,例如图像、视频和 iframe
继承:
百分比: 不适用
计算值: 指定的关键字
规范顺序: 按语法
动画类型: 离散
none
用户代理不会在元素上显示调整大小机制,用户没有直接操作机制来调整元素的大小。
both
用户代理显示双向调整大小机制,允许用户同时调整元素的高度和宽度。
horizontal
用户代理显示单向水平调整大小机制,允许用户仅调整元素的宽度。
vertical
用户代理显示单向垂直调整大小机制,允许用户仅调整元素的高度。
block
用户代理显示单向 块轴 调整大小机制,允许用户仅调整元素的 块大小
inline
用户代理显示单向 内联轴 调整大小机制,允许用户仅调整元素的 内联大小

目前,可以使用 overflow 属性控制元素上的滚动机制(如果有)的外观(例如 overflow: scrolloverflow: hidden 等)。resize 属性的目的是控制元素上调整大小机制(例如调整大小框或控件)的外观和功能。

注意:调整大小机制与滚动机制不同,也与任何用户代理的缩放机制无关。滚动机制允许用户确定显示元素内容的哪一部分,而调整大小机制允许用户确定元素的大小。

resize 属性适用于计算的 overflow 值不为 visible 的元素。无论 overflow 属性的值如何,用户代理也可以将其应用于:

resize 属性对生成的内容的效果未定义。实现不应将 resize 属性应用于生成的内容。

注意:如果实现了 CSSPseudoElement 接口resize 属性可能会在将来应用于生成的内容。

当用户调整元素大小时,用户代理在元素的 style 属性 DOM 中将 widthheight 属性设置为用户指定大小的 px 单位长度值,替换现有的属性声明(如果有),不包括 !important(如果有)。

如果元素仅在一个维度上调整大小,则仅设置相应的属性,而不是同时设置两个。

调整大小的精确方向(即更改元素的左上角或更改右下角)可能取决于多个 CSS 布局因素,包括元素是否绝对定位、是否使用 rightbottom 属性定位,以及元素的语言是否从右到左等。用户代理应在决定如何将调整大小机制传达给用户时,考虑调整大小的方向(由 CSS 布局确定)、平台惯例和限制。

用户代理必须允许用户在不受任何其他限制的情况下调整元素的大小,这些限制仅由 min-widthmax-widthmin-heightmax-height 强加。

注意:在某些情况下,用户尝试调整元素大小似乎被覆盖或忽略,例如,由于具有 !important 的层叠声明优先于该元素的 style 属性中的 widthheight 属性。

更改元素 resize 属性的计算值不会重置由于用户调整该元素大小而对 style 属性 所做的更改。

例如,要使 iframes 可滚动且可调整大小,可以使用以下规则:
iframe,object[type^="text/"],
object[type$="+xml"],object[type="application/xml"]
{
  overflow:auto;
  resize:both;
}

5. 指示设备和键盘

5.1. 指针交互

5.1.1. 样式化光标:cursor 属性

名称: cursor
值: [ [<url> [<x> <y>]?,]*
[ auto | default | none |
context-menu | help | pointer | progress | wait |
cell | crosshair | text | vertical-text |
alias | copy | move | no-drop | not-allowed | grab | grabbing |
e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll |
zoom-in | zoom-out
] ]
初始值: auto
适用于: 所有元素
继承:
百分比: 不适用
计算值: 按指定,除了任何相对 URL 转换为绝对 URL
规范顺序: 按语法
动画类型: 离散

此属性指定当光标的热点在元素的 边框边缘内时为指示设备显示的光标类型。

注意: 根据 CSS 背景 3 §4.1 圆角半径:border-radius 属性边框边缘border-radius 影响。

在重叠的元素的情况下,哪个元素决定光标的类型基于命中测试:决定光标的元素是从此位置开始的点击将接收的元素。

注意:命中测试的细节不在本规范的范围内。命中测试有望在未来的 CSS 或 HTML 修订中定义。

用户代理可能会忽略原生用户代理控件(如滚动条、调整大小器或其他本地 UI 小部件,例如某些用户代理特定实现的表单元素中可能使用的小部件)上的光标属性。用户代理还可以忽略 cursor 属性,并显示他们选择的光标以指示 UA 用户界面的各种状态,例如页面未响应时的忙碌光标,或用户执行文本选择时的文本光标。

注意: [HTML] 定义了 图像映射的特殊处理,用于 cursor 属性。

值的含义如下:

图像光标
<url>
用户代理从URI指定的资源中检索光标。如果用户代理无法处理光标列表中的第一个光标,它必须尝试处理第二个,依此类推。如果用户代理无法处理任何用户定义的光标,它必须使用列表末尾的光标关键字。符合规范的用户代理可以支持 <url>,或 <image>,该格式是超集。

用户代理必须支持以下图像文件格式:

此外,用户代理应支持以下图像文件格式:

用户代理还可以支持其他文件格式,包括定义于 [SVG11] 的SVG格式,无论是否具有自然尺寸

注意:CSS 工作组最初打算支持所有 SVG 格式,无论是否具有自然尺寸。由于缺少实现,非自然尺寸 SVG 的支持从强制改为可选。

注意:在撰写本规范时(2015年春季),常见的桌面浏览器仅支持 .ico 和 .cur 文件格式,这两种格式由微软设计。为了兼容旧内容,建议用户代理支持这些格式,即使缺乏开放的规范也无法对这些格式提出规范要求。关于这些格式的一些信息可以在 维基百科 上找到。

默认对象大小 是一个由用户代理定义的尺寸,应该基于用户代理操作系统中典型光标的大小。

具体对象大小 是使用 默认尺寸算法 确定的。如果操作系统无法渲染超出某个大小的光标,则超过该大小的光标必须缩小到操作系统支持的尺寸范围内,同时保持光标图像的自然宽高比

可选的 <x> 和 <y> 坐标标识图像中的确切位置,即指针位置(即热点)。

<x>
<y>
每个坐标是 <number>。这些是光标坐标系统中的 x 坐标和 y 坐标(相对于左上角),表示被指向的精确位置。

注意:本规范未定义各种类型的<image>的坐标系统,定义将由 [CSS4-IMAGES] 规范决定。

如果未指定这些值,则使用图像资源内部定义的自然热点。如果这些值未指定且引用的光标没有定义热点,则效果等同于指定“0 0”值。

如果由 <x> 和 <y> 值或图像资源内部定义的热点坐标超出了光标图像的范围,则这些坐标必须分别进行限制以适应图像。

通用光标
auto
用户代理根据当前上下文确定显示的光标。具体来说,auto 在可选择的文本或可编辑元素上表现为 text,而在其他情况下表现为 default

注意:在可选择的文本或可编辑元素上,用户代理必须根据元素的书写模式使用竖直或水平文本光标,并且可以考虑变换和其他视觉效果。

default
平台依赖的默认光标。通常显示为箭头。
none
该元素没有光标显示。
链接和状态光标
context-menu
光标下的对象可用上下文菜单。通常显示为带有小菜单图形的箭头。
help
光标下的对象可用帮助。通常显示为问号或气泡。
pointer
光标是表示链接的指针。通常显示为伸出食指的手背。

除非另有说明,用户代理必须将 cursor: pointer 应用于所有支持的文档格式中的超链接, 通过 用户代理样式表 使用普通声明(即不带 !important)。

作者应在链接上使用 pointer,并可用于其他交互元素。

progress
进度指示器。程序正在进行处理,但与 wait 不同,用户仍可与程序交互。通常显示为旋转的沙滩球,或带有手表或沙漏的箭头。
wait
表示程序正在忙碌,用户应等待。通常显示为手表或沙漏。
选择光标
cell
表示可以选择一个或一组单元格。通常显示为带有中间点的粗十字。
crosshair
一个简单的十字线(例如,类似“+”号的短线段)。通常用于表示二维位图选择模式。
text
表示可以选择的文本。通常显示为 I 形光标。用户代理必须在具有水平 书写模式 的元素上自动显示竖直 I 形光标,在具有垂直 书写模式 的元素上显示水平 I 形光标(例如,类似于 vertical-text 关键字的效果)。此外,用户代理可以根据变换(见 [CSS-TRANSFORMS-1])或其他视觉效果(如路径文本)选择水平或垂直光标,并可以为以特定角度渲染的文本显示任意角度的 I 形光标。
vertical-text
表示可以选择垂直文本。通常显示为水平 I 形光标。
拖放光标
alias
表示要创建某个对象的别名/快捷方式。通常显示为带有小弯箭头的箭头。
copy
表示某物将被复制。通常显示为带有小加号的箭头。
move
表示某物将被移动。
no-drop
表示拖动的项目不能放置在当前光标位置。通常显示为带有小圆圈并穿过一条线的手或指针。
not-allowed
表示请求的操作不会执行。通常显示为带有穿过一条线的圆圈。
grab
表示某物可以被抓取(拖动移动)。通常显示为张开的手背。
grabbing
表示某物正在被抓取(拖动移动)。通常显示为手指大部分收起的手背。
调整大小和滚动光标
e-resize, n-resize, ne-resize, nw-resize, s-resize, se-resize, sw-resize, w-resize
表示某个边缘将被移动。例如,se-resize 光标用于从框的东南角开始移动时。
ew-resize, ns-resize, nesw-resize, nwse-resize
表示双向调整大小光标。
col-resize
表示项目/列可以水平调整大小。通常显示为指向左和右的箭头,中间有一个垂直条。
row-resize
表示项目/行可以垂直调整大小。通常显示为指向上下的箭头,中间有一个水平条。
all-scroll
表示某物可以向任意方向滚动。通常显示为指向上、下、左、右的箭头,中间有一个点。
缩放光标
zoom-in, zoom-out
表示可以放大或缩小,通常显示为带有“+”或“-”的放大镜,分别用于 zoom-inzoom-out
这是一个使用多种光标值的示例。
:link,:visited {
    cursor: url(example.svg#linkcursor),
      url(hyper.cur),
      url(hyper.png) 2 3,
      pointer
}

此示例将所有超链接(无论是否已访问)的光标设置为外部 SVG 光标。 不支持 SVG 光标的用户代理会跳过到下一个值并尝试使用 "hyper.cur" 光标。 如果该光标格式也不受支持,用户代理可以尝试使用带有显式热点的 "hyper.png" 光标。 最后,如果用户代理不支持任何这些图像光标格式,用户代理将跳到最后一个值并渲染 指针 光标。

5.1.1.1. 画布的光标

文档的 画布 是渲染文档的无限表面 [CSS21]。由于没有元素对应画布,为了在不位于任何元素上时允许设置光标样式,画布光标重用根元素的光标。然而,如果根元素没有生成任何框(例如,如果根元素具有 display: none),那么画布光标是平台相关的默认光标。

注意:一个元素可能是不可见的但仍然生成框。例如,如果元素具有 visibility: hidden 但没有 display: none,则它将生成框并为画布使用其光标。

5.2. 插入光标

5.2.1. 为插入光标着色: caret-color 属性

名称: caret-color
值: auto | <color>
初始值: auto
应用于: 所有元素
继承:
百分比: 不适用
计算值: auto 的计算值是 auto。 对于 <color> 值,请参见 [[!CSS-COLOR-4#resolving-color-values]] in [CSS-COLOR-4]
语法顺序: 根据语法
动画类型: 根据计算值
auto
用户代理应使用 currentColor。用户代理可以自动调整插入光标的颜色,以确保与周围内容有良好的可见性和对比度,可能基于 currentColor、背景、阴影等。

注意:caret-shape块状 时,确保良好可见性和对比度最好通过用户代理确定的颜色来实现,而不是 currentColor

<color>
插入光标将以指定颜色着色。

插入光标是元素中显示的一个可见指示器,表示用户插入文本(以及可能的其他内容)的插入点。此属性控制该可见指示器的颜色。

注意: 用户代理可能还有其他计作“光标”的事物。例如,一些用户代理可以显示“导航光标”,其行为类似于插入光标,但可以在不可编辑的文本中移动,功能上也是光标。另一方面,当悬停在文本上并且 cursor 属性为 auto,或者当悬停在 cursor 属性为 textvertical-text 的元素上时,尽管有时它看起来像一个光标,但实际上它是一个光标(而不是插入光标)。

示例: 一个具有 caret-color:#00aacc; 的文本区域

5.2.2. 插入光标的形状: caret-shape

名称: caret-shape
值: auto | bar | block | underscore
初始值: auto
应用于: 接受输入的元素
继承:
百分比: 不适用
计算值: 指定的关键字
语法顺序: 根据语法
动画类型: 根据计算值

此属性允许作者指定文本插入光标的期望形状。

在此定义上下文中,字符应理解为扩展字形簇,如 [UAX29] 中定义,可见字符指的是具有非零进度度量的字符。

auto
用户代理决定光标的形状。它应符合平台惯例,并可能根据上下文进行调整。例如,如果用户代理在用户按下键盘上的 插入 键时在插入模式和改写模式之间切换,则它可能会在插入模式下显示 条形光标,在改写模式下显示块状光标。
条形
用户代理必须将文本插入光标渲染为插入点处的一条细条。这意味着它位于字符之间、之前或之后,而不是覆盖它们。它应垂直于内联进度方向,但在插入斜体或倾斜文本时,用户代理可以将其渲染为倾斜的。
块状
用户代理必须将文本插入光标渲染为与插入点后面的下一个可见字符重叠的矩形。如果插入点后没有可见字符,用户代理必须在最后一个可见字符之后渲染光标。用户代理可以在插入斜体或倾斜文本时将其渲染为倾斜矩形。
下划线
用户代理必须将文本插入光标渲染为在下一个可见字符下方的一条细线。如果插入点后没有可见字符,用户代理必须在最后一个可见字符之后渲染光标。

块状下划线 光标的宽度应为插入点后下一个可见字符的进度度量,或如果没有下一个可见字符,或者此信息难以确定,则为 1ch

在确定光标的方向和外观时,用户代理必须考虑书写模式[CSS-WRITING-MODES-3],并必须应用[CSS-TRANSFORMS-1]中的变换。 如果编辑的文本是沿路径布局的,例如使用SVG中的 textPath 元素,用户代理也应考虑这一点。

条形下划线 光标的粗细,以及与它们类似渲染的 auto 光标的粗细,由用户代理确定。用户代理应选择一个厚度,确保即使光标因变换(如 [CSS-TRANSFORMS-1])被缩小,光标仍保持可见。

光标的堆叠位置在以下约束范围内未定义:

这展示了各种光标形状的典型外观。在每个示例渲染中,插入点位于字母 u 和 m 之间。
caret-shape 示例渲染 你的浏览器
(聚焦每个单元格以查看光标)
条形 Lorem ipsum Lorem Ipsum
块状 Lorem ipsum Lorem Ipsum
下划线 Lorem ipsum Lorem Ipsum
下划线块状 光标通常用于终端和命令行,如本例所示。
.console {
  caret-shape: underscore;
  background: black;
  color: white;
  font-family: monospace;
  padding: 1ex;
}

下面的模拟渲染展示了它应该如何显示。

user@host:css-ui-4 $ ls -a
. .. Overview.bs Overview.html
user@host:css-ui-4 $  

聚焦下面的元素,查看你的浏览器如何渲染它。

user@host:css-ui-4 $ ls -a
. .. Overview.bs Overview.html
user@host:css-ui-4 $

5.2.3. 插入光标速记: caret

名称: caret
值: <'caret-color'> || <'caret-shape'>
初始值: auto
应用于: 接受输入的元素
继承:
百分比: 不适用
计算值: 见各个属性
动画类型: 见各个属性
语法顺序: 根据语法

此属性是设置 caret-colorcaret-shape 的速记属性。 省略的值将设置为其初始值。

5.3. 键盘控制

名称: nav-up, nav-right, nav-down, nav-left
值: auto | <id> [ current | root | <target-name> ]?
初始值: auto
应用于: 所有启用的元素
继承:
百分比: 不适用
计算值: 按指定值
语法顺序: 根据语法
动画类型: 离散
auto
用户代理自动确定响应方向导航输入时导航焦点到哪个元素。
<id>
<id> 值是一个 ID 选择器 [SELECT]。响应与该属性对应的方向导航输入,焦点导航到匹配选择器的第一个元素。

如果该选择器指向当前已聚焦的元素,相应的 nav- 属性方向导航输入将被忽略——无需重新聚焦同一元素。

如果没有元素匹配选择器,用户代理将自动确定焦点要导航到哪个元素。

如果焦点导航到一个本来不可聚焦的元素,则该元素将因该方向导航变为可聚焦,且 :focus 伪类将在其聚焦时匹配该元素。

注意: 对于此类“本来不可聚焦”的元素,还考虑了其他选项,包括将焦点转移到文档树中下一个可聚焦的元素(包括此类不可聚焦元素的后代)。欢迎对此类其他选项提供意见,尤其是从实现和作者使用方向导航属性的经验中获取的反馈。

<target-name>
<target-name> 参数指示焦点导航的目标框架。它是一个 <string>,且不得以下划线 "_" 字符开头。 错误处理:如果它以下划线开头,"_parent" 导航到父框架,"_root" 视为 root,其他值将导航到该名称的框架(如果存在)。 如果指定的目标框架不存在,则该参数将被视为关键字 current,即使用该元素所在的框架。 关键字 root 表示用户代理应将目标设为整个窗口。

具有方向导航键的设备上的用户代理将通过四个分别对应的 nav-* 方向导航属性(nav-up、nav-right、nav-down、nav-left)进行响应,导航焦点。本规范未定义设备上哪些键为方向导航键。

注意: 典型的个人电脑有四个方向键。一个可能的实现是使用这四个方向键进行方向导航。为了提高可访问性和用户便利性,用户代理应允许配置键盘上的哪些键用于方向导航。

5.3.1.1. 示例: 定位按钮

以下是一个按钮定位为菱形的示例, 其方向焦点导航设置为当用户选择方向导航时, 焦点顺时针(或逆时针)围绕菱形导航。

button { position:absolute }

button#b1 { 
  top:0; left:50%; 
  nav-right:#b2; nav-left:#b4; 
  nav-down:#b2; nav-up:#b4; 
}

button#b2 { 
  top:50%; left:100%; 
  nav-right:#b3; nav-left:#b1; 
  nav-down:#b3; nav-up:#b1; 
}

button#b3 { 
  top:100%; left:50%; 
  nav-right:#b4; nav-left:#b2; 
  nav-down:#b4; nav-up:#b2; 
}

button#b4 { 
  top:50%; left:0; 
  nav-right:#b1; nav-left:#b3; 
  nav-down:#b1; nav-up:#b3; 
} 

无论按钮的标记顺序如何(本示例中未指定),在这种情况下并不重要,因为它们是定位的,但确保焦点导航行为与指定的布局合理相关仍然很重要。

5.3.1.2. 示例: 将焦点移动到框架内

将焦点移动到特定框架内的元素需要该元素的id和框架的名称。

此示例展示了如何使从id为“foo”的按钮向左导航时,将焦点移动到名为“sidebar”的框架内id为“bar”的元素。

button#foo { nav-left: #bar "sidebar"; } 

5.3.2. 已废弃: ime-mode 属性

ime-mode 是一个在某些浏览器中部分实现的属性, 存在问题并被本规范及其前身[CSS-UI-3]正式废弃。

有关这些实现不兼容的文档。

用户代理不应支持 ime-mode 属性。

作者不得使用 ime-mode 属性。

用户仅在修复用例中使用 ime-mode 属性, 例如,当他们必须解决糟糕的站点和遗留实现时, 可以通过用户样式表规则使用,如:

示例: 用户偏好
input[type=password] {  ime-mode: auto !important; 
} 

此示例CSS可以放置到用户样式表文件中,以强制密码输入字段以默认方式运行。

本规范故意不尝试记录遗留 ime-mode 实现的功能,也不描述它们具体支持什么功能, 因为追求或推荐任何这样的路径都没有意义。

注意: 有一些[HTML5]功能,作者应使用它们 来为用户代理提供信息,从而提供更好的输入用户体验:

6. 用户交互

6.1. 控制内容选择

user-select 属性使作者能够指定 文档中的哪些元素可以被用户选择以及如何选择。 这使交互更加容易,特别是当并非所有元素都同样有用时, 避免了意外选择邻近内容。

名称: user-select
值: auto | text | none | contain | all
初始值: auto
应用于: 所有元素,并可选应用于::before::after 伪元素
继承:
百分比: 不适用
计算值: 指定的关键字
规范顺序: 按语法
动画类型: 离散

用户代理不得将 user-select 属性应用于 ::first-line::first-letter 伪元素。

注意: UA 可以将此属性应用于::before::after 伪元素。 如果这样做,auto 值将映射为这些伪元素的 使用值none, 但可以指定其他值。 这保留了生成内容不可选择或复制的传统行为, 这在这些伪元素用于装饰目的时是合适的。 但是,此属性允许它们变得可选择和可复制, 正如用户在它们用于生成内容时所期望的那样, 例如此文档中的问题编号。作者应尽可能避免 使用生成的内容用于非装饰性目的, 并应优先将所有内容包含在DOM中。 此功能存在风险。

如果我们允许 user-select 更改为 none 之外的值, 我们需要弄清楚这对可复制性和DOM API意味着什么。

通过此机制,当伪元素中的生成内容变得可选择时, 用户代理还应使这些内容通过其搜索功能可被找到。

它是否还应适用于 ::marker? 是否适用于 页面边距框? auto 的 使用值 是否也应该是 text

用于此规范的 使用值计算值相同, 但有以下例外:

  1. 可编辑元素 上, 使用值 始终是 contain,无论 计算值 是什么
  2. 计算值auto 时, 使用值 是如下所定义的其他值之一

为了本规范的目的, 一个 可编辑元素 是 一个 编辑宿主 或者一个 可变的 表单控件,具有文本内容, 例如 textarea

应该对编辑宿主的可编辑子孙元素的使用值 施加约束吗? 语义并不明显。 也许 none 应该映射到 text, 或者可能所有值都应该映射到 text

auto
auto使用值 确定如下:

注意: 这种非继承属性与初始值 auto 的不寻常组合,其使用值取决于父元素,从而使创建实际上是选择性继承的行为成为可能。 该行为最初由 Microsoft 在 IE 中提出,以引入一种类似于继承的行为,除了 contain 值不继承。

text
元素对选择不施加限制。
none
UA 不得允许在此元素中开始选择。

在此元素外部开始的选择不得在此元素中结束。 如果用户试图创建这样的选择, UA 必须在元素边界结束选择范围。

注意: 在撰写本文时,实验性实现并非全都如此。 Firefox 是这样。 Chrome 和 Safari 几乎是这样:对于在元素之后开始的选择并试图向后进入元素, 它们的行为如本规范所述, 但对于在元素之前开始的选择并试图进入元素, 它们的行为像是该元素具有 all 并完全选中它。 IE 完全不限制从元素外部开始的选择进入该元素。 另一个不同之处是,在 Chrome 和 Safari 中, 如果用户试图在 user-select: none 内部开始选择, 并在它之外结束选择, 将从元素边界到用户指定的终点创建选择。 Firefox 和 Internet Explorer 的行为如本规范所述, 根本不会创建选择。

然而,如果此元素具有后代且这些后代的 使用值user-select 不是 none, 则允许在这些后代中开始和结束的选择。

UA 必须允许选择跨越此元素,并且必须将此元素排除在选择之外。 不支持多范围选择的 UA 是个例外,它们可以包括此元素。 如果该元素具有后代,并且这些后代的 使用值user-select 不是 none, 则这些后代必须包含在跨越该元素的选择中。 本规范对剪贴板行为没有规范性要求, 但鼓励 UA 保持视觉选择与复制到剪贴板的内容一致。 复制未显示为选择的文本或反之,可能会让用户非常困惑。

试图在 user-selectnone 的元素中开始选择, 例如点击或在其中拖动,不得导致现有选择被取消选择或受到任何影响。

由于 user-select 是一种用户界面便利机制, 而不是一种复制保护机制, UA 可以为用户提供替代方式, 以便即使 user-selectnone, 用户仍可显式选择文本。

注意: none 不是一种复制保护机制, 使用它作为复制保护是无效的: 用户代理可以提供绕过该机制的方式, 它对不支持它的旧版用户代理没有影响, 并且用户可以通过用户样式表或类似机制禁用它。 相反,none 旨在 通过让作者禁用不适合选择的 UI 元素上的选择, 使用户更容易选择他们想要的内容。 鼓励工具如 CSS 验证器、代码审查工具或浏览器内开发者工具 使用启发式方法检测并警告不正确或滥用的使用情况, 这些使用会妨碍可用性或违背用户的普遍预期。

作者应谨慎,不要不必要地限制用户。 例如,在根元素上设置 user-select: none, 并在少数作者认为有用的可选择元素上放宽该限制,可能会让用户感到沮丧:
  • 点击空白区域以取消当前选择将不再有效

  • 作者可能忽略了应可选择的某些区域

  • 稍后可能会向页面添加区域而未记得使其可选择

  • 用户可能希望选择除主要内容以外的文本片段, 例如将其查字典或翻译工具中查找, 或在搜索引擎中查找警告和错误消息……

相反,作者的好做法是有选择性地应用 user-select: none 到 可能在无意中被选择且这样做会干扰更可能的预期操作的元素上。 意外地保留页面中不太可能交互的部分仍然可选择, 可能比相反的做法对用户造成的挫折要少得多。

contain
UA 不得允许在此元素中开始的选择扩展到此元素之外。

在此元素外部开始的选择不得在此元素中结束。 如果用户试图创建这样的选择, UA 必须在元素边界结束选择范围。

UA 必须允许选择跨越此元素, 并且此类选择必须包括该元素的内容。

注意: 在撰写本文时,实验性实现在 外部开始的选择和进入元素的选择行为方面表现不同。 即使在不显式支持 contain 的浏览器中, 也可以通过尝试选择 textarea 或 contenteditable 元素来观察此行为。

注意: 这是最初在 Internet Explorer 中 作为实验性功能引入的,名称为 user-select: element

all
元素的内容必须原子地选择: 如果选择将包含该元素的一部分, 则选择必须包含整个元素及其所有后代。 如果选择了该元素, 并且其父元素上的 使用值user-selectall, 则父元素必须递归包含在选择中。

如果此元素具有后代,并且这些后代的 使用值user-select 不是 all 且选择 完全包含在这些后代中, 则该选择不会扩展到包含整个元素。

注意: 选择可以包含的不仅仅是文本,还可以扩展到图片、表格、视频等。 复制和粘贴此类选择时的行为不在本规范的范围内。

对 HTML 的 UA 样式表进行了以下补充:

button, meter, progress, select { user-select: none; }

上述列表不完整, 需要至少包括 input 的各种按钮类型变体。

为了与旧版内容兼容, 支持 user-select 的 UA 还必须支持 -webkit-user-select 作为别名。

注意: 别名机制的具体细节故意留给 UA 自行决定。 将 -webkit-user-select 作为 user-select 的速记属性 被认为是一种有效的方式, 新的实现者应考虑这一点。 然而,存在通过其他方式支持 -webkit-user-select 作为 user-select 别名的 UA, 且对兼容性没有不利后果, 因此本规范允许灵活性。

7. 小部件的样式化

7.1. 小部件的强调色:accent-color 属性

名称: accent-color
值: auto | <color>
初始值: auto
应用于: 所有元素
是否继承:
百分比: 不适用
计算值: 关键字 auto 或一个计算出的颜色
规范顺序: 依照语法规则
动画类型: 通过计算值类型

任何给定平台上的用户界面控件通常被设计为一个统一的视觉风格集合, 在许多平台(虽然不是全部)上, 这个视觉风格包括使用一个强调色, 通常是一个与背景和前景色形成鲜明对比的亮色。 并不是每个控件在每种状态下都使用这个强调色, 但它仍然是控件配色方案的核心部分。

accent-color CSS 属性允许作者为由该元素生成的用户界面控件指定强调色, 值的含义如下:

auto
代表 UA 选择的颜色, 应该匹配平台的 强调色(如果有)。
<color>
指定用于 强调色 的颜色。

UA 应该使用指定的 accent-color 来绘制控件中本来会使用 强调色 的部分。 UA 必须保持控件的可读性对比度, 为了做到这一点, 可以调整颜色的亮度或明度, 或者在控件的其他部分进行颜色替换 (例如将叠加的符号从使用 color 改为使用 background-color)。 它也可以生成颜色的变体,用于渐变等,以使控件符合平台的强调色使用约定。

单选按钮通常由一个圆组成, 可能还叠加了一个“点”来表示已选中状态。 某些视觉风格使用 强调色 来表示选中状态: 其中一些将其用于圆的背景, 其他则用于前景。

在这两种情况下,accent-color 属性会为受影响的控件部分设置样式。 对于不使用 强调色 的单选按钮视觉风格,accent-color 将不起作用。

以下是符合蓝色 accent-color 渲染的单选按钮示例:

平台 示例 说明
Firefox 79 / Win 未选中: 白色填充黑色描边的圆。 已选中: 白色填充黑色描边的圆,内有一个填充的黑色圆。 没有使用 强调色
Chrome 81 / Win 未选中: 浅灰色阴影的圆形气泡。 已选中: 浅灰色阴影的圆形气泡,上面覆盖一个深灰色圆。 没有使用 强调色
Safari / Snow Leopard 未选中: 无色 3D 外观的透明气泡。 已选中: 浅蓝色 3D 外观的透明气泡,上面覆盖一个小黑点。 使用强调色生成选中状态的“背景”渐变。
Safari 13 / Mac / Light 未选中: 浅灰色内阴影的圆。 已选中: 亮蓝色填充圆,上面覆盖一个有阴影的白点。 强调色作为选中状态的“前景”。
Safari 13 / Mac / Dark 未选中: 深灰色圆,阴影呈现出凸起效果。 已选中: 亮蓝色填充圆,上面覆盖一个白点,阴影呈现出凸起效果。 强调色作为选中状态的“前景”。
Chrome 83 / Win / Light 未选中: 深灰色空心圆。 已选中: 亮蓝色描边圆,上面覆盖同心亮蓝色填充圆。 强调色作为选中状态的“前景”。
Chrome 83 / Win / Dark 未选中: 浅灰色填充的深灰色圆。 已选中: 浅蓝色描边圆,上面覆盖同心浅蓝色填充圆。 强调色作为选中状态的“前景”,根据深色模式背景进行了对比度调整。

7.2. 切换外观:appearance 属性

名称: appearance
值: none | auto | textfield | menulist-button | <compat-auto>
初始值: none
应用于: 所有元素
是否继承:
百分比: 不适用
计算值: 指定的关键字
规范顺序: 依照语法规则
动画类型: 离散

虽然文档中大多数元素的外观可以完全由 CSS 控制,小部件 通常由 UA 使用宿主操作系统的原生 UI 控件进行渲染, 这些控件既不能复制也不能通过 CSS 样式化。

在本规范中,术语 小部件 指代可以具有 原生外观 的元素, 这意味着它们的渲染方式类似于宿主操作系统或平台的原生小部件或控件, 或者具有无法通过 CSS 表达的外观和感觉。 宿主语言(例如 HTML [HTML])负责定义哪些元素可以具有 原生外观

本规范引入了 appearance 属性 来对这种行为提供一定的控制。 特别是,使用 appearance: none 允许作者抑制 原生外观, 以便使用 CSS 来重新设计 小部件

关于此功能历史的注解

这个属性在大多数浏览器中曾以带前缀的形式存在。 在标准化之前,除了 none, 可能的值是一个非常长的列表,列出了元素可能的外观; 每个值都负责为表单控件赋予其特定的外观和感觉。 这些值在不同的浏览器之间是不同的。

CSS 工作组得出结论,这样的标准化是不切实际的, 部分原因是许多值适用于伪元素,而其他浏览器没有这些伪元素, 因为它们构建表单元素的方式不同, 而且这些伪元素不应该被标准化, 因为使表单控件在不同平台上看起来有显著不同的能力应该被保留。

此外,将任何任意元素(包括任何表单控件)变成任意(其他)表单控件的能力 被认为是一个错误特性。

相反,正在指定的设计 基于仅有一个“auto”值,使表单控件看起来像它们需要的样子, 以及一个“none”值来抑制 原生外观

然而,有证据表明,仅此设计与 Web 兼容性不符, 部分原因是用于如下情况:

input { appearance: none; }
input[type=checkbox] { appearance: checkbox; }

这里指定的设计是在两者之间的折中方案, 保持 none | auto 模型的简单性 同时通过一些额外的关键字来保持与现有内容的兼容性。

为了更好地处理与现有内容的兼容性, 可能需要在未来版本的规范中优化关键字的确切列表及其行为。 CSS-WG 欢迎相关反馈。

none
元素将按照 CSS 的常规规则进行渲染。替换元素(除了小部件)不受此影响并保持其替换元素的特性。小部件不会有其原生外观。参见 "§ 7.2.1 外观对元素装饰性方面的影响" 和 "§ 7.2.2 外观对元素语义方面的影响" 以了解详情。
auto
小部件可以有其原生外观。对于其他非小部件的元素,必须按照指定“none”的效果渲染。
textfield
对于类型为搜索状态的 input 元素,该元素将被渲染为一个常规文本输入小部件,类似于类型为文本状态的 input 元素。对于其他元素,此值与“auto”有相同的效果。
menulist-button
对于 select 元素,元素将被渲染为一个下拉框,包括一个下拉按钮。此类元素的 color、background-color 和 border 等 CSS 属性不应被忽略。
<compat-auto>
这些值用于兼容早期的非标准版本的属性。它们的效果与 "auto" 相同。
             <compat-auto> = searchfield | textarea | push-button | slider-horizontal | checkbox | radio | square-button | menulist | listbox | meter | progress-bar | button
           

当“auto”得到广泛支持时,建议优先使用它。

slider-verticalsliderthumb-vertical 在某些用户代理中被支持,用于更改 <input type=range> 元素的方向。 这些值未被规范化,因为更改该控件的方向最好使用单独的机制。 请参阅问题 whatwg/html#4177
想要自定义HTML复选框外观的作者可以使用如下代码:
input[type=checkbox] {
  all: unset; /* 此速记包括将外观重置为none */ 
  width: 1em; 
  height: 1em; 
  display: inline-block; 
  background: red; 
} 
input[type=checkbox]:checked { 
  border-radius: 50%; 
  background: green; 
} 
input[type=checkbox]:focus-visible { 
  outline: auto; 
} 

<input type="checkbox"> 将呈现为 , 而 <input type="checkbox" checked> 将呈现为 , 并通过激活(例如点击)该元素正常切换状态。

在计算值为 小部件 的控件中,auto文本框菜单列表按钮, 或 <compat-auto> 值之一, 用户代理可能会忽略一些CSS属性, 以确保所需外观得以保留, 或因为这些属性对于选择的外观可能没有意义。 但是,以下属性不得忽略:

是否应该在此列表中添加更多属性? 是否应移除某些属性? 应该列出可以忽略的属性,还是应该列出不能忽略的属性? 无论如何,用户代理在渲染 小部件 时会忽略某些属性, 因此本规范需要对此做出说明。

为了兼容旧内容,用户代理还必须支持 -webkit-appearance 作为 旧名称别名 appearance 的别名。

7.2.1. appearance 对元素装饰性方面的影响

当使用 appearance 更改外观时, 所有不是由CSS样式规则引起的小部件的装饰性视觉方面 必须被抑制, 即使UA内部表示此元素是由多个元素或伪元素组合在一起的。

例如,[HTML] select 元素通常在右侧呈现一个箭头,表示如果点击该元素,列表将展开。 如果 appearance 的计算值为 none, 那么这个箭头必须消失。

UA应在其用户代理样式表中包含样式规则, 使当appearancenone时, 小部件具有可识别的形状。

注意:因此,作者可能需要覆盖这些UA样式规则以获得他们想要的样式。

作者可能会发现使用 all: unset 来完全取消小部件的样式很方便, 然后他们可以按照自己的意愿进行样式化,而不会受到用户代理样式表的干扰。 然而,这也会抑制同一UA样式表提供的焦点指示器。 为了避免损害可访问性, 这样做的作者应恢复焦点指示器, 例如通过使用 :focus-visible { outline: auto; }

7.2.2. appearance 对元素语义方面的影响

UA必须保留小部件的语义方面, 这些语义方面对于以其原始语义操作小部件是必要的。 然而,只要仍然可以操作该小部件, UA可以赋予其不同的外观和感觉。 小部件的方面如果仅用于观察其所处的状态, 而不是操作它所必需的, 当可以使用普通CSS传达相同信息时, 也应该被抑制。 文档语言应为其定义的每个小部件指定需要保留的内容。

例如, 即使 appearancenone, 也会保留 <input type=range> 元素的滑块(或替换为等效机制), 因为否则无法通过鼠标或触摸屏更改范围值。

另一方面, <input type=checkbox checked> 中的复选标记必须被抑制, 因为它仅指示元素所处的状态, 而这些状态可以通过 :checked 选择器以不同的方式样式化。

元素的行为和语义仍然由文档语言定义, 不受此属性的影响。

例如,无论 appearance 的计算值如何:

相反,更改元素的外观不应导致它获得 其外观所代表的元素的语义、伪类、事件处理程序等。

例如,:enabled:disabled 都不会匹配 一个 div 元素,即使该元素样式为 appearance: button。 元素是否可以获得焦点的能力 也不会因为 appearance 属性而改变。

7.3. 控件特定规则

该部分的部分或全部内容可能应该在某个时候移至 [HTML] 规范中。

在某些元素上,设置某些属性会抑制 appearance: auto。 例如,即使 appearanceauto, 当为按钮设置 border 时, 它们会失去其原生外观。 这与 auto 的定义并不矛盾, 因为 appearance: auto 仅意味着 UA 可以 使用原生外观, 但为了更大的互操作性, 最好记录 哪些属性对哪些元素 产生这种效果。

记录UA样式表中需要包含的内容会很有帮助。

7.3.1. 单行文本输入控件

appearanceauto 时, 单行文本输入控件 如 [HTML] <input type=text> 必须呈现为:


附录 A. 致谢

此附录是信息性的。

本规范基于 [CSS-UI-3], 该规范主要由Tantek Çelik自1999年起至今编辑和撰写, 起初代表微软,后来作为受邀专家, 最近代表Mozilla。

感谢以下人员的反馈和贡献:Rossen AtanassovTab AtkinsL. David BaronBert BosMatthew BrealeyRick ByersAda ChanJames CraigMichael CooperAxel DahmenMichael DayMicah DubinkoElika E.Steve FalkenburgAndrew FedonioukAl GilmanIan HicksonBjoern HoehrmannAlan HoganDavid HyattRichard IshidaSho KuwamotoYves LafonStuart LangridgeSusan LeschPeter LinssKang-Hao LuMasayuki NakanoMats PalmgrenBrad PettitChris RebertFrançois RemyAndrey RybkaSimon SapinAlexander SavenkovSebastian SchnitzenbaumerLea VerouEtan WexlerDavid WoolleyFrank YanBoris Zbarsky, 以及 Domel

附录 B. 变更

此附录是信息性的。

2020年1月24日工作草案 的变更

除了若干编辑性调整外, 还进行了以下规范性变更:

2020年1月2日工作草案 的变更

除了若干编辑性调整外, 还进行了以下规范性变更:

2017年12月22日工作草案 的变更

除了若干编辑性调整外, 还进行了以下规范性变更:

2015年9月22日首次公开工作草案 的变更

除了若干编辑性调整外, 还进行了以下规范性变更:

附录 C. 安全和隐私考虑

此附录是信息性的。

W3C TAG 正在开发一个 自我评审问卷:安全和隐私,供规范编辑者参考回答。

根据 需考虑的问题

该规范是否涉及可识别个人身份的信息?
否。
该规范是否涉及高价值数据?
否。
该规范是否引入了可跨浏览会话持久化的来源状态?
否。
该规范是否向网页公开了持久的跨来源状态?
否。
该规范是否向不当前有权访问的来源暴露了任何其他数据?
否。
该规范是否启用了新的脚本执行/加载机制?
是,加载机制是启用的,但执行机制不是。

cursor 属性接受 <image> 值,可能包含要加载的URL。 这些URL可能是包含脚本的SVG文档, 但本规范要求不得运行脚本。

该规范是否允许来源访问用户的位置?
否。
该规范是否允许来源访问用户设备上的传感器?
是。

方向性焦点导航属性间接允许访问设备的键盘导航输入机制,如方向键。

该规范是否允许来源访问用户本地计算环境的某些方面?
否。
该规范是否允许来源访问其他设备?
否。
该规范是否允许来源对用户代理的原生UI进行某种控制?
是。

cursorcaret 属性及其 子属性 允许页面更改用户代理的光标和文本插入符的显示。 此外,outline-style 属性的 auto 值 (因此 outline 速记) 允许页面在任何元素周围显示本地聚焦元素的轮廓呈现。

appearance 属性还允许作者关闭本地样式并用基于css的样式替换它。

该规范是否向网页暴露了临时标识符?
否。
该规范是否区分第一方和第三方上下文中的行为?
否。
该规范在用户代理的“隐身”模式中应该如何工作?
无差异。
该规范是否将数据持久化到用户的本地设备?
否。
该规范是否有“安全考虑”和“隐私考虑”部分?
是。
该规范是否允许降级默认安全特性?
否。

附录 D. HTML的默认样式表添加

此附录是信息性的。

基础样式表的潜在添加,以表达HTML表单控件和一些动态呈现属性:

:enabled:focus {
  outline: 2px inset;
}

button,
input[type=button],
input[type=reset],
input[type=submit],
input[type=checkbox],
input[type=radio],
textarea,
input,
input[type=text],
input[type=password],
input[type=image] {
  display: inline-block;
}

input[type=button],
input[type=reset],
input[type=submit],
input[type=checkbox],
input[type=radio],
input,
input[type=text],
input[type=password],
input[type=image] {
  white-space: nowrap;
}

button {
  /* BUTTON标签的特别空白处理 */
  white-space:normal;
}

input[type=reset]:lang(en) {
  /* 根据语言设置的HTML输入type=reset按钮的默认内容 */
  content: "Reset";
}

input[type=submit]:lang(en) {
  /* 根据语言设置的HTML输入type=submit按钮的默认内容 */
  content: "Submit";
}

/* UA应该为其他语言使用语言特定的重置/提交规则。 */

input[type=button],
input[type=reset][value],
input[type=submit][value] {
  /* HTML "input" 按钮的文本内容/标签 */
  content: attr(value);
}

textarea {
  /* 特别是 TEXTAREA 标签的空白处理 */
  white-space:pre-wrap;
  resize: both;
}

input[type=hidden] {
  /* 特别是 HTML 隐藏文本字段的外观 */
  display: none !important;
}

input[type=image] {
  content: attr(src,url);
  border: none;
}

select[size] {
  /* HTML4/XHTML1 <select> w/ size 大于 1 - 列表外观 */
  display: inline-block;
  height: attr(size,em);
}

select,select[size=1] {
  /* HTML4/XHTML1 <select> 没有 size,或 size=1 - 弹出菜单 */
  display: inline-block;
  height: 1em;
  overflow: hidden;
}

select[size]:active {
  /* 激活 HTML <select> w/ size 大于 1 - 激活列表的外观 */
  display: inline-block;
}

optgroup, option {
  display: block;
  white-space: nowrap;
}

optgroup[label],option[label] {
  content: attr(label);
}

option[selected]::before {
  display: inline;
  content: check;
}

/* 虽然本规范没有直接解决FRAME的调整大小问题,
   但以下规则可能提供合理行为的近似值。 */

/*

frame { resize:both }
frame[noresize] { resize:none }

*/

合规性

文档约定

合规性要求通过描述性断言和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">与其他规范文本分开显示,如下所示:用户代理必须(MUST)提供可访问的替代方案。

合规类别

本规范的合规性 定义了三类合规性:

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

样式表符合本规范 的要求是指其使用本模块定义的语法的所有语句根据通用CSS语法和本模块中定义的每个功能的单独语法都是有效的。

渲染器符合本规范 是指除了按适当规范定义解释样式表外,还必须正确解析本规范定义的所有功能 并相应地渲染文档。然而,由于设备的限制,用户代理无法正确渲染文档并不使其不合规。(例如,用户代理不需要在单色显示器上渲染颜色。)

创作工具符合本规范 是指其编写的样式表根据通用CSS语法和本模块中每个功能的单独语法在语法上是正确的,并且符合本模块中描述的样式表的所有其他合规性要求。

部分实现

为了让作者能够利用前向兼容的解析规则指定回退值,CSS渲染器必须将任何其不支持的at规则、属性、属性值、关键字和其他语法结构视为无效(并适当地忽略)。特别是,用户代理不得在单个多值属性声明中选择性忽略不支持的组件值并接受支持的值:如果任何值被视为无效(因为不支持的值必须如此),CSS要求整个声明被忽略。

不稳定和专有功能的实现

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

非实验性实现

一旦规范达到候选推荐阶段, 就可以进行非实验性实现,实施者应发布根据规范正确实现的任何候选推荐级别功能的无前缀实现。

为了建立并维护CSS在各实现之间的互操作性, CSS工作组请求非实验性的CSS渲染器在发布任何CSS功能的无前缀实现之前, 向W3C提交一个实现报告(如果需要,还包括为该实现报告使用的测试用例)。 提交给W3C的测试用例需经过CSS工作组的审查和修正。

关于提交测试用例和实现报告的更多信息 可以在CSS工作组的网站上找到,网址为https://www.w3.org/Style/CSS/Test/。 有关问题应发送到public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的术语

通过引用定义的术语

参考文献

规范性引用

[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2020年12月22日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2020年4月21日. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2021年1月19日. WD. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-3]
Tantek Çelik; Chris Lilley; David Baron. CSS Color Module Level 3. 2018年6月19日. REC. URL: https://www.w3.org/TR/css-color-3/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley. CSS Color Module Level 4. 2020年11月12日. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2020年12月18日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 3. 2020年12月17日. CR. URL: https://www.w3.org/TR/css-images-3/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2020年6月3日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal. CSS Overflow Module Level 4. 2017年6月13日. WD. URL: https://www.w3.org/TR/css-overflow-4/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin. CSS Paged Media Module Level 3. 2018年10月18日. WD. URL: https://www.w3.org/TR/css-page-3/
[CSS-POSITION-3]
Elika Etemad; et al. CSS Positioned Layout Module Level 3. 2020年5月19日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2020年12月31日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2020年12月18日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TRANSFORMS-1]
Simon Fraser; et al. CSS Transforms Module Level 1. 2019年2月14日. CR. URL: https://www.w3.org/TR/css-transforms-1/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS Basic User Interface Module Level 3 (CSS3 UI). 2018年6月21日. REC. URL: https://www.w3.org/TR/css-ui-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2019年6月6日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2020年11月11日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[PNG]
Tom Lane. Portable Network Graphics (PNG) Specification (Second Edition). 2003年11月10日. REC. URL: https://www.w3.org/TR/PNG/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. 最佳当前实践. URL: https://tools.ietf.org/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2018年11月21日. WD. URL: https://www.w3.org/TR/selectors-4/
[SVG11]
Erik Dahlström; et al. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 2011年8月16日. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018年10月4日. CR. URL: https://www.w3.org/TR/SVG2/
[UAX29]
Mark Davis; Christopher Chapman. Unicode Text Segmentation. 2020年2月19日. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-37.html

参考性引用

[CSS1]
Håkon Wium Lie; Bert Bos. Cascading Style Sheets, level 1. 2018年9月13日. REC. URL: https://www.w3.org/TR/CSS1/
[CSS4-IMAGES]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Image Values and Replaced Content Module Level 4. 2017年4月13日. WD. URL: https://www.w3.org/TR/css-images-4/
[HTML5]
Ian Hickson; et al. HTML5. 2018年3月27日. REC. URL: https://www.w3.org/TR/html5/
[SELECT]
Tantek Çelik; et al. Selectors Level 3. 2018年11月6日. REC. URL: https://www.w3.org/TR/selectors-3/

属性索引

名称 初始值 应用于 继承性 百分比 动画类型 规范顺序 计算值
accent-color auto | <color> auto 所有元素 N/A 按计算值类型 依据语法 关键字 auto 或计算后的颜色
appearance none | auto | textfield | menulist-button | <compat-auto> none 所有元素 N/A 离散 依据语法 指定的关键字
caret <'caret-color'> || <'caret-shape'> auto 接受输入的元素 N/A 参见各自属性 依据语法 参见各自属性
caret-color auto | <color> auto 所有元素 N/A 按计算值 依据语法 auto 的计算值为 auto。 对于 <color> 值,请参阅 [CSS-COLOR-4] 中 [[!CSS-COLOR-4#resolving-color-values]]。
caret-shape auto | bar | block | underscore auto 接受输入的元素 N/A 按计算值 依据语法 指定的关键字
cursor [ [<url> [<x> <y>]?,]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | grab | grabbing | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out ] auto 所有元素 N/A 离散 依据语法 按指定值,除非相对 URL 转换为绝对 URL
nav-down auto | <id> [ current | root | <target-name> ]? auto 所有已启用的元素 N/A 离散 依据语法 按指定值
nav-left auto | <id> [ current | root | <target-name> ]? auto 所有已启用的元素 N/A 离散 依据语法 按指定值
nav-right auto | <id> [ current | root | <target-name> ]? auto 所有已启用的元素 N/A 离散 依据语法 按指定值
nav-up auto | <id> [ current | root | <target-name> ]? auto 所有已启用的元素 N/A 离散 依据语法 按指定值
outline [ <'outline-color'> || <'outline-style'> || <'outline-width'> ] 参见各自属性 所有元素 N/A 参见各自属性 依据语法 参见各自属性
outline-color <color> | invert invert 所有元素 N/A 按计算值 依据语法 invert 的计算值为 invert。对于 <color> 值,请参阅 [CSS-COLOR-4] 中 [[!CSS-COLOR-4#resolving-color-values]]。
outline-offset <length> 0 所有元素 N/A 按计算值 依据语法 绝对长度
outline-style auto | <outline-line-style> none 所有元素 N/A 按计算值 依据语法 指定的关键字
outline-width <line-width> medium 所有元素 N/A 按计算值 依据语法 绝对长度;如果轮廓样式为 none,则为 0。
resize none | both | horizontal | vertical | block | inline none 溢出不为 visible 的元素, 以及可选的替换元素如图片、视频和 iframes N/A 离散 依据语法 指定的关键字
user-select auto | text | none | contain | all auto 所有元素,及可选的 ::before 和 ::after 伪元素 N/A 离散 依据语法 指定的关键字

问题索引

如果我们允许 user-select 更改为除 none 以外的值, 我们需要弄清楚这对可复制性和 DOM API 意味着什么。
它是否也应该应用于 ::marker? 应用于 页面边距框 吗? auto使用值 是否也应为 none, 还是 text 更合适?
应该对可编辑宿主的可编辑子元素的使用值施加限制吗? 语义并不明显。 也许 none 应映射到 text, 或者也许所有值都应该映射到 text
上述列表不完整,至少需要包括 各种按钮类的 input 变体。
auto 被广泛支持时, 建议改为使用它。
如果此列表中的任何值对网络兼容性没有必要, 它们应从列表中删除; 相反,任何对兼容性必要但未包含在此列表中的值应添加进去。
出于兼容性原因, 这些值中的一些可能需要升级为适用于任意元素的完整值, 或者其中一些值可能需要对某些 小部件 产生一些副作用。
slider-verticalsliderthumb-vertical 在某些用户代理中受支持,用于更改 <input type=range> 元素的方向。 这些值未指定,因为更改此控件方向 更好通过单独的机制完成。 请参阅问题 whatwg/html#4177
是否还有更多属性应包含在此列表中? 我们是否应删除一些? 我们应列出可以忽略的属性, 而不是列出那些不能忽略的属性吗? 无论如何,当呈现 小部件 时,用户代理确实忽略了一些属性, 因此此规范需要对此进行说明。
也许本节中的部分或全部内容 应该在某个时候移至 [HTML] 规范。
在某些元素上,设置某些属性会抑制 appearance: auto。 例如,即使 appearanceauto, 当设置了 边框 时,按钮会失去其原生外观。 这并不与 auto 的定义相矛盾, 因为 appearance: auto 仅意味着 用户代理 可以 使用原生外观, 但为了更好的互操作性, 记录哪些属性对哪些元素有这种效果会更好。
记录用户代理需要在其用户代理样式表中包含的内容会很好。