HTML Ruby 标记扩展

W3C 候选推荐标准快照,

有关本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/CR-html-ruby-extensions-20260604/
最新发布版本:
https://www.w3.org/TR/html-ruby-extensions/
编辑草案:
https://w3c.github.io/html-ruby/
历史记录:
https://www.w3.org/standards/history/html-ruby-extensions/
实现报告:
https://w3c.github.io/html-ruby/implementation-report-2026-03
测试套件:
https://wpt.fyi/results/html-ruby-extensions
反馈:
GitHub
编辑:
Florian Rivoal特邀 专家

摘要

Ruby 是一种行间注释形式, 是位于基准文本旁边的短文本。 它们通常用于东亚文档中, 以标示读音或提供简短注释。

本规范修订并扩展了 HTML 为表示 Ruby 而建立的标记模型。

本文档的状态

本节描述本文档发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 标准与草案索引中找到。

本文档由国际化 工作组 按照推荐标准 流程制定为候选推荐标准快照。 本文档旨在成为 W3C 推荐标准。 本文档将至少在 之前保持候选推荐标准状态, 以确保 获得广泛审查的机会。

如需就本文档发表评论, 请发送至 www-international@w3.org订阅存档)。

作为候选推荐标准发布并不意味着 W3C 及其成员对此表示认可。 候选推荐标准快照已经过广泛审查,旨在 收集实现经验,并且工作组成员承诺为相关 实现提供免版税许可

本文档由一个依据W3C 专利政策运作的小组制定。W3C 维护了一份与该小组交付成果相关的所有专利 披露的公开列表;该页面还包含 专利披露说明。任何实际知晓某项专利,并且认为该专利 包含必要权利要求的个人, 必须按照W3C 专利政策第 6 节披露相关信息。

本文档受 2025年8月18日 W3C 流程文档管辖。

有关自上一份草案以来的变更, 请参阅变更一节。

本文档根据 W3C 与 WHATWG 之间的 HTML Ruby 标记协议条款制定。

1. 简介

本节为非规范性内容

Ruby 是对呈现在基准文本旁边的小型注释的称呼。 它尤其适用于日文及其他东亚语言内容 (Ruby 在日语中也称为 furigana)。 它最常用于提供读音(发音指南)。

Ruby 文本通常使用较小的字体, 呈现在基准文本旁边。 Ruby 这一名称源自一种命名字号, 英国排字工人曾使用这种字号 (约为普通 10 磅字体的一半大小)。

Ruby 通常用于东亚文字, 为生僻或鲜为人知的字符提供语音转写, 即读者通常不熟悉的字符 (例如供正在学习阅读的儿童或外国人使用), 或具有多个读音 且无法通过上下文确定读音的字符 (例如某些日文姓名)。 例如,它广泛用于教材和儿童读物, 但在许多类型的文学作品和标牌中也很常见。 它有时也用于传达表意字符的含义信息。

使用 Ruby 注释文本的示例:
				日语中的“新干线”一词由 3 个汉字组成,
				从左到右横向书写。
				其读音由紧邻上方的 6 个平假名字符
				标示。
				注释的字号为其所注释基准文本字号的一半。

为了描述基准文本与其注释之间的语义关联, 以及实现各种视觉布局 和正确的非视觉呈现与处理, 有必要使用本文档定义的专用标记。

注: CSS Ruby 注释布局模块 第 1 级定义了 CSS 中的 Ruby 布局模型, 从而实现上述 Ruby 呈现 以及经常需要的各种变体。

1.1. 背景以及与 HTML 标准的关系

多年来,用于标记 Ruby 的一组 HTML 元素在多份规范中不断演进, 从 2001 年的 Ruby 注释规范开始, 一直发展到当前的 HTML 标准, 各个版本在灵活性、复杂度或冗长程度方面有所不同。

尽管在简单情况下简洁而有效, 但HTML 标准 (在撰写本文档时) 所描述的 Ruby 模型表达能力不足,无法妥善处理所有用例。 此外,其某些方面也未实现互操作; 即便实现这些方面,也无法完全满足其余用例。 另外,这些方面还与 CSS 布局模型相冲突。

编写本规范的目的是促进并指导修订和扩展后的 Ruby 模型实现, 从而更全面地满足 Web 平台上的 Ruby 需求。 这项工作是在 W3C 与 WHATWG 达成协议的情况下开展的。

附录 B: 与 HTML 标准的比较总结了主要差异, 并简要概述了这些差异为何是有益的。

请注意,HTML 标准 中已实现互操作的子集的语义 在本扩展规范中保持不变, 因此此处描述的 Ruby 模型 向后兼容 现有用户代理所支持的 任何 Ruby 内容。

在本文档中, 像这样的建议块 用于说明文档的规范性部分 如何与 HTML 标准的不同部分相关并取代这些部分。

