1. 简介
CSS 1 定义了基于HTML传统上允许在有序和无序列表上使用的一些有用的计数器样式。 虽然在CSS2.1中稍微扩展了一些, 但它并没有解决全球排版的需求。
本模块引入了@counter-style规则,它允许CSS以开放的方式解决这一问题, 通过允许作者定义自己的计数器样式。 这些样式可以在list-style-type属性中使用, 或在counter()和counters() 函数中使用。 它还定义了一些额外的预定义计数器样式, 尤其是那些常见但用@counter-style难以表示的复杂样式。
2. 计数器样式
计数器样式定义了如何将计数器值转换为字符串。 计数器样式包括:
- 一个名称, 用于标识样式
- 一个算法, 将整数计数器值转换为基本字符串表示
- 一个负号, 在负计数器值的表示前或后添加。
- 一个前缀, 在表示前添加
- 一个后缀 在表示后添加
- 一个范围, 限制计数器样式处理的值
- 一个口语形式, 描述如何在语音合成器中读取计数器样式
- 以及一个回退样式, 当计数器值超出计数器样式范围时,或者计数器样式无法呈现计数器值时,用于呈现表示
当请求使用特定的计数器样式为特定的计数器值生成计数器表示时, 请按以下步骤操作:
- 如果计数器样式未知, 退出此算法,改为使用生成计数器表示并使用decimal样式和相同的计数器值。
- 如果计数器值超出了计数器样式的范围, 退出此算法,改为使用计数器样式的回退样式为相同的计数器值生成计数器表示。
- 使用计数器值和计数器样式的计数算法, 生成计数器值的初始表示。 如果计数器值为负 且计数器样式使用负号, 则改为使用计数器值的绝对值生成初始表示。
- 按照pad描述符的要求,将符号添加到表示中。
- 如果计数器值为负, 且计数器样式使用负号, 按照计数器样式的negative描述符的要求将表示包裹在负号中。
- 返回表示。
注意:前缀和后缀不在此算法中发挥作用。 这是有意为之; 前缀和后缀不是counter()或counters()函数返回的字符串的一部分。 相反,前缀和后缀是通过构造content属性的算法添加的, 用于::marker伪元素。 这也意味着即使实际表示是由回退样式构造的,前缀和后缀仍然来自指定的计数器样式。
某些system值(如symbolic,additive) 和某些描述符(如pad) 可以生成大小与作者提供的数字成线性关系的表示。 这可能会被滥用来生成过大的表示, 消耗用户的不必要内存,甚至导致浏览器卡死。 用户代理必须支持至少60个Unicode代码点长的表示, 但它们可以选择在表示超过60个代码点长时使用回退样式。
3. 定义自定义计数器样式: @counter-style 规则
@counter-style规则允许作者定义自定义计数器样式。 计数器样式的组成由@counter-style规则中的描述符指定。 算法由system、symbols和additive-symbols属性隐式指定。
@counter-style规则的一般形式为:
@counter-style <counter-style-name> { <declaration-list> }
<counter-style-name> 是一个<custom-ident>,它不是与ASCII不区分大小写匹配的none。 <counter-style-name> 是树范围名称。
关键字decimal、disc、square、circle、disclosure-open和disclosure-closed是有效的<counter-style-name>, 但在这里用作计数器样式名称时无效; 这样做会使规则无效。 (它们可以在其他上下文中使用,例如在extend系统中。)
注意:请注意<custom-ident>还自动排除了CSS全局关键词。 此外,一些名称,例如inside, 作为计数器样式名称是有效的, 但与像list-style这样的属性的现有值冲突, 因此在该上下文中不可用。
计数器样式名称区分大小写。 但是,本规范中定义的名称在解析时始终转换为ASCII小写, 无论它们用作计数器样式的任何地方,例如在list-style属性集、 在@counter-style规则中, 以及在counter()函数中。
每个@counter-style规则为每个计数器样式描述符指定了一个值, 无论是隐式还是显式。 本规则中未显式给出的那些值将使用本规范中列出的初始值。 这些描述符仅在定义它们的@counter-style规则的上下文中适用, 不适用于文档语言元素。 没有描述符适用于哪些元素或这些值是否由子元素继承的概念。 当在给定的@counter-style规则中多次出现给定描述符时, 只使用最后指定的有效值; 所有先前的该描述符的值必须被忽略。
定义一个@counter-style规则会使其在包含它的整个文档中可用。 如果定义了多个具有相同名称的@counter-style规则, 只有一个会生效, 根据标准级联规则。@counter-style规则"原子"级联: 如果一个规则取代了另一个同名规则, 它会完全取代, 而不仅仅是取代它所指定的特定描述符。
注意:请注意,即使是预定义的计数器样式也可以被覆盖; 用户代理样式表出现在任何其他样式表之前, 因此预定义的样式总是在级联中失效。
该规则符合CSS的前向兼容解析要求; 不理解这些规则的合格解析器将忽略它们,而不会出错。 任何未被识别或实现的描述符, 或其值与此处或本规范未来版本中给出的语法不匹配的描述符, 必须完全被忽略; 它们不会使@counter-style规则无效。
3.1. 计数器算法: system 描述符
名称: | system |
---|---|
适用对象: | @counter-style |
取值: | cyclic | numeric | alphabetic | symbolic | additive | [fixed <integer>?] | [ extends <counter-style-name> ] |
初始值: | symbolic |
system描述符指定将使用哪种算法基于计数器值构建计数器的表示。例如,cyclic 计数器样式只是重复其符号, 而numeric计数器样式将其符号解释为数字, 并相应地构建其表示。 系统的定义在以下小节中。
每个system值与symbols或additive-symbols描述符相关联, 并且具有相应描述符必须具有的最小长度; 下面的每个条目定义了这些要求。 如果@counter-style规则未满足此要求, 它不定义计数器样式。 (该规则在语法上仍然有效,但无效。)
3.1.1. 循环符号: cyclic 系统
cyclic计数器系统通过其提供的符号循环, 当它达到列表末尾时回到开头。 它可以用于简单的项目符号 (只需提供一个计数器符号), 或用于循环多个符号。 第一个计数器符号用于值1的表示, 第二个计数器符号(如果存在)用于值2的表示,依此类推。
如果系统是cyclic, 则symbols描述符必须至少包含一个计数器符号。 该系统定义适用于所有计数器值。
@counter-style triangle { system: cyclic; symbols: ‣; suffix: " "; }
它将生成如下的列表:
‣ One ‣ Two ‣ Three
如果有N计数器符号并且正在为整数value构建表示, 则表示为列表中索引( (value-1) mod N) 的计数器符号(从0开始索引)。
3.1.2. 耗尽符号: fixed 系统
fixed计数器系统一次性运行其计数器符号列表, 然后回退。 它对于表示只有有限数量表示的计数器样式非常有用。 例如,Unicode定义了一些用于列表的有限长度特殊字符系列, 例如带圈数字。
如果系统是fixed, 则symbols描述符必须包含至少一个计数器符号。 该系统仅在有限范围内定义计数器值, 从第一个符号值开始,长度等于 计数器符号列表的长度。
当指定该系统时, 可以选择在其后提供一个整数, 该整数设置第一个符号值。 如果省略,则第一个符号值为1。
@counter-style box-corner { system: fixed; symbols: ◰ ◳ ◲ ◱; suffix: ': '; }
它将生成如下的列表:
◰: One ◳: Two ◲: Three ◱: Four 5: Five 6: Six
第一个计数器符号是 第一个符号值的表示, 随后的计数器值由后续的计数器符号表示。 一旦计数器符号列表被耗尽, 该计数器样式将无法再表示进一步的值, 必须改用回退计数器样式进行表示。
3.1.3. 重复符号: symbolic 系统
symbolic计数器系统通过其提供的符号重复循环, 每次通过列表时符号加倍、三倍等。 例如,如果原始符号是"*"和"†", 那么第二次通过时它们将变为"**"和"††", 第三次通过时将变为"***"和"†††"等。 它可以用于脚注样式的标记, 有时也用于字母样式列表,呈现略有不同于alphabetic系统的效果。
如果系统是symbolic, 则symbols描述符必须至少包含一个计数器符号。 该系统仅在严格正的计数器值范围内定义。
@counter-style footnote { system: symbolic; symbols: '*' ⁑ † ‡; suffix: " "; }
它将生成如下的列表:
* One ⁑ Two † Three ‡ Four ** Five ⁑⁑ Six
@counter-style upper-alpha-legal { system: symbolic; symbols: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; }
这种样式在前27个值与upper-alpha是相同的, 但在此之后开始不同,upper-alpha变为"AB"、"AC"、"AD"等。 从第53个值开始,upper-alpha变为"BA"、"BB"、"BC"等, 而这种样式跳入三位数,变为"AAA"、"BBB"、"CCC"等。
要构建表示,执行以下算法:
设N为计数器符号列表的长度,value初始为计数器值, S初始为空字符串, symbol(n)为第n个计数器符号(从0开始索引)在 计数器符号列表中的符号。
- 选择chosen symbol为
symbol( (value - 1) mod N)
。 - 设表示长度为
ceil( value / N )
。 - 将chosen symbol追加到S,追加次数等于表示长度。
最后,返回S。
3.1.4. 双射数字系统: alphabetic 系统
alphabetic计数器系统将计数器符号列表解释为数字, 形成字母表编号系统, 类似于默认的lower-alpha计数器样式, 其从"a"、"b"、"c"到"aa"、"ab"、"ac"。 字母表编号系统不包含表示0的数字; 因此,当添加新数字时,首个值仅由首个数字组成。 字母表编号系统通常用于列表, 也出现在许多电子表格程序中用于编号列。 列表中的第一个计数器符号解释为数字1, 第二个解释为数字2,依此类推。
如果系统是alphabetic, 则symbols描述符必须至少包含两个计数器符号。 该系统仅在严格正的计数器值范围内定义。
@counter-style go { system: alphabetic; symbols: url(white.svg) url(black.svg); suffix: " "; }
它将生成如下的列表:
注意:此示例需要支持SVG图像才能正确显示。
如果有N计数器符号, 则表示为以计数器符号为数字的基N字母数字。 要构建表示,请运行以下算法:
设N为计数器符号列表的长度,value初始为计数器值, S初始为空字符串, symbol(n)为第n个计数器符号在 计数器符号列表中的符号。
当value不等于0时:
- 将value设为
value - 1
。 - 将symbol( value mod N )前置到S。
- 将value设为
floor( value / N )
。
最后,返回S。
3.1.5. 位值数字系统: numeric 系统
numeric计数器系统将计数器符号列表解释为“位值”编号系统, 类似于默认的decimal计数器样式。 列表中的第一个计数器符号解释为数字0, 第二个解释为数字1, 依此类推。
如果系统是numeric, 则symbols描述符必须至少包含两个计数器符号。 该系统定义在所有计数器值范围内。
@counter-style trinary { system: numeric; symbols: '0' '1' '2'; }
它将生成如下的列表:
1. One 2. Two 10. Three 11. Four 12. Five 20. Six
如果有N计数器符号, 则表示为以计数器符号为数字的基N数字。 要构建表示,请运行以下算法:
设N为计数器符号列表的长度,value初始为计数器值, S初始为空字符串, symbol(n)为第n个计数器符号在 计数器符号列表中的符号(从0开始索引)。
- 如果value为0,追加
symbol(0)
到S并返回S。 - 当value不等于0时:
- 将symbol( value mod N )前置到S。
- 将value设为
floor( value / N )
。
- 返回S。
3.1.6. 累加数字系统: additive 系统
additive计数器系统用于表示“符号值”编号系统, 而不是通过改变其位置来重复使用数字以更改其值, 而是定义具有更大值的额外数字, 这样可以通过将所有数字加在一起来获得该数字的值。 这种系统用于罗马数字 和世界各地的其他编号系统。
如果系统是additive, 则additive-symbols描述符必须包含至少一个累加元组。 该系统名义上定义了所有计数器值的表示 (参见下文中的算法了解具体细节)。
@counter-style dice { system: additive; additive-symbols: 6 ⚅, 5 ⚄, 4 ⚃, 3 ⚂, 2 ⚁, 1 ⚀; suffix: " "; }
它将生成如下的列表:
⚀ One ⚁ Two ⚂ Three ... ⚅⚄ Eleven ⚅⚅ Twelve ⚅⚅⚀ Thirteen
注意:本规范中的所有预定义累加@counter-style规则 都能为其范围内的每个值生成表示, 但可以生成一些additive-symbols值,它们在上述算法中无法找到表示, 即使理论上可以找到表示。 例如,如果定义了一个@counter-style, 使用additive-symbols: 3 "a", 2 "b";, 上述算法将无法为计数器值4找到表示, 尽管理论上可以用“bb”表示。 虽然这令人遗憾,但这是为了保持算法在相对于计数器值大小的线性时间内运行所必需的。
3.1.7. 构建自现有计数器样式: extends 系统
extends系统允许作者使用另一个计数器样式的算法, 但可以改变其他方面, 例如负号或后缀。 如果计数器样式使用extends系统, 任何未指定的描述符必须从指定的扩展计数器样式中获取, 而不是采用其初始值。
如果@counter-style使用了extends系统, 则不能包含symbols或additive-symbols描述符, 否则@counter-style规则将无效。
如果指定的<counter-style-name> 是ASCII 不区分大小写的匹配, 例如disc、circle、square、disclosure-open,或disclosure-closed(任何预定义的符号计数器样式), 使用extend扩展自“标准”定义的规则, 提供规范样式表中的内容 (而不是允许它们以不同的用户代理特定方式绘制的例外情况)。
如果指定的计数器样式名称不是任何已定义的计数器样式名称, 则必须将其视为扩展decimal计数器样式。 如果一个或多个@counter-style规则的extends值形成循环, 则所有参与循环的计数器样式 必须被视为扩展了decimal计数器样式。
1) first item 2) second item 3) third item
与其编写一个全新的计数器样式, 这可以通过扩展decimal来实现:
@counter-style decimal-paren { system: extends decimal; suffix: ") "; }
3.2. 格式化负值: negative 描述符
名称: | negative |
---|---|
用于: | @counter-style |
值: | <symbol> <symbol>? |
初始值: | "\2D" ("-" hyphen-minus) |
negative描述符定义当计数器值为负时如何改变表示形式。
值中的第一个<symbol>会在计数器值为负时添加在表示的前面。第二个<symbol>,如果指定的话,会在计数器值为负时附加在表示的后面。
并非所有system值都使用负号。 特别是,如果计数器样式的system值为symbolic、alphabetic、numeric、additive,或者扩展的计数器样式也 extends使用负号, 则计数器样式会使用负号。如果计数器样式不使用负号, 在生成计数器表示时会忽略负号。
3.3. 符号在标记前: prefix 描述符
名称: | prefix |
---|---|
用于: | @counter-style |
值: | <symbol> |
初始值: | "" (空字符串) |
prefix描述符指定一个<symbol>, 该符号将被添加到标记表示的前面。 前缀位于任何负号之前。
注意: 前缀仅由用于构造 ::marker伪元素默认内容的算法添加; 当使用counter()或 counters()函数时,前缀不会被自动添加。
3.4. 符号在标记后: suffix 描述符
名称: | suffix |
---|---|
用于: | @counter-style |
值: | <symbol> |
初始值: | "\2E\20" ("." 句号加空格) |
后缀 描述符指定一个 <符号>,它会附加到标记表示之后。 后缀会在负号之后添加到表示中。
注意: 后缀只会通过构造默认 ::marker 伪元素内容的算法添加;当使用 counter() 或 counters() 函数时,后缀不会自动添加。
3.5. 限制计数器范围: range 描述符
名称: | range |
---|---|
用于: | @counter-style |
值: | [ [ <integer> | infinite ]{2} ]# | auto |
初始值: | auto |
range描述符定义了计数器样式定义的范围。 如果计数器样式用于表示超出其范围的计数器值, 则计数器样式将退回到其后备计数器样式。
- auto
-
范围取决于计数器系统:
- 对于cyclic、numeric和fixed系统, 范围是从负无穷到正无穷。
- 对于alphabetic和symbolic系统, 范围是1到正无穷。
- 对于additive系统, 范围是0到正无穷。
- 对于extends系统, 范围取决于扩展系统产生的auto范围; 如果扩展的是复杂预定义样式(§ 7 复杂预定义计数器样式), 则范围是样式的定义范围。
- [ [ <integer> | infinite ]{2} ]#
-
这定义了一个逗号分隔的范围列表。
对于每个单独的范围,
第一个值是下限
第二个值是上限。
该范围是包含型的 - 它包含上下限值。
如果infinite用作范围中的第一个值,
则表示负无穷;
如果用作第二个值,
则表示正无穷。
计数器样式的范围是列表中定义的所有范围的并集。
如果任何范围的下限高于上限, 整个描述符无效,必须被忽略。
实现必须支持下限至少为-215且上限至少为215-1的范围 (有符号2字节整数的范围)。 它们可以支持更高的范围。 如果任何指定的边界超出了实现支持的范围, 必须将其视为实现支持的最接近的边界。
3.6. 零填充和固定宽度表示: pad 描述符
名称: | pad |
---|---|
用于: | @counter-style |
值: | <integer [0,∞]> && <symbol> |
初始值: | 0 "" |
pad 描述符允许作者指定“固定宽度”计数器样式, 其中表示的长度如果比 pad 值短,则用特定的 <symbol>进行填充。 超过指定 pad 值的表示将按正常方式构造。
- <integer [0,∞]> && <symbol>
-
<integer> 指定所有计数器表示必须达到的最小长度。
令 difference 为提供的 <integer> 减去 字素集群 的数量 在 计数器值的初始表示中。(注意,根据 生成计数器表示 的算法, 这发生在添加前缀/后缀/负号之前。) 如果计数器值为负数并且计数器样式使用负号, 则进一步减少 difference 的数量,由计数器样式的 negative 描述符的 <symbol> 进行补充。
如果 difference 大于零, 则在表示前面加上 difference 份指定的 <symbol>。
不允许负值的 <integer>。
例如, 1 将表示为 "001", 20 将表示为 "020", 300 将表示为 "300", 4000 将表示为 "4000", 而 -5 将表示为 "-05"。
注意: pad 描述符计算表示中的 字素集群 的数量, 但用 <symbol> 进行填充。 如果指定的 pad <symbol> 是多字符的, 这可能不会产生预期的效果。 遗憾的是,没有办法使用 字素集群 的数量在 pad <symbol>中, 而不违反有用的约束。 建议作者仅在 <symbol> 中指定单个 字素集群 在 pad 描述符中。
3.7. 定义回退: fallback 描述符
名称: | fallback |
---|---|
用于: | @counter-style |
值: | <counter-style-name> |
初始值: | decimal |
fallback 描述符指定了一个备用计数器样式, 当当前计数器样式无法为给定的计数器值创建表示时使用。 例如,如果定义的计数器样式范围为1-10, 但请求表示计数器值为11, 则该计数器值的表示会使用备用计数器样式构建(如果备用样式也无法表示该值, 则可能继续使用下一个备用样式,依此类推)。
如果 fallback 描述符的值不是任何已定义计数器样式的名称, 则 fallback 描述符的使用值将变为 decimal。 同样,当查找可以呈现给定计数器值的计数器样式时,如果检测到指定的回退存在循环, 必须改用 decimal 样式。
注意,指定回退循环不一定是错误的。 例如,如果作者希望使用在偶数和奇数计数器值之间有显著不同表示的计数器样式, 他们可能会发现定义一个只能表示奇数值的样式和一个只能表示偶数值的样式是最简单的, 并且将每一个指定为对方的回退样式。 尽管回退图是循环的,但在执行这些回退时不会遇到循环——每个计数器值都可以由其中一个计数器样式表示。
3.8. 标记字符: symbols 和 additive-symbols 描述符
名称: | symbols |
---|---|
用于: | @counter-style |
值: | <symbol>+ |
初始值: | n/a |
名称: | additive-symbols |
---|---|
用于: | @counter-style |
值: | [ <integer [0,∞]> && <symbol> ]# |
初始值: | n/a |
<symbol> = <string> | <image> | <custom-ident>
符号 和 加法符号 描述符指定由 系统 描述符指定的标记构造算法所使用的符号。 当计数系统为 循环、数字、字母、符号 或 固定 时,@counter-style 规则必须有一个有效的 符号 描述符, 当计数系统为 加法 时,必须有一个有效的 加法符号 描述符; 否则,该 @counter-style 不定义 计数样式(但仍然是有效的 at-rule)。
某些计数器系统指定 symbols 描述符必须至少包含两个条目。 如果计数器样式的系统如此, 且 symbols 描述符 仅有一个条目, 则 @counter-style 规则不定义 计数器样式。
symbols 描述符值中的每个条目定义了一个 计数器符号, 根据计数器样式的系统不同,该符号的解释方式也有所不同。 additive-symbols 描述符值中的每个条目定义了 一个 累加元组, 该元组包含一个 计数器符号 和一个整数权重。 每个权重必须是非负整数, 并且 累加元组 必须按权重严格递减的顺序指定; 否则,该声明无效并且必须被忽略。
计数器符号 可以是 字符串、图像或标识符, 并且这三种类型可以在单个描述符中混合使用。 计数器表示通过将计数器符号连接在一起构建。 标识符作为包含相同字符的字符串呈现。 图像以内联替换元素的形式呈现。 图像 计数器符号 的 默认对象大小 为 1em x 1em 的正方形。
注意: <image> 语法在 <symbol> 中目前处于风险中。 目前没有实现计划, 并且它使 counter() 的某些用法复杂化, 这些问题尚未得到完全解决。
注意: 如果使用标识符而不是字符串来定义符号, 请注意标识符的语法。 特别是,像 "*" 这样的 ascii 非字母不是标识符, 因此必须在字符串中加引号。 十六进制转义符 在本规范中定义的多个计数器样式中使用, "吞并" 后续的空格 (允许十六进制转义符后紧跟一个数字而不会产生歧义), 因此必须在十六进制转义符后放置两个空格 以将其与后续的转义符分隔开, 否则它们将被视为相邻, 并且属于同一个标识符。 例如,symbols: \660 \661; 仅定义了一个符号, 由 U+0660 和 U+0661 字符组成, 而不是预期的两个; 要么将转义符放入字符串中, 如 symbols: "\660" "\661", 要么在转义符之间放两个空格。
3.9. 语音合成: speak-as 描述符
名称: | speak-as |
---|---|
用于: | @counter-style |
值: | auto | bullets | numbers | words | spell-out | <counter-style-name> |
初始值: | auto |
有时可以通过视觉轻松理解计数器样式,但通过语音合成器或其他非视觉方式难以准确表示,或者在简单朗读时毫无意义。 speak-as 描述符定义了如何合成带有特定计数器样式的计数器的语音形式。 辅助技术应使用此语音形式来读取计数器样式,并且可以使用 speak-as 的值 指导向其他输出形式(如文本)的转换。 其值的含义如下:
- auto
- 如果计数器样式的 system 是 alphabetic, 则此值的效果与 spell-out 相同。 如果 system 是 cyclic, 此值的效果与 bullets 相同。 如果 system 是 extends, 此值的效果与所扩展样式的 auto 的效果相同。 否则,此值的效果与 numbers 相同。
- bullets
- UA 会发出由 UA 定义的短语或音频提示,代表读取无序列表项。
- numbers
- 计数器的数值将以 内容语言 读作数字。
- words
- 正常生成计数器表示, 然后用 内容语言 朗读它。 如果计数器表示中包含图像, 则按 numbers 的处理方式处理该值。
- spell-out
-
正常生成计数器表示,
然后按字母顺序逐字朗读它,使用 内容语言。
如果 UA 不知道如何发音这些符号
(或者计数器表示中包含图像),
则必须按 numbers 的方式处理该值。
例如,lower-greek 在英语中将被读作 "alpha", "beta", "gamma" 等。 相反,upper-latin 在法语中将被读作(音标)/a/, /be/, /se/ 等。
- <counter-style-name>
- 计数器的值将按指定的样式发音 (类似于 fallback 描述符 在生成计数器值的表示时的行为)。 如果指定的样式不存在, 则此值将按 auto 处理。 如果在遵循 speak-as 引用时检测到循环, 则此值将按参与循环的计数器样式的 auto 处理。
@counter-style circled-lower-latin { system: alphabetic; speak-as: lower-latin; symbols: ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ; suffix: " "; }
将其 system 设置为 alphabetic 通常会让 UA 尝试 读取字符的名称, 但在这种情况下,可能是 "Circled Letter A", 这可能不合适。 相反,明确将 speak-as 设置为 lower-latin 可确保它们按其对应的拉丁字母读取,这符合预期。
4. 定义匿名计数器样式: symbols() 函数
symbols() 函数允许在属性值中内联定义计数器样式, 当某种样式在样式表中只使用一次时,定义完整的 @counter-style 规则可能显得过于繁琐。 它并没有提供 @counter-style 规则的全部功能, 但提供了足够的子集来满足实际需求。 symbols() 规则的语法如下:
symbols() = symbols( <symbols-type>? [ <string> | <image> ]+ ) <symbols-type> = cyclic | numeric | alphabetic | symbolic | fixed
symbols() 函数定义了一个匿名计数器样式, 没有名称, 前缀为 "" (空字符串), 后缀为 " " (U+0020 空格), 范围为 auto, 回退为 decimal, 负数表示为 "-" (连字符-减号), 补全为 0 "", 语音合成为 auto。 计数器样式的算法将根据上一章的内容,使用提供的 system 构建, 或者如果省略了 system,则使用 symbolic, 并将提供的 <string> 和 <image> 作为 symbols 属性的值。 如果 system 是 fixed,则 第一个符号值 为 1。
如果 system 是 alphabetic 或 numeric, 则必须至少有两个 <string> 或 <image>, 否则该函数无效。
ol { list-style: symbols("*" "\2020" "\2021" "\A7"); }
将生成如下列表:
* One † Two ‡ Three § Four ** Five †† Six ‡‡ Seven
另一方面,指定计数器系统,如下所示:
ol { list-style: symbols(cyclic "*" "\2020" "\2021" "\A7"); }
将生成如下列表:
* One † Two ‡ Three § Four * Five † Six ‡ Seven
注意: symbols() 函数仅允许使用字符串和图像, 而 symbols 描述符在 @counter-style 规则中还允许使用标识符。
5. 扩展 list-style-type,counter() 和 counters()
在 CSS Level 2 中,[CSS21] 中的 list-style-type 属性和 counter() 以及 counters() 记法 接受各种预定义的关键字,每个关键字表示一种计数器样式。 本模块扩展了这些功能,使其可以接受 <counter-style> 类型,定义如下:
<counter-style> = <counter-style-name> | <symbols()>
如果使用的 <counter-style-name> 没有指向任何现有的计数器样式, 它必须与 decimal 计数器样式行为一致 (但不会计算为 decimal)。
当在这些上下文中使用时,<counter-style-name> 是一个树范围引用。
6. 简单的预定义计数器样式
以下样式表使用 @counter-style 规则
重新定义了 CSS 2 和 CSS 2.1 中定义的所有计数器样式。
该样式表是规范性的—
6.1. 数字: decimal, decimal-leading-zero, arabic-indic, armenian, upper-armenian, lower-armenian, bengali, cambodian, khmer, cjk-decimal, devanagari, georgian, gujarati, gurmukhi, hebrew, kannada, lao, malayalam, mongolian, myanmar, oriya, persian, lower-roman, upper-roman, tamil, telugu, thai, tibetan
- decimal
- 西方十进制数字 (如 1, 2, 3, ..., 98, 99, 100)。
- decimal-leading-zero
- 十进制数字,前面填充零 (如 01, 02, 03, ..., 98, 99, 100)。
- arabic-indic
- 阿拉伯数字系统 (如 ١, ٢, ٣, ٤, ..., ٩٨, ٩٩, ١٠٠)。
- armenian
- upper-armenian
- 传统大写亚美尼亚数字 (如 Ա, Բ, Գ, ..., ՂԸ, ՂԹ, Ճ)。
- lower-armenian
- 小写亚美尼亚数字 (如 ա, բ, գ, ..., ղը, ղթ, ճ)。
- bengali
- 孟加拉数字 (如 ১, ২, ৩, ..., ৯৮, ৯৯, ১০০)。
- cambodian
- khmer
- 柬埔寨/高棉数字 (如 ១, ២, ៣, ..., ៩៨, ៩៩, ១០០)。
- cjk-decimal
- 汉字十进制数字 (如 一, 二, 三, ..., 九八, 九九, 一〇〇)。
- devanagari
- 天城数字 (如 १, २, ३, ..., ९८, ९९, १००)。
- georgian
- 传统格鲁吉亚数字 (如 ა, ბ, გ, ..., ჟჱ, ჟთ, რ)。
- gujarati
- 古吉拉特数字 (如 ૧, ૨, ૩, ..., ૯૮, ૯૯, ૧૦૦)。
- gurmukhi
- 古木基数字 (如 ੧, ੨, ੩, ..., ੯੮, ੯੯, ੧੦੦)。
- hebrew
- 传统希伯来数字 (如 א, ב, ג, ..., צח, צט, ק)。
- kannada
- 卡纳达数字 (如 ೧, ೨, ೩, ..., ೯೮, ೯೯, ೧೦೦)。
- lao
- 老挝数字 (如 ໑, ໒, ໓, ..., ໙໘, ໙໙, ໑໐໐)。
- malayalam
- 马拉雅拉姆数字 (如 ൧, ൨, ൩, ..., ൯൮, ൯൯, ൧൦൦)。
- mongolian
- 蒙古数字 (如 ᠑, ᠒, ᠓, ..., ᠙᠘, ᠙᠙, ᠑᠐᠐)。
- myanmar
- 缅甸数字 (如 ၁, ၂, ၃, ..., ၉၈, ၉၉, ၁၀၀)。
- oriya
- 奥里亚数字 (如 ୧, ୨, ୩, ..., ୯୮, ୯୯, ୧୦୦)。
- persian
- 波斯数字 (如 ۱, ۲, ۳, ۴, ..., ۹۸, ۹۹, ۱۰۰)。
- lower-roman
- 小写ASCII罗马数字 (如 i, ii, iii, ..., xcviii, xcix, c)。
- upper-roman
- 大写ASCII罗马数字 (如 I, II, III, ..., XCVIII, XCIX, C)。
- tamil
- 泰米尔数字 (如 ௧, ௨, ௩, ..., ௯௮, ௯௯, ௧௦௦)。
- telugu
- 泰卢固数字 (如 ౧, ౨, ౩, ..., ౯౮, ౯౯, ౧౦౦)。
- thai
- 泰语(暹罗)数字 (如 ๑, ๒, ๓, ..., ๙๘, ๙๙, ๑๐๐)。
- tibetan
- 藏文数字 (如 ༡, ༢, ༣, ..., ༩༨, ༩༩, ༡༠༠)。
以下样式表片段提供了这些预定义计数器样式的规范定义:
@counter-style decimal { system: numeric; symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; } @counter-style decimal-leading-zero { system: extends decimal; pad: 2 '0'; } @counter-style arabic-indic { system: numeric; symbols: "\660" "\661" "\662" "\663" "\664" "\665" "\666" "\667" "\668" "\669"; /* ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ */ } @counter-style armenian { system: additive; range: 1 9999; additive-symbols: 9000 \554, 8000 \553, 7000 \552, 6000 \551, 5000 \550, 4000 \54F, 3000 \54E, 2000 \54D, 1000 \54C, 900 \54B, 800 \54A, 700 \549, 600 \548, 500 \547, 400 \546, 300 \545, 200 \544, 100 \543, 90 \542, 80 \541, 70 \540, 60 \53F, 50 \53E, 40 \53D, 30 \53C, 20 \53B, 10 \53A, 9 \539, 8 \538, 7 \537, 6 \536, 5 \535, 4 \534, 3 \533, 2 \532, 1 \531; /* 9000 Ք, 8000 Փ, 7000 Ւ, 6000 Ց, 5000 Ր, 4000 Տ, 3000 Վ, 2000 Ս, 1000 Ռ, 900 Ջ, 800 Պ, 700 Չ, 600 Ո, 500 Շ, 400 Ն, 300 Յ, 200 Մ, 100 Ճ, 90 Ղ, 80 Ձ, 70 Հ, 60 Կ, 50 Ծ, 40 Խ, 30 Լ, 20 Ի, 10 Ժ, 9 Թ, 8 Ը, 7 Է, 6 Զ, 5 Ե, 4 Դ, 3 Գ, 2 Բ, 1 Ա */ } @counter-style upper-armenian { system: extends armenian; } @counter-style lower-armenian { system: additive; range: 1 9999; additive-symbols: 9000 "\584", 8000 "\583", 7000 "\582", 6000 "\581", 5000 "\580", 4000 "\57F", 3000 "\57E", 2000 "\57D", 1000 "\57C", 900 "\57B", 800 "\57A", 700 "\579", 600 "\578", 500 "\577", 400 "\576", 300 "\575", 200 "\574", 100 "\573", 90 "\572", 80 "\571", 70 "\570", 60 "\56F", 50 "\56E", 40 "\56D", 30 "\56C", 20 "\56B", 10 "\56A", 9 "\569", 8 "\568", 7 "\567", 6 "\566", 5 "\565", 4 "\564", 3 "\563", 2 "\562", 1 "\561"; /* 9000 ք, 8000 փ, 7000 ւ, 6000 ց, 5000 ր, 4000 տ, 3000 վ, 2000 ս, 1000 ռ, 900 ջ, 800 պ, 700 չ, 600 ո, 500 շ, 400 ն, 300 յ, 200 մ, 100 ճ, 90 ղ, 80 ձ, 70 հ, 60 կ, 50 ծ, 40 խ, 30 լ, 20 ի, 10 ժ, 9 թ, 8 ը, 7 է, 6 զ, 5 ե, 4 դ, 3 գ, 2 բ, 1 ա */ } @counter-style bengali { system: numeric; symbols: "\9E6" "\9E7" "\9E8" "\9E9" "\9EA" "\9EB" "\9EC" "\9ED" "\9EE" "\9EF"; /* ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ */ } @counter-style cambodian { system: numeric; symbols: "\17E0" "\17E1" "\17E2" "\17E3" "\17E4" "\17E5" "\17E6" "\17E7" "\17E8" "\17E9"; /* ០ ១ ២ ៣ ៤ ៥ ៦ ៧ ៨ ៩ */ } @counter-style khmer { system: extends cambodian; } @counter-style cjk-decimal { system: numeric; range: 0 infinite; symbols: \3007 \4E00 \4E8C \4E09 \56DB \4E94 \516D \4E03 \516B \4E5D; /* 〇 一 二 三 四 五 六 七 八 九 */ suffix: "\3001"; /* "、" */ } @counter-style devanagari { system: numeric; symbols: "\966" "\967" "\968" "\969" "\96A" "\96B" "\96C" "\96D" "\96E" "\96F"; /* ० १ २ ३ ४ ५ ६ ७ ८ ९ */ } @counter-style georgian { system: additive; range: 1 19999; additive-symbols: 10000 \10F5, 9000 \10F0, 8000 \10EF, 7000 \10F4, 6000 \10EE, 5000 \10ED, 4000 \10EC, 3000 \10EB, 2000 \10EA, 1000 \10E9, 900 \10E8, 800 \10E7, 700 \10E6, 600 \10E5, 500 \10E4, 400 \10F3, 300 \10E2, 200 \10E1, 100 \10E0, 90 \10DF, 80 \10DE, 70 \10DD, 60 \10F2, 50 \10DC, 40 \10DB, 30 \10DA, 20 \10D9, 10 \10D8, 9 \10D7, 8 \10F1, 7 \10D6, 6 \10D5, 5 \10D4, 4 \10D3, 3 \10D2, 2 \10D1, 1 \10D0; /* 10000 ჵ, 9000 ჰ, 8000 ჯ, 7000 ჴ, 6000 ხ, 5000 ჭ, 4000 წ, 3000 ძ, 2000 ც, 1000 ჩ, 900 შ, 800 ყ, 700 ღ, 600 ქ, 500 ფ, 400 ჳ, 300 ტ, 200 ს, 100 რ, 90 ჟ, 80 პ, 70 ო, 60 ჲ, 50 ნ, 40 მ, 30 ლ, 20 კ, 10 ი, 9 თ, 8 ჱ, 7 ზ, 6 ვ, 5 ე, 4 დ, 3 გ, 2 ბ, 1 ა */ } @counter-style gujarati { system: numeric; symbols: "\AE6" "\AE7" "\AE8" "\AE9" "\AEA" "\AEB" "\AEC" "\AED" "\AEE" "\AEF"; /* ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ */ } @counter-style gurmukhi { system: numeric; symbols: "\A66" "\A67" "\A68" "\A69" "\A6A" "\A6B" "\A6C" "\A6D" "\A6E" "\A6F"; /* ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ */ } @counter-style hebrew { system: additive; range: 1 10999; additive-symbols: 10000 \5D9\5F3, 9000 \5D8\5F3, 8000 \5D7\5F3, 7000 \5D6\5F3, 6000 \5D5\5F3, 5000 \5D4\5F3, 4000 \5D3\5F3, 3000 \5D2\5F3, 2000 \5D1\5F3, 1000 \5D0\5F3, 400 \5EA, 300 \5E9, 200 \5E8, 100 \5E7, 90 \5E6, 80 \5E4, 70 \5E2, 60 \5E1, 50 \5E0, 40 \5DE, 30 \5DC, 20 \5DB, 19 \5D9\5D8, 18 \5D9\5D7, 17 \5D9\5D6, 16 \5D8\5D6, 15 \5D8\5D5, 10 \5D9, 9 \5D8, 8 \5D7, 7 \5D6, 6 \5D5, 5 \5D4, 4 \5D3, 3 \5D2, 2 \5D1, 1 \5D0; /* 10000 י׳, 9000 ט׳, 8000 ח׳, 7000 ז׳, 6000 ו׳, 5000 ה׳, 4000 ד׳, 3000 ג׳, 2000 ב׳, 1000 א׳, 400 ת, 300 ש, 200 ר, 100 ק, 90 צ, 80 פ, 70 ע, 60 ס, 50 נ, 40 מ, 30 ל, 20 כ, 19 יט, 18 יח, 17 יז, 16 טז, 15 טו, 10 י, 9 ט, 8 ח, 7 ז, 6 ו, 5 ה, 4 ד, 3 ג, 2 ב, 1 א */ /* This system manually specifies the values for 19-15 to force the correct display of 15 and 16, which are commonly rewritten to avoid a close resemblance to the Tetragrammaton. */ /* Implementations MAY choose to implement this manually to a higher range; see note below. */ } @counter-style kannada { system: numeric; symbols: "\CE6" "\CE7" "\CE8" "\CE9" "\CEA" "\CEB" "\CEC" "\CED" "\CEE" "\CEF"; /* ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ */ } @counter-style lao { system: numeric; symbols: "\ED0" "\ED1" "\ED2" "\ED3" "\ED4" "\ED5" "\ED6" "\ED7" "\ED8" "\ED9"; /* ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ */ } @counter-style malayalam { system: numeric; symbols: "\D66" "\D67" "\D68" "\D69" "\D6A" "\D6B" "\D6C" "\D6D" "\D6E" "\D6F"; /* ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯ */ } @counter-style mongolian { system: numeric; symbols: "\1810" "\1811" "\1812" "\1813" "\1814" "\1815" "\1816" "\1817" "\1818" "\1819"; /* ᠐ ᠑ ᠒ ᠓ ᠔ ᠕ ᠖ ᠗ ᠘ ᠙ */ } @counter-style myanmar { system: numeric; symbols: "\1040" "\1041" "\1042" "\1043" "\1044" "\1045" "\1046" "\1047" "\1048" "\1049"; /* ၀ ၁ ၂ ၃ ၄ ၅ ၆ ၇ ၈ ၉ */ } @counter-style oriya { system: numeric; symbols: "\B66" "\B67" "\B68" "\B69" "\B6A" "\B6B" "\B6C" "\B6D" "\B6E" "\B6F"; /* ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ */ } @counter-style persian { system: numeric; symbols: "\6F0" "\6F1" "\6F2" "\6F3" "\6F4" "\6F5" "\6F6" "\6F7" "\6F8" "\6F9"; /* ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ */ } @counter-style lower-roman { system: additive; range: 1 3999; additive-symbols: 1000 m, 900 cm, 500 d, 400 cd, 100 c, 90 xc, 50 l, 40 xl, 10 x, 9 ix, 5 v, 4 iv, 1 i; } @counter-style upper-roman { system: additive; range: 1 3999; additive-symbols: 1000 M, 900 CM, 500 D, 400 CD, 100 C, 90 XC, 50 L, 40 XL, 10 X, 9 IX, 5 V, 4 IV, 1 I; } @counter-style tamil { system: numeric; symbols: "\BE6" "\BE7" "\BE8" "\BE9" "\BEA" "\BEB" "\BEC" "\BED" "\BEE" "\BEF"; /* ௦ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ */ } @counter-style telugu { system: numeric; symbols: "\C66" "\C67" "\C68" "\C69" "\C6A" "\C6B" "\C6C" "\C6D" "\C6E" "\C6F"; /* ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯ */ } @counter-style thai { system: numeric; symbols: "\E50" "\E51" "\E52" "\E53" "\E54" "\E55" "\E56" "\E57" "\E58" "\E59"; /* ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ */ } @counter-style tibetan { system: numeric; symbols: "\F20" "\F21" "\F22" "\F23" "\F24" "\F25" "\F26" "\F27" "\F28" "\F29"; /* ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ */ }
实现必须至少实现hebrew到上述@counter-style规则中指定的范围, 但也可以实现到更高的范围。 如果实现了更高的范围, 相应的range描述符必须反映实现的范围。
6.2. 字母: lower-alpha, lower-latin, upper-alpha, upper-latin, lower-greek, hiragana, hiragana-iroha, katakana, katakana-iroha
- lower-alpha
- lower-latin
- 小写 ASCII 字母 (如 a, b, c, ..., z, aa, ab)。
- upper-alpha
- upper-latin
- 大写 ASCII 字母 (如 A, B, C, ..., Z, AA, AB)。
- lower-greek
- 小写古典希腊字母 (如 α, β, γ, ..., ω, αα, αβ)。
- hiragana
- 字典顺序平假名字母 (如 あ, い, う, ..., ん, ああ, あい)。
- hiragana-iroha
- 伊吕波顺序平假名字母 (如 い, ろ, は, ..., す, いい, いろ)。
- katakana
- 字典顺序片假名字母 (如 ア, イ, ウ, ..., ン, アア, アイ)。
- katakana-iroha
- 伊吕波顺序片假名字母 (如 イ, ロ, ハ, ..., ス, イイ, イロ)
以下样式表片段提供了这些预定义计数器样式的规范定义:
@counter-style lower-alpha { system: alphabetic; symbols: a b c d e f g h i j k l m n o p q r s t u v w x y z; } @counter-style lower-latin { system: extends lower-alpha; } @counter-style upper-alpha { system: alphabetic; symbols: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; } @counter-style upper-latin { system: extends upper-alpha; } @counter-style lower-greek { system: alphabetic; symbols: "\3B1" "\3B2" "\3B3" "\3B4" "\3B5" "\3B6" "\3B7" "\3B8" "\3B9" "\3BA" "\3BB" "\3BC" "\3BD" "\3BE" "\3BF" "\3C0" "\3C1" "\3C3" "\3C4" "\3C5" "\3C6" "\3C7" "\3C8" "\3C9"; /* α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω */ } @counter-style hiragana { system: alphabetic; symbols: "\3042" "\3044" "\3046" "\3048" "\304A" "\304B" "\304D" "\304F" "\3051" "\3053" "\3055" "\3057" "\3059" "\305B" "\305D" "\305F" "\3061" "\3064" "\3066" "\3068" "\306A" "\306B" "\306C" "\306D" "\306E" "\306F" "\3072" "\3075" "\3078" "\307B" "\307E" "\307F" "\3080" "\3081" "\3082" "\3084" "\3086" "\3088" "\3089" "\308A" "\308B" "\308C" "\308D" "\308F" "\3090" "\3091" "\3092" "\3093"; /* あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん */ suffix: "、"; } @counter-style hiragana-iroha { system: alphabetic; symbols: "\3044" "\308D" "\306F" "\306B" "\307B" "\3078" "\3068" "\3061" "\308A" "\306C" "\308B" "\3092" "\308F" "\304B" "\3088" "\305F" "\308C" "\305D" "\3064" "\306D" "\306A" "\3089" "\3080" "\3046" "\3090" "\306E" "\304A" "\304F" "\3084" "\307E" "\3051" "\3075" "\3053" "\3048" "\3066" "\3042" "\3055" "\304D" "\3086" "\3081" "\307F" "\3057" "\3091" "\3072" "\3082" "\305B" "\3059"; /* い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す */ suffix: "、"; } @counter-style katakana { system: alphabetic; symbols: "\30A2" "\30A4" "\30A6" "\30A8" "\30AA" "\30AB" "\30AD" "\30AF" "\30B1" "\30B3" "\30B5" "\30B7" "\30B9" "\30BB" "\30BD" "\30BF" "\30C1" "\30C4" "\30C6" "\30C8" "\30CA" "\30CB" "\30CC" "\30CD" "\30CE" "\30CF" "\30D2" "\30D5" "\30D8" "\30DB" "\30DE" "\30DF" "\30E0" "\30E1" "\30E2" "\30E4" "\30E6" "\30E8" "\30E9" "\30EA" "\30EB" "\30EC" "\30ED" "\30EF" "\30F0" "\30F1" "\30F2" "\30F3"; /* ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヰ ヱ ヲ ン */ suffix: "、"; } @counter-style katakana-iroha { system: alphabetic; symbols: "\30A4" "\30ED" "\30CF" "\30CB" "\30DB" "\30D8" "\30C8" "\30C1" "\30EA" "\30CC" "\30EB" "\30F2" "\30EF" "\30AB" "\30E8" "\30BF" "\30EC" "\30BD" "\30C4" "\30CD" "\30CA" "\30E9" "\30E0" "\30A6" "\30F0" "\30CE" "\30AA" "\30AF" "\30E4" "\30DE" "\30B1" "\30D5" "\30B3" "\30A8" "\30C6" "\30A2" "\30B5" "\30AD" "\30E6" "\30E1" "\30DF" "\30B7" "\30F1" "\30D2" "\30E2" "\30BB" "\30B9"; /* イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス */ suffix: "、"; }
6.3. 符号: disc, circle, square, disclosure-open, disclosure-closed
- disc
- 一个实心圆,类似于 • U+2022 BULLET。
- circle
- 一个空心圆,类似于 ◦ U+25E6 WHITE BULLET。
- square
- 一个实心方块,类似于 ▪ U+25AA BLACK SMALL SQUARE。
- disclosure-open
- disclosure-closed
- 用于表示打开或关闭的符号,例如 HTML
details
元素。
以下样式表片段提供了这些预定义计数器样式的规范定义:
@counter-style disc { system: cyclic; symbols: \2022; /* • */ suffix: " "; } @counter-style circle { system: cyclic; symbols: \25E6; /* ◦ */ suffix: " "; } @counter-style square { system: cyclic; symbols: \25AA; /* ▪ */ suffix: " "; } @counter-style disclosure-open { system: cyclic; suffix: " "; /* for symbols, see normative text below */ } @counter-style disclosure-closed { system: cyclic; suffix: " "; /* for symbols, see normative text below */ }
当使用list-style-type时, UA 可以选择使用 UA 生成的图像或 UA 选择的字体渲染这些样式, 而不是使用元素自己的字体渲染指定的字符。 如果使用图像,图像应与字符相似, 并且应调整大小以适合 1em × 1em 的正方形。
对于 disclosure-open 和 disclosure-closed 计数器样式,
标记应为适合指示展开和关闭状态的图像或字符,
例如 HTML 的
details
元素。
如果图像具有方向性,
则应响应元素的 书写模式,
类似于 Images 4 模块中的bidi-sensitive images功能。
例如,disclosure-closed 样式可能使用字符
U+25B8 BLACK RIGHT-POINTING SMALL TRIANGLE (▸)
和 U+25C2 BLACK LEFT-POINTING SMALL TRIANGLE (◂),
而 disclosure-open 样式可能使用字符
U+25BE BLACK DOWN-POINTING SMALL TRIANGLE (▾)。
6.4. 固定: cjk-earthly-branch, cjk-heavenly-stem
- cjk-earthly-branch
- 汉字“地支”序数 (例如,子,丑,寅,...,亥)。
- cjk-heavenly-stem
- 汉字“天干”序数 (例如,甲,乙,丙,...,癸)
以下样式表片段提供了这些预定义计数器样式的规范定义:
@counter-style cjk-earthly-branch { system: fixed; symbols: "\5B50" "\4E11" "\5BC5" "\536F" "\8FB0" "\5DF3" "\5348" "\672A" "\7533" "\9149" "\620C" "\4EA5"; /* 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥 */ suffix: "、"; } @counter-style cjk-heavenly-stem { system: fixed; symbols: "\7532" "\4E59" "\4E19" "\4E01" "\620A" "\5DF1" "\5E9A" "\8F9B" "\58EC" "\7678"; /* 甲 乙 丙 丁 戊 己 庚 辛 壬 癸 */ suffix: "、"; }
7. 复杂的预定义计数器样式
虽然作者可以使用 @counter-style 规则 来定义他们自己的计数器样式,或依赖预定义的计数器样式集, 但有一些计数器样式的规则过于复杂,无法通过预定义的算法捕获。 本节将描述这些计数器样式。
本节中指定的一些计数器样式具有自定义的生成计数值的算法, 但在其他方面与通过 @counter-style 规则定义的计数器样式相同。 例如,作者可以在 extends 系统中引用这些样式之一, 重用算法但更换一些其他描述符。
本节中定义的所有计数器样式都有 发音形式 ,即 数字, 并且 使用负号。
7.1. 东亚长格式计数器样式
中文、日文和韩文有一些“长格式”的计数器样式, 类似于英文中的“十三千一百二十三”。 它们都有正式和非正式两种变体。 正式样式通常用于财务和法律文件中, 因为这些字符更难被修改。
计数器样式 | 0 | 1 | 2 | 3 | 10 | 11 | 99 | 100 | 101 | 6001 |
---|---|---|---|---|---|---|---|---|---|---|
japanese-informal | 〇 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 百 | 百一 | 六千一 |
japanese-formal | 零 | 壱 | 弐 | 参 | 壱拾 | 壱拾壱 | 九拾九 | 壱百 | 壱百壱 | 六阡壱 |
korean-hangul-formal | 영 | 일 | 이 | 삼 | 일십 | 일십일 | 구십구 | 일백 | 일백일 | 육천일 |
korean-hanja-informal | 零 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 百 | 百一 | 六千一 |
korean-hanja-formal | 零 | 壹 | 貳 | 參 | 壹拾 | 壹拾壹 | 九拾九 | 壹百 | 壹百壹 | 六仟壹 |
simp-chinese-informal | 零 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 一百 | 一百零一 | 六千零一 |
simp-chinese-formal | 零 | 壹 | 贰 | 叁 | 壹拾 | 壹拾壹 | 玖拾玖 | 壹佰 | 壹佰零壹 | 陆仟零壹 |
trad-chinese-informal | 零 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 一百 | 一百零一 | 六千零一 |
trad-chinese-formal | 零 | 壹 | 貳 | 參 | 壹拾 | 壹拾壹 | 玖拾玖 | 壹佰 | 壹佰零壹 | 陸仟零壹 |
由于对如何最佳表示 10k 或更大数字的意见分歧, 本节定义的所有计数器样式的范围为 -9999 到 9999, 但实现可能支持更大的范围。 在实现支持的范围之外, 后备计数器样式为 cjk-decimal。
注意: 鼓励实现者对超过 10k 的计数表示法进行研究和实现, 并在发现普遍接受的答案时向 CSS 工作组反馈数据。 有关此主题的一些先前研究包含在 早期草案 中。
7.1.1. 日文:japanese-informal 和 japanese-formal
- japanese-informal
- 非正式的日文汉字计数法 (例如,千百十一)
- japanese-formal
- 正式的日文汉字计数法 (例如,壱阡壱百壱拾壱)
@counter-style japanese-informal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \4E09, 2 \4E8C, 1 \4E00, 0 \3007; /* 9000 九千, 8000 八千, 7000 七千, 6000 六千, 5000 五千, 4000 四千, 3000 三千, 2000 二千, 1000 千, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 三百, 200 二百, 100 百, 90 九十, 80 八十, 70 七十, 60 六十, 50 五十, 40 四十, 30 三十, 20 二十, 10 十, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 三, 2 二, 1 一, 0 〇 */ suffix: '\3001'; /* 、 */ negative: "\30DE\30A4\30CA\30B9"; /* マイナス */ fallback: cjk-decimal; } @counter-style japanese-formal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\9621, 8000 \516B\9621, 7000 \4E03\9621, 6000 \516D\9621, 5000 \4F0D\9621, 4000 \56DB\9621, 3000 \53C2\9621, 2000 \5F10\9621, 1000 \58F1\9621, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4F0D\767E, 400 \56DB\767E, 300 \53C2\767E, 200 \5F10\767E, 100 \58F1\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4F0D\62FE, 40 \56DB\62FE, 30 \53C2\62FE, 20 \5F10\62FE, 10 \58F1\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4F0D, 4 \56DB, 3 \53C2, 2 \5F10, 1 \58F1, 0 \96F6; /* 9000 九阡, 8000 八阡, 7000 七阡, 6000 六阡, 5000 伍阡, 4000 四阡, 3000 参阡, 2000 弐阡, 1000 壱阡, 900 九百, 800 八百, 700 七百, 600 六百, 500 伍百, 400 四百, 300 参百, 200 弐百, 100 壱百, 90 九拾, 80 八拾, 70 七拾, 60 六拾, 50 伍拾, 40 四拾, 30 参拾, 20 弐拾, 10 壱拾, 9 九, 8 八, 7 七, 6 六, 5 伍, 4 四, 3 参, 2 弐, 1 壱, 0 零 */ suffix: '\3001'; /* 、 */ negative: "\30DE\30A4\30CA\30B9"; /* マイナス */ fallback: cjk-decimal; }
7.1.2. 韩文:korean-hangul-formal,korean-hanja-informal,以及 korean-hanja-formal
- korean-hangul-formal
- 韩文韩字计数法 (例如,일천일백일십일)
- korean-hanja-informal
- 非正式的韩文汉字计数法 (例如,千百十一)
- korean-hanja-formal
- 正式的韩文汉字计数法 (例如,壹仟壹百壹拾壹)
@counter-style korean-hangul-formal { system: additive; range: -9999 9999; additive-symbols: 9000 \AD6C\CC9C, 8000 \D314\CC9C, 7000 \CE60\CC9C, 6000 \C721\CC9C, 5000 \C624\CC9C, 4000 \C0AC\CC9C, 3000 \C0BC\CC9C, 2000 \C774\CC9C, 1000 \C77C\CC9C, 900 \AD6C\BC31, 800 \D314\BC31, 700 \CE60\BC31, 600 \C721\BC31, 500 \C624\BC31, 400 \C0AC\BC31, 300 \C0BC\BC31, 200 \C774\BC31, 100 \C77C\BC31, 90 \AD6C\C2ED, 80 \D314\C2ED, 70 \CE60\C2ED, 60 \C721\C2ED, 50 \C624\C2ED, 40 \C0AC\C2ED, 30 \C0BC\C2ED, 20 \C774\C2ED, 10 \C77C\C2ED, 9 \AD6C, 8 \D314, 7 \CE60, 6 \C721, 5 \C624, 4 \C0AC, 3 \C0BC, 2 \C774, 1 \C77C, 0 \C601; /* 9000 구천, 8000 팔천, 7000 칠천, 6000 육천, 5000 오천, 4000 사천, 3000 삼천, 2000 이천, 1000 일천, 900 구백, 800 팔백, 700 칠백, 600 육백, 500 오백, 400 사백, 300 삼백, 200 이백, 100 일백, 90 구십, 80 팔십, 70 칠십, 60 육십, 50 오십, 40 사십, 30 삼십, 20 이십, 10 일십, 9 구, 8 팔, 7 칠, 6 육, 5 오, 4 사, 3 삼, 2 이, 1 일, 0 영 */ suffix: ', '; negative: "\B9C8\C774\B108\C2A4 "; /* 마이너스 (followed by a space) */ } @counter-style korean-hanja-informal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \4E09, 2 \4E8C, 1 \4E00, 0 \96F6; /* 9000 九千, 8000 八千, 7000 七千, 6000 六千, 5000 五千, 4000 四千, 3000 三千, 2000 二千, 1000 千, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 三百, 200 二百, 100 百, 90 九十, 80 八十, 70 七十, 60 六十, 50 五十, 40 四十, 30 三十, 20 二十, 10 十, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 三, 2 二, 1 一, 0 零 */ suffix: ', '; negative: "\B9C8\C774\B108\C2A4 "; /* 마이너스 (followed by a space) */ } @counter-style korean-hanja-formal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\4EDF, 8000 \516B\4EDF, 7000 \4E03\4EDF, 6000 \516D\4EDF, 5000 \4E94\4EDF, 4000 \56DB\4EDF, 3000 \53C3\4EDF, 2000 \8CB3\4EDF, 1000 \58F9\4EDF, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \53C3\767E, 200 \8CB3\767E, 100 \58F9\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4E94\62FE, 40 \56DB\62FE, 30 \53C3\62FE, 20 \8CB3\62FE, 10 \58F9\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \53C3, 2 \8CB3, 1 \58F9, 0 \96F6; /* 9000 九仟, 8000 八仟, 7000 七仟, 6000 六仟, 5000 五仟, 4000 四仟, 3000 參仟, 2000 貳仟, 1000 壹仟, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 參百, 200 貳百, 100 壹百, 90 九拾, 80 八拾, 70 七拾, 60 六拾, 50 五拾, 40 四拾, 30 參拾, 20 貳拾, 10 壹拾, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 參, 2 貳, 1 壹, 0 零 */ suffix: ', '; negative: "\B9C8\C774\B108\C2A4 "; /* 마이너스 (followed by a space) */ }
7.1.3. 中文:simp-chinese-informal,simp-chinese-formal,trad-chinese-informal,以及 trad-chinese-formal
- simp-chinese-informal
- 简体中文非正式数字 (例如,一千一百一十一)
- simp-chinese-formal
- 简体中文正式数字 (例如,壹仟壹佰壹拾壹)
- trad-chinese-informal
- 繁体中文非正式数字 (例如,一千一百一十一)
- trad-chinese-formal
- 繁体中文正式数字 (例如,壹仟壹佰壹拾壹)
- cjk-ideographic
- 该计数样式与 trad-chinese-informal 相同。 (它的存在是为了兼容遗留系统。)
中文的长格式样式通过几乎相同的算法定义(这里作为一个统一的算法进行规范,并在相关之处指出差异),但使用不同的字符集,如下表所示。
- 如果计数值为0,则表示结果为指定计数样式的0字符。跳过算法的其余部分。
- 初始将计数值表示为一个十进制数。对于每个非0的数字,附加适当的数字标记到该数字。个位数没有标记。
- 对于非正式样式,如果计数值在十到十九之间,则删除十位数字(保留数字标记)。
- 删除任何尾随的零,并将其余的零压缩为一个零字符。
- 用指定计数样式的适当字符替换数字0-9。返回结果字符串作为计数值的表示形式。
对于所有这些计数样式,后缀为 "、"(U+3001), 回退样式为 cjk-decimal, 范围为 -9999 9999, 负数样式在符号表中给出。
以下表格定义了这些样式中使用的字符:
值 | 码点 | |||
---|---|---|---|---|
simp-chinese-informal | simp-chinese-formal | trad-chinese-informal | trad-chinese-formal | |
Digit 0 | 零 U+96F6 | 零 U+96F6 | 零 U+96F6 | 零 U+96F6 |
Digit 1 | 一 U+4E00 | 壹 U+58F9 | 一 U+4E00 | 壹 U+58F9 |
Digit 2 | 二 U+4E8C | 贰 U+8D30 | 二 U+4E8C | 貳 U+8CB3 |
Digit 3 | 三 U+4E09 | 叁 U+53C1 | 三 U+4E09 | 參 U+53C3 |
Digit 4 | 四 U+56DB | 肆 U+8086 | 四 U+56DB | 肆 U+8086 |
Digit 5 | 五 U+4E94 | 伍 U+4F0D | 五 U+4E94 | 伍 U+4F0D |
Digit 6 | 六 U+516D | 陆 U+9646 | 六 U+516D | 陸 U+9678 |
Digit 7 | 七 U+4E03 | 柒 U+67D2 | 七 U+4E03 | 柒 U+67D2 |
Digit 8 | 八 U+516B | 捌 U+634C | 八 U+516B | 捌 U+634C |
Digit 9 | 九 U+4E5D | 玖 U+7396 | 九 U+4E5D | 玖 U+7396 |
Tens Digit Marker | 十 U+5341 | 拾 U+62FE | 十 U+5341 | 拾 U+62FE |
Hundreds Digit Marker | 百 U+767E | 佰 U+4F70 | 百 U+767E | 佰 U+4F70 |
Thousands Digit Marker | 千 U+5343 | 仟 U+4EDF | 千 U+5343 | 仟 U+4EDF |
Negative Sign | 负 U+8D1F | 负 U+8D1F | 負 U+8CA0 | 負 U+8CA0 |
参考如下,为 simp-chinese-informal 样式的前120个值:
1 一 41 四十一 81 八十一 2 二 42 四十二 82 八十二 3 三 43 四十三 83 八十三 4 四 44 四十四 84 八十四 5 五 45 四十五 85 八十五 6 六 46 四十六 86 八十六 7 七 47 四十七 87 八十七 8 八 48 四十八 88 八十八 9 九 49 四十九 89 八十九 10 十 50 五十 90 九十 11 十一 51 五十一 91 九十一 12 十二 52 五十二 92 九十二 13 十三 53 五十三 93 九十三 14 十四 54 五十四 94 九十四 15 十五 55 五十五 95 九十五 16 十六 56 五十六 96 九十六 17 十七 57 五十七 97 九十七 18 十八 58 五十八 98 九十八 19 十九 59 五十九 99 九十九 20 二十 60 六十 100 一百 21 二十一 61 六十一 101 一百零一 22 二十二 62 六十二 102 一百零二 23 二十三 63 六十三 103 一百零三 24 二十四 64 六十四 104 一百零四 25 二十五 65 六十五 105 一百零五 26 二十六 66 六十六 106 一百零六 27 二十七 67 六十七 107 一百零七 28 二十八 68 六十八 108 一百零八 29 二十九 69 六十九 109 一百零九 30 三十 70 七十 110 一百一十 31 三十一 71 七十一 111 一百一十一 32 三十二 72 七十二 112 一百一十二 33 三十三 73 七十三 113 一百一十三 34 三十四 74 七十四 114 一百一十四 35 三十五 75 七十五 115 一百一十五 36 三十六 76 七十六 116 一百一十六 37 三十七 77 七十七 117 一百一十七 38 三十八 78 七十八 118 一百一十八 39 三十九 79 七十九 119 一百一十九 40 四十 80 八十 120 一百二十
7.2. 埃塞俄比亚数字计数器样式: ethiopic-numeric
ethiopic-numeric 计数器样式适用于所有正非零数字。以下算法将十进制数字转换为埃塞俄比亚数字:
- 如果数字为 1,则返回 "፩" (U+1369)。
- 将数字按两位分组,从最不重要的十进制数字开始。
- 依次为每个分组编索引,从最不重要的分组编号为零开始。
- 如果该组的值为零,或者该组是最重要的一组且值为 1,或者该组的索引是奇数且值为 1,则移除这些数字(但保留该组,以便稍后附加分隔符)。
- 对每个剩余的数字,从下面的列表中替换为相关的埃塞俄比亚字符。
十位 个位 值 码点 值 码点 10 ፲ U+1372 1 ፩ U+1369 20 ፳ U+1373 2 ፪ U+136A 30 ፴ U+1374 3 ፫ U+136B 40 ፵ U+1375 4 ፬ U+136C 50 ፶ U+1376 5 ፭ U+136D 60 ፷ U+1377 6 ፮ U+136E 70 ፸ U+1378 7 ፯ U+136F 80 ፹ U+1379 8 ፰ U+1370 90 ፺ U+137A 9 ፱ U+1371 - 对于索引为奇数的每个分组(如第二步所述),除了最初值为零的分组,附加 ፻ U+137B。
- 对于索引为偶数的每个分组(如第二步所述),除了索引为 0 的分组,附加 ፼ U+137C。
- 将所有分组连接成一个字符串,并返回结果。
对于此系统,名称为 "ethiopic-numeric",范围为 1 无限,后缀为
"/ "
(U+002F 斜杠后跟 U+0020 空格),其余描述符具有其初始值。
十进制数字 78010092 在埃塞俄比亚语中是 ፸፰፻፩፼፺፪ U+1378 U+1370 U+137B U+1369 U+137C U+137A U+136A。
十进制数字 780100000092 在埃塞俄比亚语中是 ፸፰፻፩፼፼፺፪ U+1378 U+1370 U+137B U+1369 U+137C U+137C U+137A U+136A。
8. 额外的“现成”计数器样式
国际化工作组维护了一个包含多种世界语言的现成@counter-style规则的列表, 该列表位于他们的现成计数器样式文档中。 [predefined-counter-styles]
这些额外的计数器样式并不打算由用户代理默认支持, 但可以通过用户或作者直接将其复制到样式表中使用。
9. API
9.1.
对CSSRule
接口的扩展
CSSRule
接口扩展如下:
partial interface CSSRule {const unsigned short = 11; };
COUNTER_STYLE_RULE
9.2.
CSSCounterStyleRule
接口
CSSCounterStyleRule接口表示@counter-style规则。
[Exposed =Window ]interface :
CSSCounterStyleRule CSSRule {attribute CSSOMString name ;attribute CSSOMString system ;attribute CSSOMString symbols ;attribute CSSOMString additiveSymbols ;attribute CSSOMString negative ;attribute CSSOMString prefix ;attribute CSSOMString suffix ;attribute CSSOMString range ;attribute CSSOMString pad ;attribute CSSOMString speakAs ;attribute CSSOMString fallback ; };
name
, 类型 CSSOMString-
获取时,name 属性必须返回一个
CSSOMString
对象, 该对象包含与该规则关联的<counter-style-name>的序列化结果。设置 name 属性时,执行以下步骤:
system
, 类型 CSSOMStringsymbols
, 类型 CSSOMStringadditiveSymbols
, 类型 CSSOMStringnegative
, 类型 CSSOMStringprefix
, 类型 CSSOMStringsuffix
, 类型 CSSOMStringrange
, 类型 CSSOMStringpad
, 类型 CSSOMStringspeakAs
, 类型 CSSOMStringfallback
, 类型 CSSOMString-
剩余的属性在获取时必须返回一个
CSSOMString
对象, 该对象包含与该规则关联的描述符的序列化结果。 如果关联规则中未指定描述符, 该属性必须返回空字符串。在设置时,执行以下步骤:
10. HTML 示例样式表
本节为说明性内容,非规范内容。 HTML 本身定义了适用于其元素的样式, 并且在某些情况下,交由用户代理自行决定。
details > summary { display: list-item; list-style: disclosure-closed inside; } details[open] > summary { list-style: disclosure-open inside; }
变更
自 2017 年 12 月候选推荐标准以来的变更
自2017 年 12 月 14 日候选推荐标准以来的重大变更:
-
将 none、decimal、disc、circle、square、disclosure-open、disclosure-close 设置为不可重写。 (Issue 3584)
-
明确了 Shadow DOM 中的计数器样式查找规则。 (Issue 5693)
-
明确了在各种无效的 @counter-style 情况下会发生什么。 (Issue 5698, Issue 5717)
-
修复了加法算法中的除零错误。 (Issue 5784)
-
修复了 square符号,避免使用 emoji 符号。 (Issue 6200)
-
允许用户代理重写预定义符号计数器样式的字体选择。 (Issue 6201)
-
将预定义符号计数器样式的特殊渲染限制为通过list-style-type 用作列表标记。 (Issue 6201)
-
明确了speak-as 代表的是语音输出;它也可以用于其他辅助技术。 (Issue 6040)
可以构建一个视觉上含义明显的计数器样式, 但通过语音合成器或其他非视觉手段无法有意义地表示, 或者在朗读时会显得荒谬。 speak-as 描述了如何合成 使用指定计数器样式格式化的计数器的语音形式。 辅助技术应在读出计数器样式时使用这种语音形式, 并且可以使用speak-as 值来引导输出到非语音形式的转换。
提供了评论处理结果。
自 2015 年 6 月候选推荐标准以来的变更
自2015 年 6 月 11 日候选推荐标准以来的重大变更:
-
在设置 CSSCounterStyle.name 时,直接接受字符串;不将其解析为标识符。
-
澄清了计数器样式按照元素的内容语言进行读出。
-
澄清了additive-symbols 的元组必须是严格递减的权重。
-
指定了无效值仅使声明无效,而不是整个规则无效。
-
由于缺少描述符而导致无效的 @counter-style 规则仅会导致无法创建 计数器样式;它们仍然是有效规则。
-
更改了语法,使用CSS 括号范围符号 来反映对负值的文字限制。
提供了评论处理结果。
自 2015 年 2 月候选推荐标准以来的变更
-
允许用户代理将 hebrew 样式扩展到超出规范定义的限制 (因为当前的限制主要是基于通过 @counter-style 定义实现更高值的麻烦程度)。
致谢
以下人员及其编写的文档在定义编号系统时非常有用: Alexander Savenkov, Arron Eicholz, Aryeh Gregor, Christopher Hoess, Daniel Yacob, Frank Tang, Jonathan Rosenne, Karl Ove Hufthammer, Musheg Arakelyan, Nariné Renard Karapetyan, Randall Bart, Richard Ishida, Simon Montagu (Mozilla, smontagu@smontagu.org)
特别感谢 Xidorn Quan 对该规范各个方面的广泛审查, 还要感谢 Simon Sapin 和 Håkon Wium Lie 对其审查意见的贡献。
隐私和安全考虑
本规范未引入任何新的隐私或安全考虑。