希望此处描述的变更最终 能被 WHATWG 采用, 并集成到 HTML 标准中, 从而减少两份文档之间的差异。

2. 用于 Ruby 的 HTML 元素

本节及其各小节取代并扩展 HTML § 4.5.10 ruby 元素HTML § 4.5.12 rp 元素 这些属于 HTML 标准的章节。

2.1. ruby 元素

类别
流式内容
短语内容
可感知内容
可以使用此元素的上下文
需要短语内容之处。
内容模型
见正文。
内容属性
全局属性
无障碍考虑
针对作者
针对实现者
DOM 接口
使用 HTMLElement

ruby 元素表示一个或多个短语内容范围, 并与相关联的 Ruby 注释配对。 Ruby 注释是呈现在基准文本旁边的短注释文本。 尽管主要用于东亚排版以提供发音指南, 但它们也可用于提供其他相关信息。 Ruby 最常以行间注释的形式呈现, 但也会采用其他呈现方式。 有关 Ruby 及其渲染的更完整介绍, 请参阅 W3C 的什么是 Ruby?一文 以及 CSS Ruby 注释布局模块第 1 级

此示例展示日文文本, 其中使用 Ruby 标记为表意字符标注读音。
<ruby><rb></rb><rt>きり</rt></ruby>とも<ruby><rb></rb><rt>かすみ</rt></ruby>とも

典型的渲染效果大致如下图所示:

一小段横向书写的日文文本,
					每个汉字的读音
					由其上方的小型平假名字符标示。
					每组平假名相对于其所注释的汉字
					水平居中。

注: 有关语法变体及简化形式的讨论,请参阅以下 示例

ruby 元素的内容模型由 一个或多个以下Ruby 片段序列组成:

  1. 一个或多个短语内容节点 或 rb 元素 (或两者的组合), 用于表示被注释的基准级内容 (即 Ruby 基准范围)。
  2. 一个或多个 rtrtc 元素 (或两者的组合), 用于表示与前述基准内容 相关联的任何注释, 其中每个 rtc 元素或 rt 元素序列 表示一个独立的注释层级 (即 Ruby 注释范围)。 每个注释 范围, 以及每个范围中的注释 单元, 都可以选择性地在之前、之后或其间穿插 独立的 rp 元素。 (可选的 rp 元素可用于 添加括号等呈现性内容, 在以内联形式渲染注释时可能很有用, 包括在不支持 Ruby 布局时作为回退。)

注: 为方便创作, 内部 Ruby 元素 rbrtrtcrp 具有可选的结束标签

在台湾, 中文文本的注音通常 使用注音符号(也称为 Bopomofo)。 在中国大陆, 注音通常 使用拉丁字符的拼音转写。 此示例同时提供了这两种注音:
中文中的“美”字,
					同时带有拼音和注音符号。
<ruby lang=zh-TW>
  <rb></rb><rtc><rt>ㄇㄟˇ</rt></rtc><rtc lang=zh-Latn><rt>měi</rt></rtc>
</ruby>

HTML Ruby 的某些功能允许使用更简单的标记:

实际上, 上述示例在语义上 (但在生成的 DOM 上并非如此) 等同于以下内容:

<ruby lang=zh-TW><rt>ㄇㄟˇ<rtc lang=zh-Latn>měi</ruby>

注: CSS Ruby 注释布局模块 第 1 级使作者能够 控制 HTML ruby 元素及其内容的渲染, 从而基于同一标记支持多种布局。

注音符号(Bopomofo)通常使用三种渲染样式。 (为清晰起见,此处以蓝色显示注释, 但实际使用中不会有颜色区别。)

当文本纵向书写时, 注音呈现在右侧, 沿基准文本排列:

由两个汉字组成并纵向书写的中文词语。
					每个字符的右侧
					均显示纵向书写的
					注音。

在横向书写中, 注音通常也排在右侧, 此时夹在各个基准字符之间:

由两个汉字组成的
					横向书写的中文词语。
					每个字符的右侧
					均显示纵向书写的
					注音。

不过,注音有时也会排版在 横向基准文本的上方:

由两个汉字组成的
					横向书写的中文词语。
					每个字符的上方
					均显示横向书写的
					注音。

这些差异属于样式差异, 而非语义差异, 因此使用相同的标记:

<ruby lang=zh-TW><rb><rb><rt>ㄉㄧㄢˋ<rt>ㄋㄠˇ</ruby>

2.1.1. Ruby 分段与配对

在 Ruby 元素中, 内容被划分为一系列 Ruby 片段。 忽略元素间空白rp 元素后, 每个 Ruby 片段 由以下内容组成:

在中文中,逐字注释文本也很常见。 在此示例中, 每个字符分别在其自己的 ruby 元素中进行注释:

<ruby><rt>qiān</ruby><ruby><rt></ruby><ruby><rt>zhī</ruby><ruby><rt>xíng</ruby><ruby><rt>shǐ</ruby><ruby><rt></ruby><ruby><rt></ruby><ruby><rt>xià</ruby>

一个中文短语,
				其中每个字符均用拼音音节标注读音

多个相邻的 Ruby 片段也可以合并到同一个 ruby 父元素中:

<ruby><rt>qiān</rt><rt></rt><rt>zhī</rt><rt>xíng</ruby><ruby><rt>shǐ</rt><rt></rt><rt></rt><rt>xià</ruby>

注释 配对过程将Ruby 注释单元Ruby 基准单元相关联。 在每个Ruby 片段中, 每个Ruby 基准单元 都会与来自每个Ruby 注释范围的一个Ruby 注释单元配对。 如果一个Ruby 注释范围由一个不包含 rt 元素的 rtc 元素组成, 则由其内容表示的单个Ruby 注释单元会跨越 (即与之配对) Ruby 片段中的 每个Ruby 基准单元。 否则, Ruby 注释范围中的每个Ruby 注释单元 会按顺序 与片段的Ruby 基准范围中对应的Ruby 基准单元配对。 如果Ruby 基准单元数量不足, 则任何剩余的Ruby 注释单元 会被假定为与插入在 Ruby 基准范围末尾的空假设基准相关联。 如果一个Ruby 注释范围中的Ruby 注释单元数量不足, 则剩余的Ruby 基准 单元 会被假定为没有来自该注释层级的注释。

在某些上下文中, 例如字号或行高太小, 以至于行间 Ruby 难以辨认时, 最好将 Ruby 注释内联, 使其以括号形式出现在所注释文本之后。 对于不支持 Ruby 布局的用户代理, 这也提供了一种适当的回退渲染方式。

不过, 尤其对于日语复合词, 逐字内联读音显得很不自然。 更自然的渲染方式 是将整个单词的注释 统一放置在其基准文本之后。 例如, 以内联方式排版时, 京都市(“京都市”) 应渲染为 “京都市(きょうとし)”, 而不是“京(きょう)都(と)市(し)”。 这可以使用连续的 rb 元素,后跟连续的 rt 元素来标记:

<ruby><rb><rb><rb><rt>きょう<rt><rt></ruby>

如果标记中的每个基准字符都紧接着其注释 (每个基准与注释对形成自己的片段), 则内联会产生不理想且不自然的 “京(きょう)都(と)市(し)”。

请注意,上述标记不会自动提供括号。 在有意以内联方式排版时, 可以使用 CSS 生成内容插入括号; 但当不支持 Ruby 的用户代理 自动从行间布局回退到内联布局时, 这些括号会缺失。 可以插入 rp 元素, 以便在不支持 Ruby 时提供适当的标点:

<ruby><rb><rb><rb><rp><rt>きょう<rt><rt><rp></ruby>

2.1.2. 多字符 Ruby 的标记模式

本节为非规范性内容

在最简单的示例中, 每个Ruby 基准单元 仅包含一个字符, 这是逐字注音经常使用的模式。 不过,Ruby 基准单元 并不限于 只包含一个字符。 在某些情况下, 可能无法将注释分别映射到各个基准字符, 此时注释可能需要共同应用于一组字符。

例如, 日语中的“今天”写作“今日”, 字面意思是“今”加“日”。 但其读音为“きょう”(kyō), 无法拆分为 对应“今”的部分 和对应“日”的部分。

因此,标示“今日”读音的 Ruby 应按以下方式标记:

<ruby>今日<rt>きょう</ruby>
“きょう”注释“今日”
Ruby 还可以用于说明基准文本的含义, 而不是说明读音(或除读音之外还说明含义)。 在这种情况下, 基准文本和注释 通常都由多个字符组成, 无法进行有意义的细分。

此处,一个复合表意词 使用源自英语的同义词 (以片假名书写) 作为注释:

<ruby>境界面<rt>インターフェース</ruby>
“インターフェース”注释“境界面”

此处,一个复合表意词 直接使用其英语对应词 作为注释:

<ruby lang="ja">編集者<rt lang="en">editor</ruby>
“editor”注释“編集者”

在复合词中, 尽管注音可能分别对应单个字符, 但有时仍会将它们排版为共同占用基准文本上方的空间, 其渲染方式类似于多字符基准上的注释。 不过,它们的渲染存在细微差别, 因此既需要编码复合词内部的配对关系, 也需要标识其作为一个单词。 此外,以这种方式共享空间, 还是将每一对分别渲染在自己的视觉“列”中,属于样式偏好: 标记需要提供足够的信息,以支持两种渲染方式 (以及正确的内联)。

在此示例中, 我们将使用日语名词“浄瑠璃”(jōruri), 它是一种日本传统叙事音乐形式。 其中各字符的读音分别为“じょう”、“る”和“り”。 (为清晰起见,这些示例使用不同颜色: 实际使用中不会有颜色区别。)

此类复合词可以 将注音逐个放置在每个字符上方进行渲染。 采用这种样式时, 如果注释在视觉上比其所注释的字符更长, 周围文本会被推开, 以清楚表明每个字符与其注释之间的对应关系。

以横向日文书写的“Jōruri”,
					三个字符上方均带有注音。
					第一个与第二个字符彼此分开,
					因为第一个字符上方的注释过长,无法容纳。

不过, 在各种排版传统中, 通常会让此类词语的注释共同共享空间, 以避免基准文本原本会出现的分隔, 从而保留其为一个完整单词的含义。 这种样式称为“熟语 Ruby” (“jukugo”意为“复合词”)。

以横向日文书写的“Jōruri”,
					词语上方带有注音。
					每条注释中的字符并未与
					相应的基准字符对齐,
					而是作为整体与整个词语对齐。

不过,即使以“熟语 Ruby”形式呈现, 注释也并不总是合并。 如果单词中间发生换行, 注释仍应与正确的基准字符保持关联。

以横向日文书写并跨两行断开的“Jōruri”。
					显示在词语上方的注音
					与各个基准字符配对,
					并随其一起换行。

注释是否合并以及合并程度可以有所不同, 并且可能取决于字号。 下图展示了多种可能性中的两种: 一种是在“熟语 Ruby”中,将比其基准更宽的注释 与相邻注释合并, 但不一定合并全部注释; 另一种是在任一注释比其基准更宽时, “熟语 Ruby”就合并所有注释。 本规范不强制规定任何特定布局; 这属于 CSS 等样式技术的范畴。

以横向日文书写的“Jōruri”,
					三个字符上方均带有注音。
					当注释字号为基准字号的 33% 时,
					注释足够小,可以容纳在对应基准字符上方,
					并与其对齐。
Ruby 字号为 33%:当每条注释都能适应其基准时,无需合并
以横向日文书写的“Jōruri”,
					三个字符上方均带有注音。
					当注释字号为基准字号的 50% 时,
					第一条注释无法容纳在对应基准字符上方,
					因此与第二条注释合并。
					第三条注释保持独立。
Ruby 字号为 50%,变体 1:仅将较宽注释与相邻注释合并
以横向日文书写的“Jōruri”,
					三个字符上方均带有注音。
					当注释字号为基准字号的 50% 时,
					第一条注释无法容纳在对应基准字符上方,
					因此三条注释全部合并并共同对齐。
Ruby 字号为 50%,变体 2:任一注释无法适应其基准时即合并所有注释
以横向日文书写的“Jōruri”,
					三个字符上方均带有注音。
					当注释字号为基准字号的 60% 时,
					第一条注释无法容纳在第一个字符上方,
					前两条注释合在一起也无法容纳在前两个字符上方。
					因此三条注释全部合并并共同对齐。
Ruby 字号为 60%:两种变体都需要合并

无论样式技术提供哪些渲染变体, 同一套标记都需要包含足够的信息,以支持任何样式, 因为是否渲染为“熟语 Ruby”及其变体属于样式选择。 标记既需要编码词语内部的配对信息, 也需要编码将这些配对作为一个单词进行分组的信息:

<ruby><rb><rb><rb><rt>じょう<rt><rt></ruby>

如果所有基准字符都属于单个 rb 元素, 并且所有注释文本都属于单个 rt 元素, 则无法正确实现“熟语 Ruby”, 因为各自的配对关系会丢失。

注: 有关日文和中文 Ruby 用法与渲染的更多详细信息, 请参阅 日文排版需求 日本語組版処理の要件(日本語版) (尤其是 Ruby 与着重号附录 F)、 日文 Ruby 简单放置规则, 以及 中文排版需求中关于行内注释的章节。

2.2. rb 元素

类别
无。
可以使用此元素的上下文
作为 ruby 元素的子节点。
内容模型
短语内容
内容属性
全局属性
DOM 接口
使用 HTMLElement

rb(“Ruby 基准”)元素 在其为 ruby 元素的子节点时 表示一个Ruby 基准单元: 基准级文本中的一个单一组成部分, 由与其配对的一个或多个 Ruby 注释进行注释。

不作为 ruby 元素子节点的 rb 元素, 表示与其子节点相同的内容。

未使用 rb 元素时,基准是隐式的:
<ruby>基准<rt>注释</ruby>

也可以显式指定该元素:

<ruby><rb>基准<rt>注释</ruby>

这两种标记模式具有相同的语义。 显式的 rb 元素可能有助于设置样式, 并且在标记连续基准与连续注释的配对时是必需的 (例如, 表示复合词时; 请参阅上文的京都市内联熟语 Ruby示例)。

2.3. rt 元素

类别
无。
可以使用此元素的上下文
作为 rubyrtc 元素的子节点。
内容模型
短语内容
内容属性
全局属性
无障碍考虑
针对作者
针对实现者
DOM 接口
使用 HTMLElement

rt(“Ruby 文本”)元素 ruby 元素的子节点, 或者是 rtc 元素的子节点,而该元素本身又是 ruby 元素的子节点时, 表示一个Ruby 注释单元: 对与其配对的Ruby 基准单元所作的单一注释。

不作为 ruby 元素子节点, 也不作为 rtc 元素子节点,且该 rtc 元素本身并非 ruby 元素子节点的 rt 元素, 表示与其子节点相同的内容。

2.4. rtc 元素

类别
无。
可以使用此元素的上下文
作为 ruby 元素的子节点。
内容模型
短语内容或一系列 rt 元素; 可以选择性地在之前、之后或其间穿插独立的 rp 元素。
内容属性
全局属性
DOM 接口
使用 HTMLElement

rtc (“Ruby 文本容器”)元素 在其为 ruby 元素的子节点时 表示一个注释层级 (即一个Ruby 注释 范围), 用于前面的Ruby 基准单元序列 (即其 Ruby 基准范围)。

注: 在简单情况下, 可以省略 rtc 元素, 因为连续的 rt 元素 会隐式形成一个Ruby 注释范围。 不过,为了将多个注释层级 与单个Ruby 基准 范围相关联, 仍然需要使用这些元素, 例如同时提供语音和语义信息、 使用不同文字提供语音信息, 或使用不同语言提供语义信息。

在此示例中, 日语复合词“上手”(“擅长”) 同时具有假名和罗马字两种注音, 并保持了与基准字符的配对 以及注释分组信息。
“上手”(擅长)同时带有假名和罗马字注释

以下标记实现了这一效果:

<ruby><rb><rb><rt>じよう<rt><rtc><rt>jou<rt>zu</ruby>

注: 作为 rtc 元素直接子节点的文本 会隐式表示一个Ruby 注释单元, 如同该文本包含在 rt 元素中一样, 但该注释会跨越片段中的所有基准。

在此示例中,旧金山的中文名称 (旧金山,即“old gold mountain”) 同时使用拼音标示读音, 并以原始英文名称作为注释。
旧金山的中文名称,
					同时带有拼音和原始英文名称注释。

其标记如下:

<ruby><rb><rb><rb><rt>jiù<rt>jīn<rt>shān<rtc>San Francisco</ruby>

此处,一个包含三个基准字符的单一基准序列 在第一个(隐式)容器中 使用三个拼音 Ruby 文本片段进行注释, 并引入一个 rtc 元素, 以提供第二个单一 Ruby 注释, 即该城市的英文名称。

不作为 ruby 元素子节点的 rtc 元素, 表示与其子节点相同的内容。

2.5. rp 元素

类别
无。
可以使用此元素的上下文
作为 rubyrtc 元素的子节点, 并且紧邻一个 rtc 元素或一个Ruby 注释单元的前面或后面。
内容模型
文本
内容属性
全局属性
无障碍考虑
针对作者
针对实现者
DOM 接口
使用 HTMLElement

rp(“Ruby 括号”)元素不表示任何内容。 它用于在Ruby 注释单元周围提供呈现性内容 (例如括号), 以便在不使用 Ruby 专用布局 而以内联方式呈现 Ruby 内容时显示。 这种情况可能发生在使用不支持 Ruby 布局的用户代理时, 也可能出于样式原因。 在典型的 Ruby 布局中, 它不会显示。

在此示例中, 文本 漢字 中的每个表意字符 均带有其语音读音注释。 此外,它使用 rp, 使旧式用户代理中的读音显示在括号中:
...<ruby><rb><rp><rt>かん<rt><rp></ruby>...

在支持 Ruby 布局的用户代理中, 渲染会省略括号; 而在不支持 Ruby 布局的用户代理中,渲染结果如下:

...漢字(かんじ)...
此处是一个人为构造的示例, 使用双侧注释 为一些符号提供英语和法语名称, 同时也使用 rp 元素:
<ruby>
  <rb><rp>: <rt>Heart<rp>, <rtc lang=fr>Cœur</rtc><rp>.</rp>
  <rb><rp>: <rt>Shamrock<rp>, <rtc lang=fr>Trèfle</rtc><rp>.</rp>
  <rb><rp>: <rt>Star<rp>, <rtc lang=fr>Étoile</rtc><rp>.</rp>
</ruby>

在不支持 Ruby 的用户代理中,此示例将渲染如下:

♥: Heart, Cœur. ☘: Shamrock, Trèfle. ✶: Star, Étoile.

3. 可选标签

本节扩展 HTML § 13.1.2.4 可选标签一节,该节属于 HTML 标准; 本节替换其中关于 rtrp 的段落, 并为 rbrtc 增加两个段落。

如果 rb 元素紧接着 rbrtrtcrp 元素, 或者父元素中已无更多内容, 则可以省略 rb 元素的结束标签

如果 rt 元素紧接着 rbrtrtcrp 元素, 或者父元素中已无更多内容, 则可以省略 rt 元素的结束标签

如果 rtc 元素紧接着 rbrtc 元素, 或者父元素中已无更多内容, 则可以省略 rtc 元素的结束标签

如果 rp 元素紧接着 rbrtrtcrp 元素, 或者父元素中已无更多内容, 则可以省略 rp 元素的结束标签

4. 渲染

本节补充了 HTML § 15.3 非替换元素一节,该节属于 HTML 标准; 尤其补充了其中的 HTML § 15.3.4 短语内容小节, 但以下规则除外: rp { display: none; } 规则, 该规则属于 HTML § 15.3.1 隐藏元素小节。

注: HTML § 15.3.4 短语内容还包含关于 Ruby 的其他要求; 本规范并未覆盖或使其失效, 这些要求仍然适用。

以下规则被添加到 HTML 用户代理样式表中:

ruby { display: ruby; }
rb { display: ruby-base; white-space: nowrap; }
rbc { display: ruby-base-container; } /* 用于兼容受 XHTML 启发的标记 */
rp { display: none; }
rt { display: ruby-text; }
rtc { display: ruby-text-container; }
ruby, rb, rbc, rt, rtc { unicode-bidi: isolate; }
rtc, rt {
  font-variant-east-asian: ruby;
  text-emphasis: none;
  white-space: nowrap;
  line-height: 1;
}
rtc, :not(rtc) > rt {
  font-size: 50%;
}
rtc:lang(zh-TW), :not(rtc) > rt:lang(zh-TW) {
    font-size: 30%;
  }

5. 符合性功能

尽管 rbrtc 被列入 HTML § 16.2 不符合性功能中 “完全过时”且“作者不得使用”的元素列表, 但本规范撤销了这种过时状态, 并将这两个元素视为完全符合标准。

6. 交互

本节为非规范性内容

[HTML] 定义了页内查找操作及其常规机制, 但并未定义 如何从查询中确定匹配项的确切方式。 各种 HTML 用户代理还支持 window.find() API, 但在撰写本文档时,它尚无规范性定义, 如何确定特定搜索字符串 是否与文档匹配的具体方式 也仍未定义。

因此,本规范不尝试定义 文本搜索与 Ruby 交互时的规范性行为。 不过,可以指出一些一般性的用户预期, 建议用户代理在实现此类功能时 考虑这些预期。

对于以下任意一种标记模式, 用户搜索“東京”或“とうきょう”时, 通常都希望能够找到匹配项。
<ruby><rb><rb><rt>とう<rt>きょう</ruby>に行く。
<ruby><rb><rt>とう<rb><rt>きょう</ruby>に行く。
<ruby><rb><rb><rp><rt>とう<rt>きょう<rp></ruby>に行く。

这种预期不仅存在于单独搜索该词语时, 也存在于结合周围文本进行搜索时, 例如搜索“東京に行く” 或“とうきょうに行く”, 用户通常也希望这些查询能够匹配。

注: 有关文本搜索复杂性的其他考虑, 另请参阅 [string-search]

6.2. 复制与粘贴

本节为非规范性内容

Web 平台并未精确定义 复制与粘贴剪贴板操作的细节。 尤其是,尽管剪贴板通常同时支持结构化文本和纯文本, 但如何在两者之间进行转换, 以及复制时如何将文档内容提取到剪贴板中, 通常都没有定义。

因此,本规范不尝试定义 剪贴板与 Ruby 交互时的规范性行为。 不过,可以指出一些一般性的用户预期, 建议用户代理在实现此类功能时 考虑这些预期。

附录 A: 对 HTML 的编辑性调整

本节为非规范性内容

除了本规范正文中的规范性陈述外, 本节详细说明了其他适宜的编辑性变更, 这些变更应应用于 HTML 标准, 以使其与此处涵盖的内容完全一致。

附录 B: 与 HTML 标准的比较

本节为非规范性内容

注: 此比较基于撰写本文档时 HTML 标准的状态。 如果 HTML 标准采纳了此处描述的部分或全部 变更, 或以其他方式改进了对 Ruby 的处理, 本节预计会相应更新, 但更新可能会有所延迟。

尽管本规范重新引入了此前已过时的 rbrtc 元素, 但并未对 HTML § 13.2 解析 HTML 文档进行任何更改: 这些元素已在该处得到处理, 包括其可选的结束标签。

不过,各种 Ruby 相关元素的使用方式存在差异, 其中两个主要差异是:

  1. 除了可以在匿名 Ruby 基准之间穿插 rt 元素外, 此前已过时的 rb 元素也被恢复, 从而支持所谓的 表格式标记模式, 在这种模式中,多个连续的基准之后 跟随各自对应的注释:
    <ruby>
      <rb><rb><rb><rt><rt><rt></ruby>
    

    如果没有 rb表格式标记, 为了具备正确处理 复合词上各种可能的 Ruby 呈现方式 所需的各个基准与注释配对关系, 就必须在各段基准文本之间 穿插 rt 元素。 不过,这种标记无法实现正确的 Ruby 内联

    此外,穿插式标记还会给 复制与粘贴、 文档搜索 或语音合成等操作带来问题, 因为基准文本会被注释打断。 对于搜索, 用户代理可以缓解这一问题, 但在较简单的用户代理中, 以及搜索以外的其他操作中, 这一问题仍然存在。

  2. 本文档定义了另一种处理多个注释层级的模型:
    • 不再允许在不使用显式注释容器的情况下, 将多个连续的 rt 元素 与前面的基准文本片段相关联。 这种模式没有按照 HTML 标准预期语义 实现互操作, 并且与表格式标记存在冲突。

      作为替代,此前已过时的 rtc 元素被恢复, 从而可以在同一个或多个基准上标示多个注释范围, 并可使用穿插式或表格式标记模式。

    • 尽管仍保留嵌套 Ruby 的能力, 但删除了嵌套 Ruby 的专门语义。 与使用 rtc 表示额外注释层级相比, 这种标记模式的表达能力严格更弱, 因为它无法将外层 Ruby 中的单个注释 与内层 Ruby 中的单个基准配对。 因此,关于“上手”的示例 可以使用 rtc 实现, 但无法使用嵌套 Ruby 实现。

      HTML 标准中定义的嵌套 Ruby 除普通嵌套语义外, 也没有实现互操作, 并且与 CSS Ruby 注释布局模块第 1 级的布局模型相冲突。

fantasai 的一篇2011 年博客文章 更详细地解释了 这些要求以及由此产生的设计选择。

附录 C: 安全考虑

本节为非规范性内容

本规范没有已知的安全影响。

附录 D: 隐私考虑

本节为非规范性内容

本规范没有已知的隐私影响。

附录 E: 无障碍考虑

本节为非规范性内容

由于 Ruby 主要用作发音指南, 它本身就是一种面向无障碍的功能, 使具有不同读写能力水平的读者 能够阅读原本可能难以理解或无法阅读的内容。 在这种用法中,Ruby 可帮助 正在学习阅读的儿童或非母语人士、 具有各种学习障碍或其他认知障碍的人, 以及来自弱势背景、受教育程度有限的人……

制定本扩展规范的一个关键动机 是认识到 Ruby 用法的多样性, 以及用户和相应预期的多样性, 并确保可用的标记模式 能够提供必要的结构信息, 以适应不同情况。

阅读障碍人士可能会发现,同一内容的不同视觉呈现 具有不同程度的可读性。 在众多变体中, 有些人可能更喜欢让 Ruby 注释使用不同颜色, 与其所注释的字符之间保留一定间距, 或显示为内联括号内容, 以便更容易将它们与所注释的文本区分开来。 同样,教育场景中的使用也可能需要多种呈现变体。 尽管本规范不直接涵盖视觉布局, 但此处定义的标记模式 特意设计为使作者能够 表达与 Ruby 注释相关的结构信息, 从而可由 CSS 等样式语言利用这些信息, 提供符合用户需求和偏好的各种呈现方式, 而无需为此更改或损害标记。 请参阅 [CSS-RUBY-1]

视力有限或完全失明的人 通常依赖屏幕阅读器等工具, 为文档提供替代或补充的音频呈现。 HTML Ruby 标记以及相应的文本转语音问题 早于本规范出现, 本规范既未引入也未解决这些问题。 本扩展规范承认, Ruby 的不同用法 可受益于不同的音频渲染方式, 但由于本规范专注于推进问题的其他方面, 因此未引入任何满足这一需求的新机制。 这一重要考虑预计将由后续工作解决。 与此同时,建议 HTML 用户代理和屏幕阅读器考虑使用启发式方法, 以确定最有帮助的文本转语音渲染方式。 (有关日语中的常见模式 和文本转语音预期的讨论, 请参阅 [RUBY-TTS-REQ]。)

附录 F: 致谢

本节为非规范性内容

本文档源自多个来源(这些来源在某种程度上也相互借鉴)。 我们谨向所有这些来源的贡献者表示感谢,尤其包括:

此外, 如果没有 国际化工作组参与者 提供的专家意见、 多年研究 以及大量文档, 这一切都不可能实现, 尤其包括:

附录 F: 变更

本节为非规范性内容

自 2024年5月7日工作草案以来的变更

2024年5月7日 工作草案以来的重大变更:

自 2014年2月4日《W3C HTML Ruby 标记扩展》工作组说明以来的变更

此处描述的标记模型 与 2014 年工作组说明建立的模型 基本相同, 但描述该模型的文本 以及示例 已经过大幅重写。

2014 年工作组说明中提出的解析 变更 不再于此讨论, 因为这些变更此后已被 HTML 标准采纳。

附录 G: 候选推荐标准退出标准

要使本规范晋升为提议推荐标准, 每项功能必须至少有两个 独立且 可互操作的 实现。 每项功能可以由 不同的一组产品实现, 并不要求 所有功能都由单个产品实现。 就此标准而言, 我们定义以下术语:

独立
每个实现必须由不同的组织开发, 并且不得共享、复用或派生自 另一个符合条件的实现所使用的代码。 与本规范的实现无关的代码部分 不受此要求约束。
可互操作
通过官方测试套件中相应的测试用例。
实现
满足以下条件的用户代理:
  1. 实现本规范。
  2. 可供公众使用。 该实现可以是正式发布的产品, 也可以是其他公开可用的版本 (即 Beta 版本、预览版本或“每日构建版”)。 非正式发布的产品版本必须已经实现相关功能 至少一个月,以证明其稳定性。
  3. 不是实验性的 (即不是专门为通过测试套件而设计, 且不打算在今后用于正常用途的版本)。

本规范将保持候选推荐标准状态 至少 28 天。

符合性

文档 约定

符合性要求通过 描述性断言 与 RFC 2119 术语的组合来表达。 本文档规范性部分中的关键词“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、 “MAY”和“OPTIONAL” 应按照 RFC 2119 中所述的方式解释。 不过,为了便于阅读, 本规范中的这些词并非全部使用大写字母。

除明确标记为非规范性的章节、示例和注释外, 本规范的所有文本均为规范性内容。[RFC2119]

本规范中的示例以“例如”等词语引入, 或使用 class="example" 与规范性文本分隔, 如下所示:

这是一个资料性示例。

资料性注释以“注”一词开头, 并使用 class="note" 与规范性文本分隔, 如下所示:

注:这是一条资料性注释。

符合要求的 算法

算法中以祈使语气表述的要求 (例如“去除所有前导空格字符” 或“返回 false 并中止这些步骤”) 应按照引入该算法时所使用的关键词 (“必须”、“应该”、“可以”等) 的含义进行解释。

以算法或具体步骤表述的符合性要求 可以采用任何方式实现, 只要最终结果等效即可。 特别是,本规范中定义的算法 旨在易于理解, 而非追求高性能。 建议实现者进行优化。

索引

本规范定义的 术语

通过引用定义的 术语

参考文献

规范性参考文献

[HTML]
Anne van Kesteren;等。HTML 标准。 现行标准。URL:https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner。用于在 RFC 中 表示要求级别的关键词。1997年3月。当前最佳实践。URL:https://datatracker.ietf.org/doc/html/rfc2119

非规范性参考文献

[CLREQ]
Fuqiao Xue;Richard Ishida。中文文本 排版需求 - 中文排版需求。2026年5月3日。工作组说明草案。URL:https://www.w3.org/TR/clreq/
[CSS-DISPLAY-4]
Elika Etemad;Tab Atkins Jr.。CSS Display 模块第 4 级。2025年11月6日。工作草案。URL:https://www.w3.org/TR/css-display-4/
[CSS-RUBY-1]
Elika Etemad;等。CSS Ruby 注释布局模块 第 1 级。2022年12月31日。工作草案。URL:https://www.w3.org/TR/css-ruby-1/
[JLREQ]
Hiroyuki Chiba;等。日文文本排版需求 日本語組版処理の要件(日本語版)。2020年8月11日。工作组说明。URL:https://www.w3.org/TR/jlreq/
[QA-RUBY]
Richard Ishida。什么是 Ruby?。 URL:https://www.w3.org/International/questions/qa-ruby
[RUBY]
Marcin Sawicki;等。Ruby 注释。2001年5月31日。 推荐标准。URL:https://www.w3.org/TR/ruby/
[RUBY-TTS-REQ]
Makoto Murata。包含 Ruby 的电子 文档的文本转语音渲染:用户需求。2026年4月25日。工作组说明草案。URL:https://www.w3.org/TR/ruby-tts-req/
[SIMPLE-RUBY]
Florian Rivoal;Atsushi Shimono;Richard Ishida。日文 Ruby 简单放置规则。2020年6月9日。首份公开工作草案。URL:https://www.w3.org/TR/simple-ruby/
Addison Phillips。字符串搜索。2025年1月7日。 工作组说明草案。URL:https://www.w3.org/TR/string-search/
[UNIFIED-RUBY]
Elika J. Etemad。迈向统一的 Ruby 模型。URL:https://fantasai.inkedblade.net/weblog/2011/ruby/