CSS 文本模块第 3 级

W3C 候选推荐标准草案

关于此文档的更多细节
此版本
https://w3org.cn/TR/2024/CRD-css-text-3-20240930/
最新发布版本
https://w3org.cn/TR/css-text-3/
编辑草案
https://drafts.csswg.org/css-text-3/
历史版本
历史
https://w3org.cn/standards/history/css-text-3/
实现报告
https://test.csswg.org/harness/results/css-text-3_dev/grouped/
测试套件
http://test.csswg.org/suites/css3-text/nightly-unstable/
https://wpt.fyi/results/css/css-text/
反馈
CSS 工作组问题仓库
编辑
Elika J. Etemad / fantasai (Apple)
特邀专家
Florian Rivoal特邀专家
建议编辑此规范
GitHub 编辑器
测试覆盖率分析
https://drafts.csswg.org/css-text-3/test-coverage

摘要

本 CSS 模块定义了用于文本操作的属性并规定了其处理模型。它涵盖了断行、两端对齐与对齐方式、空白符处理以及文本转换。

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

关于本文档

本部分描述了本文档在发布时的状态。当前 W3C 出版物列表及本技术报告的最新版本可在 W3C 技术报告索引(https://w3org.cn/TR/)中找到。

本文档由 CSS 工作组候选推荐标准草案的形式发布,遵循 推荐标准轨道。作为候选推荐标准发布并不意味着 W3C 及其成员的认可。候选推荐标准草案整合了前一个候选推荐标准中的变更,工作组打算将其包含在随后的候选推荐标准快照中。

这是一份草案文档,可能会随时被其他文档更新、替换或废弃。将其作为非进行中工作引用是不恰当的。

请通过 在 GitHub 提交 issue(推荐)来发送反馈,并在标题中包含规范代码“css-text”,例如:“[css-text] …评论摘要…”。所有 issue 和评论均已 存档。或者,也可以将反馈发送至(存档的)公共邮件列表 www-style@w3.org

本文档受 2023 年 11 月 3 日版 W3C 流程文档管辖。

本文档由在一个受 W3C 专利政策约束下运作的团体编写。W3C 维护着一份与该团体交付成果相关的专利披露公开列表;该页面还包含了披露专利的说明。任何知晓其认为包含 必要权利要求 (Essential Claim(s)) 的个人,必须根据 W3C 专利政策第 6 节披露相关信息。

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

“风险(At-risk)”是 W3C 流程中的术语,并不一定意味着该特性面临被删除或推迟的危险。这表示工作组认为该特性可能难以及时实现互操作,将其标记为此类允许工作组在转向“建议推荐标准(Proposed Rec)”阶段时,在必要的情况下删除该特性,而无需先发布一个不包含该特性的新“候选推荐标准(Candidate Rec)”。

1. 简介

本模块描述了 CSS 的排版控制;即 CSS 中控制从源文本到已格式化、已换行文本转换的功能。各种 CSS 属性提供了对 大小写转换空白符折叠文本换行断行规则断字对齐与两端对齐间距 以及 缩进 的控制。

注意:字体选择在 CSS 字体模块 中介绍。[CSS-FONTS-3]

用于装饰文本的功能,例如 下划线着重号阴影(此前属于本模块)现已包含在 CSS 文本装饰模块 中。[CSS-TEXT-DECOR-3]

双向垂直 文本在 CSS 书写模式模块 中处理。[CSS-WRITING-MODES-4]

关于世界各地各种语言和书写系统的排版要求,更多信息可在 国际化工作组语言支持索引 (Language Enablement Index) 中找到。[TYPOGRAPHY]

1.1. 模块交互

本模块与 CSS 文本装饰模块 一起,取代并扩展了 层叠样式表 2 级 第 16 章 中定义的文本级功能。[CSS-TEXT-DECOR-3] [CSS2]

除了下面定义的术语外,本规范中使用的其他术语和概念也在 层叠样式表 2 级CSS 书写模式模块 中定义。[CSS2][CSS-WRITING-MODES-4]

1.2. 值定义

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

除了定义中列出的属性特定值外,本规范中定义的所有属性也都接受 CSS 全局关键字 作为其属性值。为了可读性,未明确重复列出。

1.3. 语言与排版

作者应准确标记内容语言以获得最佳排版效果。

许多排版效果因语言环境而异。语言和书写系统约定会影响断行、断字、两端对齐、字形选择以及许多其他排版效果。在 CSS 中,特定于语言的排版调整仅在 内容语言 已知(声明)时应用。因此,高质量的排版要求作者向用户代理 (UA) 传达文档中文本的正确语言环境。

元素的 内容语言 是根据 文档语言 规则声明该元素所属的(人类)语言。请注意,元素的 内容语言 可能是未知的——例如,未标记的内容,或在不具备语言标记功能的 文档语言 中的内容,被视为具有未知的 内容语言

注意:作者可以使用 HTML 中的全局 lang 属性或 XML 中的通用 xml:lang 属性来声明 内容语言。参见 HTML 中的 确定 HTML 元素内容语言的规则,以及 XML 1.0 中的 确定 XML 元素内容语言的规则[HTML] [XML10]

元素所声明的 内容语言 同时标识了该元素中使用的该语言的具体书写形式,即 内容书写系统。根据 文档语言 标识 内容语言 的机制,此信息可以是显式的或隐式的。参见规范性 附录 F:标识内容书写系统

注意:某些语言拥有不止一种书写系统传统;在其他情况下,语言可以被转写到外来书写系统中。作者应 标注子标签 以便 UA 进行适当的适应。

例如,韩语 (ko) 可以用谚文 (-Hang)、汉字 (-Hani) 或混合形式 (-Kore) 书写。仅用汉字书写的历史文献不使用词间空格,其格式更类似于现代中文而非现代韩语。换句话说,出于排版目的,ko-Hani 的行为更类似于 zh-Hant 而非 ko (ko-Kore)。

另一个例子是日语 (ja),通常以平假名 (-Hira)、片假名 (-Kana) 和汉字 (-Hani) 的组合 (-Japn) 书写。然而,它也可以为了语言学习教材等特殊目的“罗马化”为拉丁字母 (-Latn),在这种情况下,它的格式应该更像英语而不是日语。

第三个例子是当代蒙古语,它以两种脚本书写:西里尔字母 (-Cyrl,官方在蒙古国使用) 和传统蒙古文 (-Mong,在中国内蒙古地区更为常见)。它们具有非常不同的排版要求,西里尔文的行为类似于拉丁字母和希腊字母,而传统蒙古文则同时衍生自阿拉伯和中文的书写约定。

1.4. 字符与字母

排版的基本单位是 字符。然而,由于书写系统并不总是像基础的英语字母表那样简单,什么是 字符 实际上取决于使用该术语的上下文。例如,在谚文(韩语书写系统)中,每个表示音节的方形符号(例如 =Han)都可以被视为一个 字符。然而,这个方形符号实际上由多个表示音素的字母组成(例如 =h, =a, =n),它们每一个也可以被视为一个 字符

对于任何给定的编码,计算机文本编码的基本单位也称为 字符,并且根据编码的不同,单个编码 字符 可能对应整个预组合的音节 字符(例如 ),对应单个音素 字符(例如 ),或对应更小的单位,例如基础字形(例如 )以及任何改变它的组合标记(例如表示送气的额外笔画)。

反过来,单个编码 字符 可以在数据流中表示为一个或多个字节;在编程环境中,一个字节有时也称为一个 字符

因此,当需要技术精度时,字符 一词是相当模糊的。

对于文本布局,我们将 排版字符单位 称为文本的基本单位。即使在文本布局领域,相关的 字符 单位也取决于具体操作。例如,断行和字间距对于包含 U+0E33 ำ THAI CHARACTER SARA AM 的泰语字符序列的分割方式会有所不同;或者像天城体这样脚本中的结合辅音的行为可能取决于所使用的字体。因此 排版字符 代表书写系统的一个单位——例如拉丁字母(包括其变音符号)、谚文音节、中文字符、缅甸语音节簇——它在特定的排版操作(断行、首字效果、跟踪、对齐、垂直排列等)中是不可分割的。

Unicode 标准附件 #29:文本分割 定义了一个称为 字素簇 的单位,它近似于 排版字符[UAX29] UA 必须使用 UAX29 中定义的 扩展字素簇(而非 传统字素簇)作为其 排版字符单位 的基础。然而,UA 应根据排版传统的要求定制定义,因为默认规则并不总是恰当或理想的——并且预期会根据操作的需要进行不同的定制。

注意:此类定制的规则超出了 CSS 的范围。

以下是标准排版实践中所需的一些 排版字符单位 定制示例

排版字母单位(或本规范目的下的 字母)是属于字母或数字 通用类别 之一的 排版字符单位。参见 附录 E:字符与属性 以了解如何确定 排版字符单位 的 Unicode 属性。

被元素边界分割的 排版字符单位 的渲染特性是未定义的。理想情况下,每个组件应根据其各自元素属性的排版要求进行渲染,同时保持整个 排版字符单位 的正确成型和定位。然而,取决于其各部分格式差异的性质以及所使用字体技术的能力,这并不总是可能的。因此,这样的 排版字符单位 可能会被渲染为属于边界的任一侧,或属于两侧的某种近似。作者需注意,通过元素边界分割 字素簇 或连字可能会产生不一致或不理想的结果。

1.5. 文本处理

CSS 构建于 Unicode 之上。[UNICODE] 支持 Unicode 的 UA 必须遵守 Unicode 核心标准的所有规范性要求,除非 CSS 明确覆盖。基于非 Unicode 文本编码模型实现的 UA 仍应通过假设适当的映射和类似行为来满足相同的文本处理要求。

出于确定文本处理(如空白符处理、文本转换、断行等)中相邻性的目的,因此在本规范中,介于中间的 行内盒 边界和 流外 元素必须被忽略。然而,关于文本成型,参见 § 7.3 元素边界间的字形成型

2. 文本转换

2.1. 大小写转换:text-transform 属性

名称text-transform
none | [capitalize | uppercase | lowercase ] || full-width || full-size-kana
初始值 none(无)
应用于 text
可继承
百分比 不可用
计算值 指定关键字
规范顺序 不可用
动画类型 离散 (discrete)

此属性为了样式目的转换文本。它对底层内容没有影响,且不得影响纯文本复制与粘贴操作的内容。

作者不得为了语义目的依赖 text-transform;正确的拼写和语义应编码在源文档的文本和标记中。

值的含义如下:

none(无)
无效果。
capitalize
将每个单词的第一个 排版字母单位(如果是小写)转换为标题格式;其他字符不受影响。
大写
将所有 字母 转换为大写。
小写
将所有 字母 转换为小写。
full-width
将所有 排版字符单位 转换为 全角 形式。如果字符没有对应的 全角 形式,则保持原样。此值通常用于将拉丁字母和数字排版为好像它们是表意字符一样。
full-size-kana
将所有 小假名 字符转换为等效的 全角假名。此值通常用于注音(ruby)文本,作者可能希望所有小假名以大假名显示,以补偿通常用于注音的小字号带来的易读性问题。
以下示例将日语文本中缩写使用的 ASCII 字符转换为其全角变体,以便它们像表意文字一样进行布局和断行
abbr:lang(ja) { text-transform: full-width; }

注意:text-transform 的目的是允许进行呈现性的大小写转换,而不影响文档的语义。特别要注意的是,text-transform 的大小写转换操作是有损的,并且可能扭曲文本的含义。虽然辅助功能界面可能希望将呈现文本的明显大小写传达给用户,但不能依赖转换后的文本来准确表示文档的底层含义。

在此示例中,第一行文本被大写作为视觉效果。
section > p:first-of-type::first-line {
  text-transform: uppercase;
}

此效果无法写入源文档,因为换行的位置取决于布局。此外,大写并没有反映语义区别,也不打算影响段落的阅读;因此,它属于表现层。

在此示例中,大小为正文一半的 注音 经过转换,使用常规大小的假名来代替 小假名
rt { font-size: 50%; text-transform: full-size-kana; }
:is(h1, h2, h3, h4) rt { text-transform: none; /* unset for large text*/ }

请注意,虽然这使得这些字母在小字号下更容易看清,但转换扭曲了文本:读者需要在适当的地方进行心理替换 小假名——这与阅读所有“U”看起来像“V”的拉丁铭文没有什么不同。

例如,如果对以下源文本应用 text-transform: full-size-kana,注音将读作“じゆう”(jiyū),意为“自由”,而不是“じゅう”(jū),意为“十”,这是被注音文字“十”的正确读法和含义。

<ruby><rt>じゅう</ruby>

2.1.1. 映射规则

对于 capitalize,什么构成“单词”取决于 UA;建议(但不要求)使用 [UAX29] 来确定此类单词边界。流外元素和行内元素边界不得引入 text-transform 单词边界,并且在确定此类单词边界时必须忽略它们。

注意:作者不能依赖 capitalize 来遵循特定语言的标题大小写约定(例如跳过英语中的冠词)。

UA 必须使用 Unicode 字符的完整大小写映射,包括任何条件大小写规则,定义在 Unicode 标准默认大小写算法 章节中。[UNICODE] 如果(且仅当)元素的 内容语言 根据 文档语言 规则是已知的,则还必须应用任何适当的特定语言规则。这些至少包括但不限于 Unicode 的 SpecialCasing.txt 中的特定语言规则。

例如,在土耳其语中有两个“i”,一个带点——“İ”和“i”——一个不带点——“I”和“ı”。因此,在“I”和“i”之间通常的大小写映射被替换为一组不同的映射,映射到它们各自对应的无点/带点对应项,这些在英语中是不存在的。此映射仅在 内容语言 是使用其现代拉丁语系 书写系统 书写的土耳其语(或使用土耳其语大小写规则的其他突厥语)时才会生效;在其他语言中,通常需要“I”和“i”的常规映射。因此,此规则在 Unicode 的 SpecialCasing.txt 文件中被条件化定义。

全角半角 形式的定义可在 Unicode 标准附件 #11:东亚宽度 中找到。[UAX11] 映射到 全角 形式的定义是取在 Unicode 标准附件 #44:Unicode 字符数据库Decomposition_Mapping 中带有 <wide><narrow> 标签的代码点。[UAX44] 对于 <narrow> 标签,映射是从代码点到分解(减去 <narrow> 标签),对于 <wide> 标签,映射是从分解(减去 <wide> 标签)回到原始代码点。

小假名全角假名 的映射定义在 附录 G:小假名映射 中。

2.1.2. 操作顺序

当指定了多个值且因此需要应用多种转换时,它们按以下顺序应用

  1. capitalize, uppercase, 和 lowercase
  2. full-width
  3. full-size-kana

文本转换发生在 § 4.1.1 第一阶段:折叠与转换 之后,但在 § 4.1.2 第二阶段:修剪与定位 之前。这意味着 full-width 仅在 保留的 空白符 内将空格 (U+0020) 转换为 U+3000 表意文字空格。

注意:附录 A:文本处理操作顺序 中所定义,转换文本会影响断行和其他排版操作。

3. 空白符与换行:white-space 属性

名称white-space
normal | pre | nowrap | pre-wrap | break-spaces | pre-line
初始值 normal
应用于 text
可继承
百分比 不可用
计算值 指定关键字
规范顺序 不可用
动画类型 离散 (discrete)

此属性指定两件事

值具有以下含义,必须根据 空白符处理断行 规则进行解释

normal
此值指示用户代理将 空白符 序列折叠为单个字符(或 在某些情况下,无字符)。为了最小化行内轴的溢出,行可以在由当前生效的断行规则确定的允许的 软换行机会 处换行。
pre
此值防止用户代理折叠 空白符 序列。段落中断(如换行符)被保留为 强制换行符。行仅在 强制换行符 处中断;无法适应块容器的内容会溢出。
nowrap
normal 一样,此值折叠 空白符;但与 pre 一样,它不允许换行。
pre-wrap
pre 一样,此值保留 空白符;但与 normal 一样,它允许换行。
break-spaces
行为与 pre-wrap 相同,不同之处在于

注意:此值不能保证不会因空白符而产生溢出:例如,如果行长度太短,以至于连一个空白字符都无法容纳,则溢出是不可避免的。

pre-line
normal 一样,此值折叠连续的 空白字符 并允许换行,但它将源中的 段落中断 保留为 强制换行符

因空白符处理而未被删除或折叠的 空白符 称为 保留的空白符

注意:在某些情况下,保留的空白符其他空格分隔符 在行尾时可以 悬挂;这可能会影响它们是否被计入 固有尺寸计算

下表总结了各种 white-space 值的行为

新行空格与制表符文本换行行尾 空格行尾 其他空格分隔符
normal 折叠折叠折行移除悬挂
pre 保留保留不换行保留不换行
nowrap 折叠折叠不换行移除悬挂
pre-wrap 保留保留折行悬挂悬挂
break-spaces 保留保留折行折行折行
pre-line 保留折叠折行移除悬挂

关于 空白符 如何折叠的详细信息,请参阅 空白符处理规则

关于换行行为的详细信息,请参阅 断行

4. 空白符处理与控制字符

文档的源文本通常包含与最终渲染无关的格式:例如,为了方便编辑而 将源文本拆分为片段(行),或添加诸如 制表符空格 之类的 空白字符 来缩进源代码。CSS 空白符处理允许作者控制对此类格式的解释:在渲染文档时是保留还是折叠掉。CSS 中的空白符处理(通过 white-space 属性控制)仅对渲染解释 空白字符:它对底层文档数据没有影响。

注意:根据文档语言的不同,片段可以由特定的换行序列(如换行符或 CRLF 对)分隔,或由其他机制界定,如 SGML RECORD-STARTRECORD-END 标记。

对于 CSS 处理,文本中每个文档语言定义的“段落中断”或“换行序列”——如果未定义,则每个换行符 (U+000A)——均被视为一个 段落中断,随后按 white-space 属性的规定进行渲染解释。

对于 HTML,换行符 在 DOM 中表示为被 规范化 为换行符 (U+000A),因此当 HTML 文档表现为 DOM 树时,每个换行符 (U+000A) 都被视为一个 段落中断[HTML] [DOM]

注意:在大多数常见的 CSS 实现中,HTML 不会被直接设置样式。相反,它被处理成 DOM 树,然后对其设置样式。与 HTML 不同,DOM 不赋予回车符 (U+000D) 任何特殊含义,因此它们不被视为 段落中断。如果回车符 (U+000D) 是通过 HTML 解析以外的方式插入到 DOM 中的,则它们会按下面定义的方式进行处理。

注意:文档解析器不仅可以规范化任何 段落中断,还可以根据标记规则折叠其他空格字符或以其他方式处理空白符。由于 CSS 处理发生在 解析阶段之后,因此无法恢复这些字符以进行样式设置。因此,下面指定的某些行为可能会受到这些限制的影响,并且可能依赖于用户代理。

注意:完全由 可折叠 空白符 组成的匿名块会从渲染树中删除。因此,任何块级元素周围的此类 空白符 都会被折叠掉。参见 CSS 2.1 § 9.2.2.1 匿名行内盒[CSS2]

控制字符(Unicode 类别 Cc)——除制表符 (U+0009)、换行符 (U+000A)、回车符 (U+000D) 以及形成 段落中断 的序列外——必须渲染为可见字形,如果字体中找到的字形不可见,UA 必须合成一个,否则必须将其视为“其他符号 (So) 通用类别”和“通用 脚本”中的任何其他字符。UA 可以使用字体专门为控制字符提供的字形,替换控制图片块中对应符号提供的字形,生成其代码点值的视觉表示,或使用其他方法提供适当的可见字形。根据 Unicode 要求,对于文本渲染,不受支持的 Default_ignorable 字符必须被忽略。[UNICODE]

回车符 (U+000D) 在所有方面均被视为与空格 (U+0020) 相同。

注意:对于 HTML 文档,存在于源代码中的回车符在解析阶段被转换为换行符(参见 HTML § 13.2.3.5 预处理输入流 以及 Infra 中对 规范化换行符 的定义,因此它们在 CSS 中不会表现为 U+000D 回车符。[HTML] [INFRA])然而,当使用转义序列(&#x0d;)编码时,该字符 确实 被保留——并且上述规则是可观察到的。

4.1. 空白符处理规则

除非另有规定,CSS 中的空白符处理仅影响 文档空白字符空格 (U+0020)、制表符 (U+0009) 和 段落中断

注意:被视为 文档空白符(文档内容的一部分)的字符集与被视为语法空白符(CSS 语法的一部分)的字符集不一定完全相同。然而,由于两者都包含空格 (U+0020)、制表符 (U+0009) 和换行符 (U+000A),大多数作者不会注意到任何差异。

除了空格 (U+0020) 和不换行空格 (U+00A0) 之外,Unicode 定义了许多额外的空格分隔符字符。[UNICODE] 在本规范中,Unicode 通用类别 Zs 中除空格 (U+0020) 和不换行空格 (U+00A0) 以外的所有字符统称为 其他空格分隔符

4.1.1. 第一阶段:折叠与转换

对于 行内格式化上下文 中的每个行内元素(包括匿名行内元素;参见 CSS 2.1 § 9.2.2.1 匿名行内盒 [CSS2]),在 断行双向重排序 之前,空白字符 的处理如下,忽略 双向格式化字符(具有 Bidi_Control 属性的字符 [UAX9]),就像它们不存在一样

以下示例说明了空白符折叠与双向性的交互。考虑以下标记片段,特别注意 空格(为了强调和识别,使用了不同的背景和边框)
<ltr>A <rtl> B </rtl> C</ltr>

其中 <ltr> 元素表示从左到右嵌入,<rtl> 元素表示从右到左嵌入。如果 white-space 属性设置为 normal,空白符处理模型将导致以下结果

这将留下两个 空格,一个位于从左到右嵌入级别中 A 之后,另一个位于从右到左嵌入级别中 B 之后。文本将根据 Unicode 双向算法进行排序,最终结果为

A  BC

注意,在 A 和 B 之间将有两个 空格,而在 B 和 C 之间没有。这最好通过将 空格 放在元素外部而非仅仅放在开始标签和结束标签内部,并且在可行的情况下,通过依赖隐式双向性而不是显式嵌入级别来避免。

4.1.2. 第二阶段:修剪与定位

然后,渲染整个块。考虑到 双向重排序 并按 white-space 属性的规定进行 换行,对行内元素进行布局。当每一行进行布局时,

  1. 行首的 可折叠的 空格 序列被删除。
  2. 如果 制表符宽度 为零,则 保留的 制表符 不会被渲染。否则,每个 保留的 制表符 将被渲染为水平移位,将下一个字形的开始边缘与下一个 制表位 对齐。如果此距离小于 0.5ch,则改用随后的 制表位制表位 出现于距 保留的 制表符 的最近 块容器 祖先的起始内容边缘为 制表符宽度 的倍数处。制表符宽度tab-size 属性给出。

    注意:参见 Unicode 关于制表符 (U+0009) 如何与双向文本交互的规则[UAX9]

  3. 行尾的 可折叠的 空格 序列被删除,以及任何尾部的 U+1680   欧甘字母空格标记,只要其 white-space 属性为 normal, nowrap, 或 pre-line

    注意:由于 Unicode 双向算法 规则 L1,位于 双向重排序 之前行尾的 可折叠的 空格 序列在重排序后也将位于行尾。[UAX9] [CSS-WRITING-MODES-4]

  4. 如果(在 双向重排序 [CSS-WRITING-MODES-4] 之后)行尾仍有任何 空白符其他空格分隔符 和/或 保留的 制表符 序列
    • 如果 white-space 设置为 normal, nowrap, 或 pre-line,UA 必须(无条件地) 悬挂 该序列。
    • 如果 white-space 设置为 pre-wrap,UA 必须(无条件地) 悬挂 该序列,除非该序列后面跟着一个 强制换行符,在这种情况下,它必须 条件性悬挂 该序列。它还可以视觉上折叠任何否则会溢出的字符推进宽度。

      注意:悬挂 空白符而不是折叠它,使用户在选择或编辑文本时能够看到空格。

    • 如果 white-space 设置为 break-spaces空格制表符其他空格分隔符 的处理方式与其它可见字符相同:它们既不能 悬挂,其推进宽度也不能被折叠。

      注意:因此,此类字符会占用空间,并且根据可用空间和适用的断行控制,它们要么会溢出,要么会导致行换行。

此示例表明,在带有强制换行的行尾 条件性悬挂 空白符可与行首提供对称性。添加了下划线以帮助可视化空格。
p {
  white-space: pre-wrap;
  width: 5ch;
  border: solid 1px;
  font-family: monospace;
  text-align: center;
}
<p> 0 </p>

上述样本将按如下方式渲染

0

由于最终的 空格 位于强制换行符之前且没有溢出,它不会悬挂,居中对齐也如预期般工作。

此示例说明了在没有强制换行的行尾 悬挂 空格,与在有强制换行的行尾 条件性悬挂 它们之间的区别。添加了下划线以帮助可视化 空格
p {
  white-space: pre-wrap;
  width: 3ch;
  border: solid 1px;
  font-family: monospace;
}
<p> 0 0 0 0 </p>

上述样本将按如下方式渲染

0
0 0
0

如果添加了 p { text-align: right; },结果将如下所示

0
0 0
0

由于没有强制换行的行尾处的 保留的 空格 必须 悬挂,因此在文本对齐期间放置行的其余部分时不考虑它们。当向末尾对齐时,这意味着任何此类 空格 都会溢出,并且不会阻止该行其余内容与行边缘齐平。另一方面,带有 强制换行的行尾处的保留空格会 条件性悬挂。由于此示例中最后一行末尾的空格不会溢出,因此它不 悬挂,因此在文本对齐期间被考虑在内。

在以下示例中,任何行上都没有足够的空间来容纳行尾空格,因此它们在所有行上都 悬挂:没有强制换行的行上的空格是因为它必须悬挂,而带有强制换行的行上的空格是因为它 条件性悬挂 并溢出。添加了下划线以帮助可视化空格。
p {
  white-space: pre-wrap;
  width: 3ch;
  border: solid 1px;
  font-family: monospace;
}
<p>0 0 0 0 </p>
0 0
0 0

最后一行在最后一个 0 之前没有换行,因为在测量行的内容以确定是否适应时,不考虑 条件性悬挂 的字符。

4.1.3. 段落中断转换规则

white-spacepre, pre-wrap, break-spaces, 或 pre-line 时,段落中断 不可 折叠,而是转换为保留的换行符 (U+000A)。

对于 white-space 的其他值,段落中断可折叠的,并按以下方式折叠

  1. 首先,任何紧接在另一个可折叠的 段落中断 之后的可折叠 段落中断 均被删除。
  2. 然后,根据中断前后的上下文,任何剩余的 段落中断 要么转换为空格 (U+0020),要么被删除。此操作的规则在本级别中由 UA 定义。

    注意:在评估此上下文之前,空白符处理规则已经删除了 段落中断 周围的任何 制表符空格

段落中断转换规则(以及一般的空白符折叠)的目的是将已 拆分为片段 以便更轻松地使用文档源代码的文本“取消中断”。在像英语和韩语这样使用词分隔符的语言中,“取消中断”一行需要用 空格 连接两行。
Here is an English paragraph
that is broken into multiple lines
in the source code so that it can
be more easily read and edited
in a text editor.

这是一个在源代码中被拆分为多行的英语段落,以便可以在文本编辑器中更轻松地阅读和编辑。

在英语中消除换行符需要在其位置保留一个 空格

在没有词分隔符的语言(例如中文)中,“取消中断”一行需要直接连接两行,中间不加空格。

這個段落是那麼長,
在一行寫不行。最好
用三行寫。

這個段落是那麼長,在一行寫不行。最好用三行寫。

在中文中消除换行符需要消除任何中间的 空白符

段落中断转换规则可以使用相邻上下文将段落中断转换为空格或完全消除它。

注意:历史上,HTML 和 CSS 已经无条件地将 段落中断 转换为空格,这阻止了用中文等语言编写的内容能够在源代码中换行。因此,UA 启发式方法在丢弃 段落中断 时需要保持保守,即使它们在努力改善对此类语言的支持。

4.2. 制表符宽度:tab-size 属性

名称tab-size
<number [0,∞]> | <length [0,∞]>
初始值 8
应用于 text
可继承
百分比 不可用
计算值 指定的数值或绝对长度
规范顺序 不可用
动画类型 按计算值类型

此属性确定用于渲染 保留的 制表符 (U+0009) 的 制表符宽度<number> 表示该度量值作为 保留的 制表符 的最近 块容器 祖先的空格字符 (U+0020) 推进宽度的倍数,包括其关联的 letter-spacingword-spacing。不允许使用负值。

5. 断行与词边界

当行内级内容被布局到行中时,它会在行盒之间断开。这种断开称为 断行。当一行由于显式的断行控制(如 保留的 换行符)或由于块的开始或结束而断开时,它是 强制换行。当一行由于内容 换行(即当 UA 为了使内容适合度量而创建非强制断行时)而断开时,它是 软换行。将行内级内容断开为行的过程称为 断行

换行仅在允许的断点处执行,称为 软换行机会。启用换行时(参见 white-space),UA 必须通过在 软换行机会 处(如果存在)进行换行,来最小化溢出行的内容量。

在大多数书写系统中,在没有断字的情况下,软换行机会 仅出现在词边界处。许多此类系统使用 空格 或标点符号来显式分隔单词,软换行机会 可以通过这些字符来识别。然而,泰语、老挝语和高棉语等脚本不使用空格或标点符号来分隔单词。虽然零宽空格 (U+200B) 可用作这些脚本中的显式词界定符,但这种做法并不常见。因此,需要词法资源来正确识别此类文本中的 软换行机会

在某些其他书写系统中,软换行机会 基于正字法音节边界,而非词边界。其中一些系统,如爪哇语和巴厘语,与泰语和老挝语相似,需要对文本进行分析以找到断行机会。在中文(以及日语、彝语,有时也包括韩语)等其他系统中,每个音节往往对应一个 排版字母单位,因此断行约定允许行在某些字符组合之间的任何位置断开。此外,这些限制的严格程度随排版风格而异。

虽然 CSS 没有完全定义 软换行机会 发生的位置,但提供了一些控制来区分常见变体

注意:Unicode 标准附件 #14:Unicode 断行算法 定义了 Unicode 中所有脚本断行的基准行为,预计将进一步定制。[UAX14] 有关断行约定的更多信息,请参见 日本语排版处理要求 [JLREQ] 和日语的 日语文档格式规则 [JIS4051],中文的 中文排版需求 [CLREQ]标点符号用法 [ZHMARK]。另请参见 国际化工作组语言支持索引,其中包含有关其他语言的更多信息。[TYPOGRAPHY] 非常感谢有关其他适当参考资料的任何指导。

5.1. 断行细节

在确定 断行

5.2. 字母的断行规则:word-break 属性

名称word-break
normal | keep-all | break-all | break-word
初始值 normal
应用于 text
可继承
百分比 不可用
计算值 指定关键字
规范顺序 不可用
动画类型 离散 (discrete)

此属性指定字母之间的软换行机会,即文本行在何处是“正常”且允许断行的。具体而言,它控制在相邻的印刷字母单位之间是否存在通常的软换行机会,将属于 NUALAIID Unicode 换行类的非字母印刷字符单位(仅)为此目的视为印刷字母单位[UAX14] 它不影响由空白(以及其他空格分隔符)和标点符号周围所创建的软换行机会的规则。(关于影响标点符号和小假名的控件,请参阅 line-break。)

例如,在某些 CJK 排版样式中,允许在任何两个字母之间断开英文单词,而不是仅在空格或连字符点处断开;这可以通过 word-break:break-all 启用。
A snippet of Japanese text with English in it.
			          The word 'caption' is broken into 'capt' and 'ion' across two lines.
嵌入日语中的英文文本在单词中任意点断行的示例。

再举一例,韩语有两种断行风格:在任意两个韩语音节之间(word-break: normal)或者像英语一样主要在空格处(word-break: keep-all)。

각 줄의 마지막에 한글이 올 때 줄 나눔 기
준을 “글자” 또는 “어절” 단위로 한다.
각 줄의 마지막에 한글이 올 때 줄 나눔
기준을 “글자” 또는 “어절” 단위로 한다.

埃塞俄比亚语同样有两种断行风格,即仅在单词分隔符处断行(word-break: normal),或者也允许在单词内的字母之间断行(word-break: break-all)。

ተወልዱ፡ኵሉ፡ሰብእ፡ግዑዛን፡ወዕሩያን፡
በማዕረግ፡ወብሕግ።ቦሙ፡ኅሊና፡ወዐቅል፡
ወይትጌበሩ፡አሐዱ፡ምስለ፡አሀዱ፡
በመንፈሰ፡እኍና።
ተወልዱ፡ኵሉ፡ሰብእ፡ግዑዛን፡ወዕሩያን፡በማ
ዕረግ፡ወብሕግ።ቦሙ፡ኅሊና፡ወዐቅል፡ወይትጌ
በሩ፡አሐዱ፡ምስለ፡አሀዱ፡በመንፈሰ፡እኍና።

注:要仅在溢出的情况下启用额外的断行机会,请参阅 overflow-wrap

值的含义如下:

normal
单词根据其习惯规则断行,如上文所述。韩语通常表现出两种不同的行为,允许在任意两个连续的谚文/汉字之间断行。对于同样表现出两种不同行为的埃塞俄比亚语,单词内不允许此类断行。
break-all
允许在“单词”内断行:具体而言,除了允许正常断行的软换行机会外,任何印刷字母单位(以及任何解析为 NU(“数字”)、AL(“字母”)或 SA(“东南亚”)换行类的印刷字符单位 [UAX14])在断行方面被视为 ID(“表意文字”)。不应用连字符连接。

注:此值不影响标点符号周围是否存在软换行机会。要允许在任何地方断行,请参阅 line-break: anywhere

注:此选项为埃塞俄比亚语启用了另一种常见行为。它也经常用于文本主要由 CJK 字符组成且仅有少量非 CJK 片段的上下文中,此时希望文本能更好地分布在每一行上。

keep-all
禁止在“单词”内断行:印刷字母单位(或其他属于 NUALAIID Unicode 换行类的印刷字符单位 [UAX14])之间的隐含软换行机会会被抑制,即在这些字符对之间禁止断行(无论 line-break 设置如何,anywhere 除外),除非因基于字典的断行而存在断行机会。否则,此选项等同于 normal。在此样式中,CJK 字符序列不会断行。

注:这是韩语(使用空格作为单词分隔符)的另一种常见行为,对于将 CJK 片段混合到使用空格进行分隔的其他语言中的混合脚本文本也很有用。

以与特定类别字母相同方式断行的符号,受到的影响与这些字母相同。

下面是一个混合脚本的示例文本
这是一些汉字 and some Latin و کمی خط عربی และตัวอย่างการเขียนภาษาไทย በጽሑፍ፡ማራዘሙን፡አንዳንድ፡

断点确定如下(用‘·’表示)

word-break: normal
这·是·一·些·汉·字·and·some·Latin·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡
word-break: break-all
这·是·一·些·汉·字·a·n·d·s·o·m·e·L·a·t·i·n·و·ﮐ·ﻤ·ﻰ·ﺧ·ﻁ·ﻋ·ﺮ·ﺑ·ﻰ·แ·ล·ะ·ตั·ว·อ·ย่·า·ง·ก·า·ร·เ·ขี·ย·น·ภ·า·ษ·า·ไ·ท·ย·በ·ጽ·ሑ·ፍ፡·ማ·ራ·ዘ·ሙ·ን፡·አ·ን·ዳ·ን·ድ፡
word-break: keep-all
这是一些汉字·and·some·Latin·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡

日语通常在排版时允许在单词内换行。然而,有时更倾向于抑制这些换行机会,仅允许在某些句子片段的末尾进行换行。这最常见于非常短的文本中,例如标题和表格或图片的说明文字。

这可以通过使用 wbr 或 U+200B 零宽空格标记允许的换行点,并使用 word-break: keep-all 抑制其他换行点来实现。

例如,以下标记可以根据 word-break 属性的值产生以下两种渲染效果之一

<h1>窓ぎわの<wbr>トットちゃん</h1>
h1{ word-break:normal} h1{ word-break:keep-all}
预期渲染
窓ぎわのトットちゃ
ん
窓ぎわの
トットちゃん
您的浏览器中的结果 窓ぎわのトットちゃん 窓ぎわのトットちゃん

当 Arabic 等成型脚本由于 break-all 允许在单词内断行时,字符必须仍被塑造为好像单词未断开一样(参见 § 5.6 跨单词内断行的塑形)。

为了与旧内容兼容,word-break 属性还支持一个已弃用的 break-word 关键字。指定后,其效果与 word-break: normaloverflow-wrap: anywhere 相同,而不管 overflow-wrap 属性的实际值如何。

5.3. 换行严格性:line-break 属性

名称line-break
auto | loose | normal | strict | anywhere
初始值 auto
应用于 text
可继承
百分比 不可用
计算值 指定关键字
规范顺序 不可用
动画类型 离散 (discrete)

此属性指定应用于元素内的换行规则的严格程度:特别是换行如何与标点符号和符号交互。各值的含义如下

auto
UA 确定要使用的换行限制集,并可能根据行的长度改变限制;例如,为短行使用限制较少的换行规则集。
loose
使用限制最少的换行规则集来断开文本。通常用于短行,例如在报纸中。
normal
使用最常见的换行规则集来断开文本。
strict
使用最严格的换行规则集来断开文本。
anywhere
在每个印刷字符单位周围,包括在任何标点符号或保留的空白周围,或在单词中间,都存在一个软换行机会,不考虑任何对换行的禁止,即使是那些由具有 GLWJZWJ 换行类的字符引入或由 word-break 属性强制要求的换行。 [UAX14] 不同的换行机会不得进行优先级排序。不应用连字符连接。

注:此值会触发终端中通常可见的换行规则。

注意:anywhere 仅在 white-space 设置为 break-spaces 时,才允许将行末的保留的空白换行到下一行,因为在其他情况下

当它对保留的空白产生影响时(配合 white-space: break-spaces),它允许在空格序列的第一个空格之前断行,而 break-spaces 本身并不允许这样做。

CSS 将文本换行规则区分出四个严格等级。对于 loosenormalstrict 中每一项所生效的具体规则集由 UA 决定,并应遵循语言惯例。然而,对于这三个关键字,本规范确实要求

注:上述要求仅在 CJK 文本中创建区别。在仅匹配上述规则且无附加规则的实现中,line-break 仅影响 CJK 码位,除非书写系统被标记为中文日文。未来的级别可能会随着其他书写系统和语言需求变得明确,而为其添加额外的特定规则。

由于 UA 可以添加 strict/normal/loose 模式之间的额外区别,这些值在其他书写系统中也可以表现出差异。例如,具有足够高级泰语处理能力的 UA 可以选择将泰语换行的不同严格级别映射到这些关键字,例如在 strict 模式下不允许在复合词内断行(例如将 ตัวอย่างการเขียนภาษาไทย 断为 ตัวอย่าง·การเขียน·ภาษาไทย),而在 loose 下允许更多断行(ตัวอย่าง·การ·เขียน·ภาษา·ไทย)。

注:CSSWG 认识到,在规范的未来版本中,可能需要对换行进行更精细的控制,以满足高端出版要求。

5.5. 连字符连接:hyphens 属性

连字符连接(Hyphenation) 是对单词的有控制拆分,在通常不允许断行的地方进行拆分以改善段落布局,通常在音节或语素边界处拆分单词,并经常在视觉上指示拆分(通常通过插入连字符 U+2010)。在某些情况下,连字符连接也可能改变单词的拼写。无论如何,连字符连接仅是渲染效果:它对底层文档内容或文本选择或搜索不得产生任何影响。

连字符连接习惯因语言而异,不仅可能涉及在换行前插入连字符,还可能涉及在换行后插入连字符(或两者都插入)、插入不同于 U+2010 的字符,或更改单词的拼写。
语言未断行
英语未断行Un‐broken
荷兰语cafeetjecafé‐tje
匈牙利语ÖsszegÖsz‐szeg
普通话tú’àntú‐àn
àizēng‐fēnmíngàizēng‐‐fēnmíng
维吾尔语  [isolated DAL + isolated ALEF + initial MEEM +
					          medial YEH  + final DAL +
					          isolated ALEF MAKSURA] [isolated DAL + isolated ALEF + initial MEEM +
					          final YEH + hyphen ] [ isolated DAL + isolated ALEF MAKSURA]
克里语 [ᑲᓯᑕᓂᐘᓂᓂᐠ]
					          (CANADIAN SYLLABICS KA +
					          CANADIAN SYLLABICS SI +
					          CANADIAN SYLLABICS TA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS WEST-CREE WA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS FINAL GRAVE) [ᑲᓯᑕᓂ᐀]
					          (CANADIAN SYLLABICS KA +
					          CANADIAN SYLLABICS SI +
					          CANADIAN SYLLABICS TA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS HYPHEN) [ᐘᓂᓂᐠ]
					          (CANADIAN SYLLABICS WEST-CREE WA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS FINAL GRAVE)

当在有效的连字符连接机会处换行时,就会发生连字符连接,这是在允许连字符连接的单词内存在的一种软换行机会。在 CSS 中,连字符连接机会hyphens 属性控制。CSS 文本第 3 级没有定义连字符连接的确切规则;然而,强烈鼓励 UA 优化其断点选择,并选择语言合适的连字符连接点。

注:由 U+002D - 连字符-减号字符或 U+2010 ‐ 连字符字符引入的软换行机会不是连字符连接机会,因为在换行时并没有创建拆分的视觉指示:无论行是否在该点换行,这些字符都是可见的。

在计算最小内容固有大小时,考虑连字符连接机会。

注:这允许表格对其内容进行连字符连接而不是溢出其包含块,这在德语等长单词语言中尤为重要。

名称hyphens
none | manual | auto
初始值 manual
应用于 text
可继承
百分比 不可用
计算值 指定关键字
规范顺序 不可用
动画类型 离散 (discrete)

此属性控制是否允许连字符连接在文本行内创建更多的软换行机会。各值的含义如下

none(无)
单词不会进行连字符连接,即使单词内部的字符明确定义了连字符连接机会

注:这不会抑制由 U+002D - 连字符-减号或 U+2010 ‐ 连字符等始终可见字符引入的现有软换行机会

manual
仅在单词内部有明确建议连字符连接机会的字符时,单词才会进行连字符连接。UA 必须使用适当的特定语言连字符连接字符,并应应用任何适当的拼写更改,就像在同一点进行自动连字符连接一样。
在 Unicode 中,U+00AD 是一个条件“软连字符”,U+2010 是一个无条件连字符。Unicode 标准附件 #14 描述了软连字符在 Unicode 换行中的作用。 [UAX14] 在 HTML 中,&shy; 代表软连字符,它建议了一个连字符连接机会。
ex&shy;ample
auto
除了由条件连字符明确指出的机会外,单词还可以在由语言合适的连字符连接资源自动确定的连字符连接机会处断行。如果单词包含条件连字符(&shy; 或 U+00AD 软连字符),则必须忽略单词内其他地方的自动连字符连接机会,优先使用条件连字符。然而,如果即使在这些机会处断行后,该单词的一部分仍然太长而无法适应一行,则可以使用自动连字符连接机会。

正确的自动连字符连接需要适合被断行文本语言的连字符连接资源。因此,UA 必须仅对已知内容语言且拥有相应连字符连接资源的文本自动进行连字符连接。

作者应正确标记其内容的语言(例如使用 HTML lang 属性或 XML xml:lang 属性),以获得正确的自动连字符连接。

UA 可以使用语言定制的启发式方法从自动连字符连接中排除某些单词。例如,UA 可能尝试通过排除匹配特定大写和标点模式的单词来避免专有名词中的连字符连接。此类启发式方法未由本规范定义。(请注意,此类启发式方法需要随语言而异:例如,英语和德语有非常不同的大写惯例。)

hyphens 属性而言,构成“单词”的内容取决于 UA。但是,在确定单词边界时,必须忽略行内元素边界和流外元素。

任何由于条件连字符(如 U+00AD 软连字符)创建的连字符连接机会处因连字符连接而显示的字形,都由该字符表示,并根据应用于该字符的属性进行样式设置。

当 Arabic 等成型脚本由于连字符连接允许在单词内断行时,字符必须仍被塑造为好像单词未断开一样(参见 § 5.6 跨单词内断行的塑形)。

例如,如果维吾尔语单词“داميدى”被连字符连接,它将显示为 [孤立的 DAL + 孤立的 ALEF + 初始的 MEEM + 中间的 YEH + 连字符 + 换行 + 最终的 DAL + 孤立的 ALEF MAKSURA] 而不是 [孤立的 DAL + 孤立的 ALEF + 初始的 MEEM + 最终的 YEH + 连字符 + 换行 + 孤立的 DAL + 孤立的 ALEF MAKSURA]

5.5. 溢出换行:overflow-wrap/word-wrap 属性

名称overflow-wrap, word-wrap
normal | break-word | anywhere
初始值 normal
应用于 text
可继承
百分比 不可用
计算值 指定关键字
规范顺序 不可用
动画类型 离散 (discrete)

此属性指定当一个本来不可断行的字符串太长而无法适应行盒时,UA 是否可以在行内本来不允许断行的地方断行,以防止溢出。它仅在 white-space 允许换行时才有效。各值含义如下

normal
行仅在允许的断行点处断行。但是,如果行中没有其他可接受的断行点,则可以放宽 word-break: keep-all 引入的限制以匹配 word-break: normal
anywhere
如果行中没有其他可接受的断行点,一个本来不可断行的字符序列可以在任意点断开。成型字符仍被塑造为好像单词未断开一样,且字素簇必须作为一个单位保持在一起。断行点处不会插入任何连字符连接字符。由 anywhere 引入的软换行机会在计算最小内容固有大小会被考虑
break-word
anywhere 相同,但由 break-word 引入的软换行机会在计算最小内容固有大小不会被考虑

出于旧版兼容性考虑,UA 必须将 word-wrap 视为 overflow-wrap 属性的旧名称别名

5.6. 跨单词内断行的塑形

当 Arabic 等成型脚本在单词内非强制的软换行机会换行时(例如由于 word-break: break-allline-break: anywhereoverflow-wrap: break-wordoverflow-wrap: anywhere 或进行连字符连接而断行时),字符必须仍被塑造(选择其连接形式)为好像单词仍然完整一样。

例如,如果单词“نوشتن”在“ش”和“ت”之间断开,则“ش”仍采用其初始形式(“ﺷ”),“ت”仍采用其中间形式(“ﺘ”)——形式如“ﻧﻮﺷ | ﺘﻦ”,而非如“نوش | تن”。

6. 对齐与两端对齐

对齐与两端对齐控制行内内容如何在行盒内分布。

6.1. 文本对齐:text-align 速记属性

名称text-align
start | end | left | right | center | justify | match-parent | justify-all
初始值 start
应用于 块容器
可继承
百分比 见各个属性
计算值 见各个属性
动画类型 离散 (discrete)
规范顺序 不可用

速记属性设置 text-align-alltext-align-last 属性,并描述如果行内内容没有完全填满行盒,块的行内级内容如何沿行内轴对齐。除 justify-allmatch-parent 之外的值被分配给 text-align-all 并将 text-align-last 重置为 auto

值的含义如下:

start
行内级内容与行盒的起始边缘对齐。
end
行内级内容与行盒的结束边缘对齐。
left
行内级内容与行盒的行左边缘对齐。(在垂直书写模式下,这取决于 writing-mode,可能是物理上的顶部或底部。) [CSS-WRITING-MODES-4]
right
行内级内容与行盒的行右边缘对齐。(在垂直书写模式下,这取决于 writing-mode,可能是物理上的顶部或底部。) [CSS-WRITING-MODES-4]
center
行内级内容在行盒内居中。
justify (两端对齐)
文本根据 text-justify 属性指定的方法进行两端对齐,以精确填充行盒。除非 text-align-last 另有规定,否则强制换行符之前的最后一行或块的末尾是起始对齐的。
justify-all
text-align-alltext-align-last 都设置为 justify,同时也强制最后一行进行两端对齐。
match-parent
此值表现得与 inherit 相同(计算为其父级的计算值),区别在于 继承的值 startend 根据父级的 direction 值进行解释,并得出 leftright 的计算值。在根元素上指定时,计算为 start

当在 text-align 速记属性上指定时,将 text-align-alltext-align-last 都设置为 match-parent

文本块是一叠行盒。此属性指定每个行盒内的行内级盒如何相对于行盒的起始和结束侧对齐。对齐方式不是相对于视口或包含块的。

justify 的情况下,UA 可以通过调整其文本来拉伸或收缩任何行内盒。(参见 text-justify。)如果一个元素的空白不是可折叠的,则不需要 UA 为了两端对齐的目的而调整其文本,而是可以将其视为没有两端对齐机会。如果 UA 选择调整文本,则必须确保制表位继续按照空白处理规则的要求对齐。

如果(在可能进行的任何两端对齐后)行盒内的行内内容太长而无法适应,则内容为起始对齐:任何放不下的内容将溢出行盒的结束边缘。

有关如何确定行盒起始结束边缘的详细信息,请参阅 § 8.3 双向性与行盒

6.2. 默认文本对齐:text-align-all 属性

名称text-align-all
start | end | left | right | center | justify | match-parent
初始值 start
应用于 块容器
可继承
百分比 不可用
计算值 按指定的关键字,除了 match-parent 按上述方式计算外
规范顺序 不可用
动画类型 离散 (discrete)

text-align 速记属性的长手属性指定块容器中所有行内内容行的行内对齐方式,但被 text-align-last 的非 auto 值覆盖的最后一行除外。有关值的完整描述,请参阅 text-align

作者应使用 text-align 速记属性,而不是此属性。

6.3. 最后一行对齐:text-align-last 属性

名称text-align-last
auto | start | end | left | right | center | justify | match-parent
初始值 auto
应用于 块容器
可继承
百分比 不可用
计算值 按指定的关键字,除了 match-parent 按上述方式计算外
规范顺序 不可用
动画类型 离散 (discrete)

此属性描述块的最后一行或强制换行符之前的一行如何对齐。

如果指定了 auto,则受影响行上的内容根据 text-align-all 对齐,除非 text-align-all 设置为 justify,在这种情况下它是起始对齐的。所有其他值按 text-align 的说明进行解释。

6.4. 两端对齐方法:text-justify 属性

名称text-justify
auto | none | inter-word | inter-character
初始值 auto
应用于 text
可继承
百分比 不可用
计算值 指定的关键字(distribute 旧值除外)
规范顺序 不可用
动画类型 离散 (discrete)

此属性选择当行的对齐方式设置为 justify 时使用的两端对齐方法(参见 text-align)。该属性适用于文本,但会从块容器继承到包含其行内级内容的根行内盒。它采用以下值

auto
UA 确定遵循的两端对齐算法,基于性能和足够演示质量之间的平衡。由于两端对齐规则随书写系统语言而异,UA 应尽可能使用适合文本的两端对齐算法。
例如,UA 默认可以使用一种对所有书写系统来说都是简单通用折衷方案的两端对齐方法——例如主要沿单词分隔符和 CJK 印刷字母单位之间进行扩展,次要在东南亚印刷字母单位之间进行扩展。然后,在已知段落的内容语言的情况下,它可以选择更具语言针对性的两端对齐行为,例如遵循 日语排版要求 处理日文 [JLREQ],对阿拉伯语使用草书拉伸,对德语使用 inter-word 等。

Two lines of calligraphic Arabic end together
				          due to a mix of compressed and swash forms.

Tasmeem 渲染的草书两端对齐阿拉伯语文本示例。像英语一样,阿拉伯语可以通过调整单词之间的间距进行两端对齐,但在大多数样式中,它也可以通过书写上的拉伸或压缩字符形式本身来进行两端对齐。在此示例中,上部的文本通过使用拉伸(kashida)形式和花体形式进行扩展以填充行,而底部的行则通过使用字符之间的堆叠组合略微压缩。通过采用传统的书写技巧,排版者可以对齐行并保持流动性和色彩,提供非常高质量的两端对齐效果。然而,这本质上是一种非常针对脚本的效果。
Extra space is partly to spaces and partly among CJK and Thai letters.
使用 text-justify: auto 的混合脚本文本:此解释使用一种通用折衷的两端对齐方法,在空格处以及 CJK 和东南亚字母之间进行扩展。对于具有单词分隔符和/或 CJK 字符的行,这有效地使用了单词间 + 表意文字间的间距,并对没有这些内容或空格拉伸过大的行退回到字符簇间距行为。
none(无)
禁用两端对齐:文本内没有两端对齐机会
No extra space is inserted.
使用 text-justify: none 的混合脚本文本

注:此值旨在用于用户样式表,以提高可读性或用于辅助功能目的。

inter-word
两端对齐仅调整单词分隔符处的间距(实际上改变了行上使用的 word-spacing)。这种行为是英语或韩语等使用空格分隔单词的语言的典型表现。
Extra space is equally distributed mainly to spaces.
使用 text-justify: inter-word 的混合脚本文本
inter-character
两端对齐调整每对相邻印刷字符单位之间的间距(实际上改变了行上使用的 letter-spacing)。此值有时用于日语等东亚系统。
Extra space is equally distributed
				          at points between spaces and letters of all writing systems.
使用 text-justify: inter-character 的混合脚本文本

出于旧版兼容性考虑,UA 还必须支持替代关键字 distribute,它必须计算为 inter-character,从而具有完全相同的含义和行为。UA 可以将其视为 旧值别名

由于最佳的两端对齐对语言敏感,作者应正确对其内容进行语言标记以获得最佳结果。

注:本级 CSS 中的指南并未描述完整的两端对齐算法。它们仅是一个完整算法应满足的最低限度要求。限制要求集给了 UA 一定的余地,可以选择满足其需求并达到所需的质量、速度和复杂性平衡的两端对齐算法。

6.4.1. 扩展与压缩文本

当对齐文本时,UA 获取行内容末尾与行盒边缘之间的剩余空间,并将其分布在内容中,以便内容精确填满行盒。UA 也可以选择分配负空间,使行上容纳的内容多于正常间距条件下所能容纳的内容。

一个 两端对齐机会(justification opportunity) 是两端对齐算法可以更改文本内间距的点。两端对齐机会可以由单个印刷字符单位(例如单词分隔符)提供,也可以由两个印刷字符单位的并置提供。与软换行机会的控件一样,一个印刷字符单位是否提供两端对齐机会由其父级的 text-justify 值控制;同样,两个连续印刷字符单位之间是否存在两端对齐机会,由其最近公共祖先的 text-justify 值决定。

通过两端对齐分布的空格是 letter-spacingword-spacing 属性定义的间距之外的。当此类额外空间分布到单词分隔符两端对齐机会时,它将按照与 word-spacing 相同的规则应用。同样,当空间分布到两个印刷字符单位之间的两端对齐机会时,应按照与 letter-spacing 相同的规则应用。

两端对齐算法可以将两端对齐机会分为不同的优先级级别。给定级别内的所有两端对齐机会以相同的优先级进行扩展或压缩,无论是由哪个印刷字符单位创建了该机会。例如,如果将两个汉字之间和两个拉丁字母之间的两端对齐机会定义为处于同一级别(正如在 inter-character 两端对齐样式中那样),则不会因为它们源自不同的印刷字符单位而受到不同的对待。在本级别中未定义其他因素(例如字号、字母间距、字形形状、行内位置等)是否或如何影响行内两端对齐机会的空间分布。

UA 可以启用或断开可选连字,或使用其他字体特性(如替代字形或字形压缩)来帮助根据任何方法对齐文本。这种行为不受本级 CSS 的控制。然而,UA 不得断开所需的连字或以其他方式禁用正确塑造复杂脚本所需的特性。

如果行内存在两端对齐机会,且文本对齐指定了完全两端对齐(justify),则该行必须进行两端对齐。

6.4.2. 处理符号与标点符号

在确定两端对齐机会时,来自 Unicode 符号(S*)和标点(P*)类的印刷字符单位通常被视为与同一脚本的印刷字母单位相同(或者,如果字符的脚本属性为 Common,则被视为占主导地位脚本的印刷字母单位)。

然而,根据排版传统,可能存在控制符号和标点符号两端对齐的其他规则。因此,UA 可以重新分配特定字符或引入额外的优先级级别来处理涉及符号和标点符号的两端对齐机会

例如,传统上,连续的 U+2014 — 破折号、U+2015 ― 水平条、U+2026 … 省略号或 U+2025 ‥ 双点引导字符之间没有两端对齐机会 [JLREQ];因此 UA 可能会将这些字符分配给“从不”优先级级别。再举一例,某些全角标点符号(例如 U+301A 〚 左白方括号)在日语中被认为包含两端对齐机会。因此,UA 可能会将这些字符分配给比表意文字之间的机会更高的优先级级别。

6.4.3. 不可扩展文本

如果行的行内内容无法拉伸到行盒的全宽,则必须根据 text-align-last 属性进行对齐。(如果 text-align-lastjustify,则必须按照 center 对齐。)

6.4.4. 草书脚本

两端对齐不得在阿拉伯语等草书脚本连接的印刷字母单位之间引入间隙。如果能够,UA 可以将分布到此类印刷字母单位运行内两端对齐机会的空间转化为该运行的一种草书拉伸。否则,它必须假定草书脚本中任何一对印刷字母单位之间都不存在两端对齐机会(无论它们是否连接)。

以下是不可接受的两端对齐示例
在每对阿拉伯字母之间添加间隙
在每对未连接的阿拉伯字母之间添加间隙

一些字体设计允许使用 tatweel 字符进行两端对齐。执行基于 tatweel 的两端对齐的 UA 必须正确处理其使用规则。请注意,tatweel 字符的正确插入取决于上下文,包括所涉及的字母组合、单词内的位置以及单词在行内的位置。

6.4.5. auto 两端对齐的最低要求

对于 auto 两端对齐,本规范并未定义所有的两端对齐机会是什么、它们如何优先级排序,或多级两端对齐机会何时以及如何交互。然而,它确实要求

有关文本两端对齐的更多信息,可以在 “完全两端对齐的方法” 中找到(或提交给它),该文档按书写系统和语言索引,由 W3C 国际化工作组维护。 [JUSTIFY]

7. 间距

CSS 通过 word-spacingletter-spacing 属性提供对文本间距的控制,这些属性分别指定单词分隔符周围或印刷字符单位之间的额外空间。

7.1. 单词间距:word-spacing 属性

名称word-spacing
normal | <length>
初始值 normal
应用于 text
可继承
百分比 不适用
计算值 绝对长度
规范顺序 不可用
动画类型 按计算值类型

此属性指定“单词”之间的额外间距。值按以下定义进行解释

normal
不应用额外间距。计算为零。
<length>(长度)
指定字体定义的固有单词间距之外的额外间距。

额外间距应用于空白处理规则应用后文本中留下的每个单词分隔符,除非排版传统另有规定,否则应在字符的两侧各应用一半。值可以是负数,但可能存在与实现相关的限制。

单词分隔符 是主要目的和一般用法是分隔单词的印刷字符单位。在 Unicode 中,这包括(但不详尽地定义为)空格(U+0020)、不换行空格(U+00A0)、埃塞俄比亚语单词空间(U+1361)、爱琴海单词分隔符(U+10100,U+10101)、乌加里特语单词分隔符(U+1039F)和腓尼基语单词分隔符(U+1091F)。 [UNICODE]

注:一般标点符号和固定宽度空格(如 U+3000 和 U+2000 到 U+200A)都不被视为单词分隔符,因为尽管它们经常恰好分隔单词,但它们的主要目的不是分隔单词。

如果没有单词分隔符,或者如果单词分隔字符具有零进位宽度(例如 U+200B 零宽空格),则 UA 不得在单词之间创建额外的间距。

7.2. 字间距调整(Tracking):letter-spacing 属性

名称letter-spacing
normal | <length>
初始值 normal
应用于 行内盒和文本
可继承
百分比 不可用
计算值 绝对长度
规范顺序 不可用
动画类型 按计算值类型

此属性用于指定相邻印刷字符单元之间的额外间距(通常称为字距调整 (tracking))。Letter-spacing 应用于双向重排序 (bidi reordering) 之后,且是字距微调 (kerning)word-spacing 的补充。 [CSS-WRITING-MODES-4] [CSS-FONTS-3] 根据生效的对齐规则,用户代理可能会进一步增加或减少印刷字符单元之间的空间,以实现文本对齐 (justify text)

值的含义如下:

normal
不应用额外间距。计算为零。
<length>(长度)
指定印刷字符单元之间的额外间距。值可以是负数,但可能存在与实现相关的限制。

出于兼容旧版本的原因,计算值为零的 letter-spacing 会产生一个解析值(即 getComputedStyle() 的返回值),该值为 normal

letter-spacing 而言,每一串连续的原子内联元素(例如图像和内联块)均被视为单个印刷字符单元

Letter-spacing 不得应用于行首。在当前版本中,Letter-spacing 是否应用于行尾未做定义。

当 letter-spacing 未应用于行首或行尾时,文本总是紧贴块的边缘对齐。
p { letter-spacing: 1em; }
<p>abc</p>

a b c

a b c

因此,用户代理确实不应该 [RFC6919] 在一行的右端或末尾添加字距间距

a b c 

两个印刷字符单元之间的字距实际上“属于”包含这两个印刷字符单元的最内层元素:两个相邻印刷字符单元(在双向重排序后)之间的总字距由包含这两个印刷字符单元边界的最内层元素指定并渲染。然而,用户代理也可以根据其包含元素的 letter-spacing 值,将元素边界处的 letter-spacing 附加到其中一个印刷字符单元上。

注意:出于 Web 兼容性的考虑,本版本允许这种次要行为。

内联框应仅包含完全位于该元素内部的字符之间的字距,因此不包括元素右端或末尾的字距
p { letter-spacing: 1em; }
<p>a<span>bb</span>c</p>

a b b c

a b b c

因此,给定的 letter-spacing 值应仅影响完全包含在该指定元素内的字符之间的间距

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<p>a<span>bb</span>c</p>

a b  b c

这进一步意味着对仅包含单个字符的元素应用 letter-spacing 对渲染结果没有影响

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<p>a<span>b</span>c</p>

a b c

由于字距是在 RTL 重排序之后插入的,因此应用于下方内部 span 的字距同样无效,因为重排序后 "c" 并未与 "א" 相邻

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<!-- abc followed by Hebrew letters alef (א), bet (ב) and gimel (ג) -->
<!-- Reordering will display these in reverse order. -->
<p>ab<span></span>בג</p>

a b c א ב ג

字距调整会忽略不可见的零宽格式字符(例如 Unicode Cf 类别中的字符)。添加间距时必须表现得如同这些字符在文档中不存在一样。

例如,应用于 A&#x200B;Bletter-spacingAB 相同,无论元素边界出现在何处。

当两个字符之间的有效间距不为零时(无论是由于对齐 (justification) 还是非零的 letter-spacing 值),用户代理不应应用可选连字(即那些未定义为基本正确字形塑造所必需的连字)。但是,通过底层的 font-feature-settings 属性指定的连字和其他字体特性优先于此规则。参见 CSS Fonts Module Level 3 § feature-precedence

例如,如果单词 “filial” 设置了字距,则不应使用 “fi” 连字,因为它会阻止文本的均匀间距。
filial vs filial

注意:在 OpenType 中,所需的连字应与 rlig 特性相关联。因此,所有其他连字都被视为可选。但在某些情况下,UA 或平台的启发式算法会应用额外的连字以处理损坏的字体;本规范不定义或覆盖此类特殊处理。

7.2.1. 连笔脚本 (Cursive Scripts)

如果可能,UA 可以通过将要分配给此类字母串的总额外空间转化为某种形式的连笔伸展(或对于负值进行压缩)来对连笔脚本应用字距调整,从而使该串产生等效的总扩展(或压缩)。否则,如果 UA 无法在不破坏连笔连接的情况下扩展连笔脚本的文本,则它绝对不能在该脚本的任何印刷字母单元对之间应用间距(就字距调整而言,实际上将每个单词视为单个印刷字母单元)。这两种情况都会导致此类字母之间的有效间距为零;但前者会保持文本被拉伸的感觉。

下面是一些关于阿拉伯语文本间距调整的适当和不适当示例。
原始文本
错误在每个字母之间均匀分布空间。注意这会破坏连笔连接!
正确通过印刷上适当的连笔伸展来分配 ∑letter-spacing产生的文本长度与之前均匀间距的示例相同。
正确抑制阿拉伯字母之间的 letter-spacing注意,letter-spacing 仍然应用于非阿拉伯字符(如空格)。
错误仅在非连接字母之间应用 letter-spacing这会破坏印刷色彩并混淆单词边界。

注意:文本的适当连笔伸展或压缩可能会根据脚本、字体、语言、单词内的位置、行内的位置、实现复杂性、字体功能和书法偏好而有所不同,在某些情况下可能根本无法实现。它可能涉及使用缩写连字、花体变体、上下文形式、伸展字形(如 U+0640 ـ ARABIC TATWEEL)或其他微型印刷术。定义这些效果的规则不在 CSS 的范围内。除非作者准备好接受非互操作的结果,否则应避免对连笔脚本应用 letter-spacing

7.3. 跨元素边界的字符塑造 (Shaping Across Element Boundaries)

当任何分隔两个印刷字符单元的框满足以下任意条件时,文本塑造必须在内联框边界处中断

当格式没有有效改变,或者唯一的格式改变不影响字形(例如应用文本装饰)时,文本塑造不得在内联框边界处中断。

否则,如果考虑到字体技术的局限性,在合理且可能的情况下,文本塑造不应在内联框边界处中断。

跨边界塑造的一个合理且可能的例子是阿拉伯语塑造:在许多系统中,这是由字体引擎执行的,允许字体提供具有潜在高度复杂上下文塑造的变体字形。通常无法在更换字体时依赖此系统,除非字体引擎具有提供上下文的 API,但引擎通过例如使用零宽连接符 (U+200D) 或零宽非连接符 (U+200C) 来获取正确的初始/中间/末尾/孤立字形选择,从而绕过此限制是直接且合理的。

跨边界可能但不合理塑造的一个例子是处理一种对两侧 20 个字符上下文敏感以选择其字形的字体:将所有文本在字符串之前和之后传递,甚至通过具有格式更改的多个内联边界,是复杂的。UA 可以处理此类情况,但并非必须,因为它们不是现代书写系统的典型或根本要求。

跨边界塑造不可能的一个例子是:在一个连字会将单词“and”的所有三个字母替换为“&”字形的情况下,在单词“and”中间改变字体权重。

8. 边缘效果 (Edge Effects)

边缘效果控制行相对于块中其他行的缩进(text-indent),以及如何在行的起始和结束边缘测量内容(hanging-punctuation)。

8.1. 首行缩进:text-indent 属性

名称text-indent
[ <length-percentage> ] && hanging? && each-line?
初始值 0
应用于 块容器
可继承
百分比 指块容器自身的内联轴 (inline-axis) 内部尺寸
计算值 计算出的 <length-percentage> 值,加上任何指定的关键字
规范顺序 按语法
动画类型 按计算值类型

此属性指定应用于块中内联内容行的缩进。缩进被视为应用于行框起始边缘的 margin。

除非 each-line 和/或 hanging 关键字另有规定,否则仅影响元素的第一格式化行[CSS-PSEUDO-4] 例如,匿名块框的第一行仅在其为父元素的第一个子元素时受影响。

值的含义如下:

<length>(长度)
以绝对长度给出缩进量。
<percentage>(百分比)
以块容器自身逻辑宽度的百分比给出缩进量。

出于计算固有尺寸贡献的目的,百分比必须视为 0,但在执行布局时总是按正常方式解析。

注意:这可能导致元素溢出。不建议同时使用百分比缩进和固有尺寸计算。

each-line
缩进会影响每个块容器的第一行以及强制换行符之后的每一行(但不影响软换行符之后的行)。
hanging
反转受影响的行。

如果 text-alignstart,且 text-indent5em,在从左到右且没有浮动元素的文本中,第一行文本将从块内 5em 处开始。

     Since CSS1 it has been possible to
indent the first line of a block element
5em by setting the 'text-indent' property 
to '5em'.

如果我们添加 hanging 关键字,则第一行将紧贴边缘,但其他行将缩进 5em。

In CSS3 we can instead indent all other
     lines of the block element by 5em
     by setting the 'text-indent' property
     to 'hanging 5em'.
由于 text-indent 属性仅影响“第一格式化行”,因此强制换行后的行将不会被缩进。
   For example, in the middle of
this paragraph is an equation,
which is centered:
             x + y = z
The first line after the equation
is flush (else it would look like
we started a new paragraph).

然而,有时(如诗歌或代码),缩进每一行足够长的换行文本是合适的。在以下示例中,text-indent 被赋予 3em hanging each-line 的值,这使得诗歌的第三行在其于块右边界处软换行时出现悬挂缩进。

In a short line of text
There need be no wrapping,
But when we go on and on and on  
   and on,
Sometimes a soft break
Can help us stay on the page.

注意:由于 text-indent 属性具有继承性,当在块元素上指定时,它会影响后代内联块元素。因此,在指定了 display: inline-block 的元素上指定 text-indent: 0 通常是明智的。

8.2. 悬挂字形 (Hanging Glyphs)

当行起始或结束边缘处的字形悬挂 (hangs)时,在测量该行的内容以进行匹配、对齐或对齐 (justification) 时,不考虑该字形。根据行的对齐方式,这可能导致标记被放置在行框之外。在计算固有尺寸最小内容尺寸最大内容尺寸)及其衍生的尺寸时,悬挂字形也不计入其中。(这种测量与字距微调的交互目前由 UA 定义;CSSWG 欢迎对此提出建议。)

悬挂字形 仍然包含在其父内联框内,并且仍然参与文本对齐:只是在确定行内适合多少内容、需要多少内容进行对齐以进行拉伸或压缩,或者如何为文本对齐在行框内定位内容时,不测量其字符进度。实际上,悬挂字形的字符进度被重新解释为在其父内联框受影响边缘上的额外负 margin;行在其他方面按常规布局。溢出的悬挂字形通常应视为墨迹溢出 (ink overflow),以避免产生不必要的滚动条,但当内容可编辑或在其他用户需要将其视为可滚动溢出 (scrollable overflow) 的情况下,UA 可以将其视为可滚动溢出[CSS-OVERFLOW-3]

在某些情况下,行尾的字形可以条件悬挂 (conditionally hang):仅当它在对齐前不适合行内时才悬挂。在测量行内容是否匹配时,不考虑它;然而,任何不适合的部分被视为悬挂。在计算最小内容尺寸及其衍生的尺寸时,条件悬挂的字形不计入,但在最大内容尺寸及其衍生的尺寸计算时,它们被计入。

悬挂字形与行边缘之间的非零内联轴边框或内边距会阻止字形悬挂。例如,在带有末尾内边距的内联框末尾的句点不会在行的末端边缘悬挂

多个相邻的字形可以一起悬挂,但是可以指定允许悬挂数量的具体限制(例如,在行的每个边缘最多可以悬挂一个标点符号)。

8.2.1. 悬挂标点:hanging-punctuation 属性

名称hanging-punctuation
none | [ first || [ force-end | allow-end ] || last ]
初始值 none(无)
应用于 text
可继承
百分比 不可用
计算值 指定的关键字
规范顺序 按语法
动画类型 离散 (discrete)

此属性决定标点符号(如果存在)是否悬挂并可能被放置在行框外部(或缩进中),位于文本行的起始或结束处。

注意:如果块容器上没有足够的内边距,hanging-punctuation 可能会引发溢出。

值的含义如下:

none(无)
没有任何标点符号被设为悬挂
first
元素第一格式化行开头的开括号、引号或表意空格悬挂。这适用于所有属于 Unicode 类别 Ps、Pf、Pi 的字符,外加 ASCII 引号 U+0027 ' APOSTROPHE 和 U+0022 " QUOTATION MARK 以及表意空格 U+3000。
last
元素最后格式化行末尾的闭括号或引号悬挂。这适用于所有属于 Unicode 类别 Pe、Pf、Pi 的字符,外加 ASCII 引号 U+0027 ' APOSTROPHE 和 U+0022 " QUOTATION MARK。
force-end
行末尾的句号或逗号悬挂
allow-end
行末尾的句号或逗号条件悬挂

在行的每个边缘最多可以悬挂一个标点符号。

允许悬挂的句号和逗号包括

U+002C, 逗号(COMMA)
U+002E. 句点(FULL STOP)
U+060C،阿拉伯逗号 (ARABIC COMMA)
U+06D4۔阿拉伯句号 (ARABIC FULL STOP)
U+3001表意文字逗号
U+3002表意文字句号
U+FF0C全角逗号
U+FF0E全角句号
U+FE50小逗号 (SMALL COMMA)
U+FE51小表意逗号 (SMALL IDEOGRAPHIC COMMA)
U+FE52小句号 (SMALL FULL STOP)
U+FF61半宽表意句号 (HALFWIDTH IDEOGRAPHIC FULL STOP)
U+FF64半宽表意逗号 (HALFWIDTH IDEOGRAPHIC COMMA)

UA 可以酌情包含其他字符。

注意:如果 UA 包含其他字符,CSS 工作组将不胜感激其能通知工作组

allow-endforce-end 是东亚地区使用的两种悬挂标点变体。
hanging-punctuation: allow-end
p {
  text-align: justify;
  hanging-punctuation: allow-end;
}
hanging-punctuation: force-end
p {
  text-align: justify;
  hanging-punctuation: force-end;
}

对于 allow-end,第一行末尾的标点符号不会悬挂,因为它不悬挂也能放入。但是,如果使用 force-end,它会被强制悬挂。对齐计算的是不带悬挂标点的行。因此,当行被拉伸时,标点符号会被推到行外。

8.3. 双向性与行框 (Bidirectionality and Line Boxes)

行框的起始 (start)结束 (end) 侧由行框的内联基准方向 (inline base direction) 决定。尽管它们通常一致,但行框内联基准方向包含块双向段落内联基准方向是不同的。行框内联基准方向会影响 text-align-alltext-align-lasttext-indenthanging-punctuation——即其内容相对于边缘的位置和对齐方式。它不影响内联内容的格式或顺序(这由 CSS Writing Modes [UAX9] [CSS-WRITING-MODES-4] 应用的 Unicode 双向算法 控制)。

在大多数情况下,行框内联基准方向由其包含块的计算 direction 给出。但是,如果其包含块具有 unicode-bidi: plaintext [CSS-WRITING-MODES-4]

在以下示例中,假设 <block> 是一个起始对齐的预格式化块(display: block; white-space: pre; text-align: start),每隔一行即为右对齐
<block style="unicode-bidi: plaintext">
français
فارسی
français
فارسی
français
فارسی
</block>
由于在确定纯文本双向段落的内联基准方向时会跳过中性字符(如标点)和孤立运行,以下示例中的行框将是从左到右的(因此在 text-align: start 的情况下为左对齐),正如第一个强字符 ‘h’ 所决定的那样
<para style="display: block; direction: rtl; unicode-bidi:plaintext"><quote style="unicode-bidi:plaintext">שלום!</quote>”, they said.
</para>
<textarea style="direction: rtl; unicode-bidi:plaintext">

Hello!

</textarea>

由于 unicode-bidi: plaintext,“Hello!” 被排版为 LTR(即感叹号在右侧)并左对齐,忽略了包含块的 RTL direction。这使得随后的空行也为 LTR,这意味着该行上的插入符号应出现在其左边缘。然而,空的第一个行是右对齐的:由于没有前一行,它假设为其包含块的 RTL 方向。

附录 A:文本处理操作顺序

本附录是规范性的。

以下列表定义了文本操作的顺序。(只要产生的布局相同,实现不必遵循此顺序。)

  1. 空白处理 第一部分(预换行)
  2. 文本转换
  3. 文本组合 (text combination) [CSS-WRITING-MODES-4]
  4. 文本方向 (text orientation) [CSS-WRITING-MODES-4]
  5. 自动换行 (text wrapping),同时应用每行规则
  6. 对齐 (justification)(这可能会影响字形选择和/或自动换行,并循环回到该步骤)
  7. 文本对齐

附录 B:转换为纯文本

本附录对于纯文本复制粘贴操作是规范性的。

当 CSS 渲染的文档转换为纯文本格式时,预期

附录 C:默认 UA 样式表

本附录是参考性的,旨在帮助 UA 开发人员为 HTML 实现默认样式表,但 UA 开发人员可自由忽略或适当地修改它。

/* make option elements align together */
option { text-align: match-parent; }

附录 D:脚本与间距

本附录是规范性的。

印刷行为在语言上略有不同,但在书写系统上却有很大差异。本附录根据其对齐和间距行为对 Unicode 6.0 中的一些常见脚本进行了分类。类别描述是描述性的,而非规范性的;决定性因素是对对齐机会的优先级排序。

块脚本
CJK 以及由此延伸的所有宽字符(参见 East Asian Width [UAX11])。包含以下 Unicode 脚本:注音 (Bopomofo)、汉字 (Han)、谚文 (Hangul)、平假名 (Hiragana)、片假名 (Katakana) 和彝文 (Yi)。东亚宽度属性 WideFullwidth 的字符也包括在内,但 Ambiguous 字符仅在书写系统中文韩文日文时才包括在内。
簇状脚本
聚类脚本 (Clustered scripts) 具有离散单元,仅在单词边界处换行,但不使用可见的单词分隔符。它们优先考虑拉伸空格,但也乐于接受字符间距以进行对齐。聚类脚本包括但不限于以下 Unicode 脚本:高棉语 (Khmer)、老挝语 (Lao)、缅甸语 (Myanmar)、新傣仂语 (New Tai Lue)、傣勒语 (Tai Le)、傣担语 (Tai Tham)、越南傣语 (Tai Viet)、泰语 (Thai)
连笔脚本 (Cursive scripts)
连笔脚本不允许在字母之间留有间隙,无论是为了对齐还是为了 letter-spacing。包含以下 Unicode 脚本:阿拉伯语 (Arabic)、哈尼菲罗兴亚语 (Hanifi Rohingya)、曼达语 (Mandaic)、蒙古语 (Mongolian)、西非书面语 (N’Ko)、八思巴文 (Phags Pa)、叙利亚语 (Syriac)

注意:具有基线连接符的印度脚本(如天城体 Devanagari 和古吉拉特语 Gujarati)不被视为连笔脚本,并且确实允许在印刷字符单元之间存在此类间隙。参见 Indic Layout Requirements[ILREQ]

用户代理应在更新 Unicode 支持时更新此列表,以处理未来 Unicode 版本中尚未编码的连笔脚本,并鼓励要求 CSSWG 相应地更新此规范。

附录 E:字符与属性

本附录是规范性的。

Unicode 定义了四个在 CSS 排版中引用的代码点级属性

东亚宽度属性 (East Asian width property)
定义于 Unicode Standard Annex #11 [UAX11] 中,并作为 Unicode 字符数据库 [UAX44] 中的 East_Asian_Width 属性给出。
通用类别
定义于 Unicode Standard Annex #44 [UAX44] 中,并作为 Unicode 字符数据库 [UAX44] 中的 General_Category 属性给出。
脚本属性
定义于 Unicode Standard Annex #24 [UAX24] 中,并作为 Unicode 字符数据库 [UAX44] 中的 Script 属性给出。(UA 必须在此映射中包含任何 ScriptExtensions.txt 分配。)
垂直方向 (Vertical Orientation)
定义于 Unicode Standard Annex #50 [UAX50] 中,作为 Unicode 字符数据库 [UAX44] 中的 Vertical_Orientation 属性。

Unicode 定义了单个代码点的属性,但有时有必要确定印刷字符单元的属性。就 CSS 文本而言,印刷字符单元的属性由其第一个字形簇 (grapheme cluster) 的基字符给出——两种情况除外

附录 F:识别内容书写系统

本附录是规范性的。

虽然大多数语言有首选的书写系统,但有些语言有多种书写系统,大多数语言也可以转写为一种或多种外来书写系统。作为一个常见的例子,大多数语言至少有一种拉丁语转写,因此可以用拉丁书写系统书写。转写文本通常采用书写系统的印刷惯例:例如,日语 “romaji” 和中文拼音使用拉丁字母和单词空格,并相应地遵循拉丁换行和对齐做法。再如,历史上的意译韩文 (ko-Hani) 不使用单词空格,因此应类似于中文而不是现代韩文进行排版。

在 HTML 或任何其他使用 BCP47 标签标识语言以声明内容语言的文档语言中,作者可以使用脚本子标签消除歧义或指示使用非典型书写系统。 [BCP47] 例如,要指示对原生不使用拉丁书写系统的语言使用拉丁书写系统,可以添加 -Latn 脚本子标签,例如日语罗马字的 ja-Latn。其他书写系统存在其他子标签,请参阅 ISO 的 书写系统名称代码ISO15924 脚本标签注册表[ISO15924]

一些将 BCP47 标签与脚本子标签结合使用的常见/历史示例
zh-Latn
中文,用拉丁字母转写。
ko-Hani
韩文,用汉字(中文意表字符)书写。
tr-Arab
土耳其语,用阿拉伯脚本书写。
mn-Cyrl
蒙古语,用西里尔字母书写。
mn-Mong
蒙古语,用传统蒙古脚本书写。

然而,BCP47 脚本子标签通常不用于(实际上是不鼓励用于)与单一书写系统强烈关联的语言:相反,当没有指定其他系统时,预期该书写系统是隐含的。 [BCP47] IANA 为此在其 语言子标签注册表 中通过 Suppress-Script 字段维护了一个各种语言最常用书写系统的数据库。

注意:关于语言标签的更多建议可以在 国际化工作组“HTML 和 XML 中的语言标签”“选择语言标签” 中找到。

当未明确指定书写系统时,对于语言敏感的排版行为(如换行或对齐),UA 应假定为声明的内容语言的最常见书写系统。但是,如果作者明确声明了不同的书写系统,UA 不得假定该书写系统。如果 UA 没有关于特定语言和书写系统组合的特定语言知识,则必须使用已声明书写系统的排版惯例(必要时假设不同语言的惯例),而不是假设书写系统中已声明语言的惯例,因为这对于已声明的书写系统是不合适的。

语言与其最常见书写系统之间的全部对应关系超出了本文档的范围。但是,用户代理至少必须假定以下情况

附录 G:小假名映射

本附录是规范性的。

小假名映射到全尺寸假名
小假名 全尺寸假名
ぁ U+3041あ U+3042
ぃ U+3043い U+3044
ぅ U+3045う U+3046
ぇ U+3047え U+3048
ぉ U+3049お U+304A
ゕ U+3095か U+304B
ゖ U+3096け U+3051
𛄲 U+1B132こ U+3053
っ U+3063つ U+3064
ゃ U+3083や U+3084
ゅ U+3085ゆ U+3086
ょ U+3087よ U+3088
ゎ U+308Eわ U+308F
𛅐 U+1B150ゐ U+3090
𛅑 U+1B151ゑ U+3091
𛅒 U+1B152を U+3092
ァ U+30A1ア U+30A2
ィ U+30A3イ U+30A4
ゥ U+30A5ウ U+30A6
ェ U+30A7エ U+30A8
ォ U+30A9オ U+30AA
ヵ U+30F5カ U+30AB
ㇰ U+31F0ク U+30AF
ヶ U+30F6ケ U+30B1
𛅕 U+1B155コ U+30B3
ㇱ U+31F1シ U+30B7
ㇲ U+31F2ス U+30B9
ッ U+30C3ツ U+30C4
ㇳ U+31F3ト U+30C8
ㇴ U+31F4ヌ U+30CC
ㇵ U+31F5ハ U+30CF
ㇶ U+31F6ヒ U+30D2
ㇷ U+31F7フ U+30D5
ㇸ U+31F8ヘ U+30D8
ㇹ U+31F9ホ U+30DB
ㇺ U+31FAム U+30E0
ャ U+30E3ヤ U+30E4
ュ U+30E5ユ U+30E6
ョ U+30E7ヨ U+30E8
ㇻ U+31FBラ U+30E9
ㇼ U+31FCリ U+30EA
ㇽ U+31FDル U+30EB
ㇾ U+31FEレ U+30EC
ㇿ U+31FFロ U+30ED
ヮ U+30EEワ U+30EF
𛅤 U+1B164ヰ U+30F0
𛅥 U+1B165ヱ U+30F1
𛅦 U+1B166ヲ U+30F2
𛅧 U+1B167ン U+30F3
ァ U+FF67ア U+FF71
ィ U+FF68イ U+FF72
ゥ U+FF69ウ U+FF73
ェ U+FF6Aエ U+FF74
ォ U+FF6Bオ U+FF75
ッ U+FF6Fツ U+FF82
ャ U+FF6Cヤ U+FF94
ュ U+FF6Dユ U+FF95
ョ U+FF6Eヨ U+FF96

隐私考虑

本规范会泄漏用户安装的断字和换行字典。

安全考虑

本规范未引入任何新的安全考量。

致谢

若无以下人士的帮助,本规范将无法完成:Addison Phillips, Aharon Lanin, Alan Stearns, Ambrose Li, Arnold Schrijver, Arye Gittelman, Ayman Aldahleh, Ben Errez, Bert Bos, Chris Lilley, Chris Pratley, Chris Thrasher, Chris Wilson, Dave Hyatt, David Baron, Emilio Cobos Álvarez, Eric LeVine, Etan Wexler, Frank Tang, Håkon Wium Lie, IM Mincheol, Ian Hickson, James Clark, Javier Fernandez, John Daggett, Jonathan Kew, Ken Lunde, Laurie Anna Edlund, Marcin Sawicki, Martin Dürst, Martin Heijdra, Masafumi Yabe, Masayasu Ishikawa, Michael Jochimsen, Michel Suignard, Mike Bemford, Myles Maxfield, Nat McCully, Paul Nelson, Rahul Sonnad, Richard Ishida, Shinyu Murakami, Stephen Deach, Steve Zilles, Takao Suzuki, Tantek Çelik, Xidorn Quan, Yaniv Feinberg。

变更 (Changes)

最近的变更

2023 年 9 月候选推荐标准草案 以来,已进行了以下规范性更改

2023 年 2 月候选推荐标准草案 以来,已进行了以下规范性更改。

2020 年 12 月候选推荐标准 以来,已进行了以下规范性更改。

此外,还有一些小的编辑修复。

旧版本更改

另请参见涵盖 2020 年和 2019 年候选推荐标准之前的早期工作草案的先前更改列表,以及涵盖 2013 年至 2020 年间所有评论的意见处理结果

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语相结合来表达。本文档规范性部分中的关键词“MUST”(必须)、“MUST NOT”(不得)、“REQUIRED”(必需)、“SHALL”(应)、“SHALL NOT”(不应)、“SHOULD”(推荐)、“SHOULD NOT”(不推荐)、“RECOMMENDED”(建议)、“MAY”(可以)和“OPTIONAL”(可选)应按照 RFC 2119 中的描述进行解释。然而,为了可读性,这些词在本文档中不以全大写形式出现。

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

本规范中的示例均以“例如”一词引入,或者通过 class="example" 与规范性文本隔开,如下所示

这是一个说明性示例。

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

注意,这是一个说明性注释。

建议(Advisements)是规范性章节,旨在引起特别注意,并使用 <strong class="advisement"> 与其他规范性文本区分开来,如下所示: 用户代理必须提供可访问的替代方案。

一致性类别

本规范为三类一致性定义了一致性要求。

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

如果样式表包含的所有使用本模块定义语法的语句,根据通用 CSS 语法及本模块定义的各功能语法均有效,则该样式表符合本规范。

如果渲染器除了按相应规范解释样式表外,还通过正确解析本规范定义的所有功能并相应地渲染文档来支持这些功能,则该渲染器符合本规范。然而,由于设备限制导致 UA 无法正确渲染文档,并不意味着该 UA 不符合规范。(例如,UA 无需在单色显示器上渲染颜色。)

如果创作工具编写的样式表根据通用 CSS 语法及本模块中各功能的语法是句法正确的,并符合本模块中描述的所有其他样式表一致性要求,则该创作工具符合本规范。

部分实现

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

不稳定和专有特性的实现

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

非实验性实现

一旦规范达到候选推荐阶段,非实验性实现即可成为可能,实现者应发布他们能够证明根据规范正确实现的任何 CR 级别特性的无前缀实现。

为建立并保持 CSS 在不同实现间的互操作性,CSS 工作组请求非实验性的 CSS 渲染器在发布任何 CSS 功能的无前缀实现之前,向 W3C 提交一份实现报告(并在必要时提交用于该实现报告的测试用例)。提交给 W3C 的测试用例需经 CSS 工作组审阅和修正。

有关提交测试用例和实现报告的详细信息,请访问 CSS 工作组网站 https://w3org.cn/Style/CSS/Test/。问题可发送至 public-css-testsuite@w3.org 邮件列表。

候选推荐标准 (CR) 退出标准

为了使本规范能够推进到提案推荐标准 (PR),必须至少有两个独立的、可互操作的每个功能的实现。每个功能可以由不同组的产品实现,不要求所有功能都由单个产品实现。为了实现此标准,我们定义以下术语

independent
每个实现必须由不同的方开发,并且不能共享、重用或派生自另一个合格实现所使用的代码。对本规范实现无影响的代码段不受此要求限制。
可互操作
通过官方 CSS 测试套件中的相应测试用例,或者如果实现不是 Web 浏览器,则通过等效测试。如果此类用户代理 (UA) 用于声明互操作性,则测试套件中的每个相关测试都应创建等效测试。此外,如果此类 UA 用于声明互操作性,则必须有一个或多个额外的 UA,它们也可以以相同的方式通过这些等效测试,以实现互操作性的目的。等效测试必须公开,以供同行评审。
实现
用户代理,即
  1. 实现了该规范。
  2. 对公众可用。该实现可以是出货产品或其他公开可用的版本(即测试版、预览发布版或“每日构建版”)。非出货产品发布版必须已实现该功能至少一个月,以证明其稳定性。
  3. 不是实验性的(即,专门为通过测试套件设计且不打算用于正常使用的版本)。

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

索引

本规范定义的术语

通过引用定义的术语

引用

规范性引用

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS 背景与边框模块 Level 3. 2024年3月11日. CR. URL: https://w3org.cn/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS 盒模型模块 Level 4. 2024 年 8 月 4 日. WD. URL: https://w3org.cn/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. CR. URL: https://w3org.cn/TR/css-cascade-5/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023年3月30日. CR. URL: https://w3org.cn/TR/css-display-3/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS 字体模块 Level 3. 2018年9月20日. REC. URL: https://w3org.cn/TR/css-fonts-3/
[CSS-FONTS-4]
Chris Lilley. CSS Fonts Module Level 4. 2024年2月1日. WD. URL: https://w3org.cn/TR/css-fonts-4/
[CSS-INLINE-3]
Elika Etemad. CSS Inline Layout Module Level 3. 2024 年 8 月 12 日. WD. URL: https://w3org.cn/TR/css-inline-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023年3月29日. WD. URL: https://w3org.cn/TR/css-overflow-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS 伪元素模块 Level 4. 2022年12月30日. WD. URL: https://w3org.cn/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 2022年12月31日. WD. URL: https://w3org.cn/TR/css-ruby-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021年12月17日. WD. URL: https://w3org.cn/TR/css-sizing-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块 Level 3. 2024年3月22日. CR. URL: https://w3org.cn/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块 4 级 (CSS Values and Units Module Level 4). 2024年3月12日. WD. URL: https://w3org.cn/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://w3org.cn/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://w3org.cn/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://w3org.cn/TR/CSS21/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://w3org.cn/TR/cssom-1/
[HTML]
Anne van Kesteren; et al. HTML 标准. Living Standard. URL: https://html.whatwg.cn/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 标准. Living Standard. URL: https://infra.spec.whatwg.org/
[RFC2119]
S. Bradner. RFC 中用于指示要求级别的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX11]
Ken Lunde 小林劍󠄁. East Asian Width. 2023 年 7 月 17 日. Unicode Standard Annex #11. URL: https://www.unicode.org/reports/tr11/tr11-41.html
[UAX14]
Robin Leroy. Unicode Line Breaking Algorithm. 2023 年 8 月 15 日. Unicode Standard Annex #14. URL: https://www.unicode.org/reports/tr14/tr14-51.html
[UAX24]
Ken Whistler. Unicode Script Property. 2023 年 8 月 14 日. Unicode Standard Annex #24. URL: https://www.unicode.org/reports/tr24/tr24-36.html
[UAX29]
Josh Hadley. Unicode Text Segmentation. 2023 年 8 月 16 日. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-43.html
[UAX44]
Ken Whistler. Unicode Character Database. 2023 年 9 月 6 日. Unicode Standard Annex #44. URL: https://www.unicode.org/reports/tr44/tr44-32.html
[UAX50]
Ken Lunde 小林劍󠄁; Koji Ishii 石井宏治. Unicode Vertical Text Layout. 2023 年 7 月 17 日. Unicode Standard Annex #50. URL: https://www.unicode.org/reports/tr50/tr50-29.html
[UAX9]
Manish Goregaokar मनीष गोरेगांवकर; Robin Leroy. Unicode Bidirectional Algorithm. 2023 年 8 月 15 日. Unicode Standard Annex #9. URL: https://www.unicode.org/reports/tr9/tr9-48.html
[UNICODE]
Unicode 标准. URL: https://www.unicode.org/versions/latest/

参考资料

[BCP47]
A. Phillips, Ed.; M. Davis, Ed.. 语言标识标签. 2009年9月. 最佳当前实践. URL: https://www.rfc-editor.org/rfc/rfc5646
[CLREQ]
Fuqiao Xue; Richard Ishida. Requirements for Chinese Text Layout - 中文排版需求. 2024 年 7 月 1 日. NOTE. URL: https://w3org.cn/TR/clreq/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS 文本装饰模块 Level 3. 2022年5月5日. CR. URL: https://w3org.cn/TR/css-text-decor-3/
[DOM]
Anne van Kesteren. DOM 标准. Living Standard. URL: https://dom.spec.whatwg.org/
[ILREQ]
Swaran Lata. 印度语言布局需求. 2020年5月29日. WD. URL: https://w3org.cn/TR/ilreq/
[ISO15924]
Code for the representation of names of scripts. International Organization for Standardization. 1998. ISO 15924:1998. Draft International Standard
[JIS4051]
日语文档排版规则 (『日本語文書の組版方法』). 日本标准协会. 2004. JIS X 4051:2004. 日文
[JLREQ]
Hiroyuki Chiba; et al. 日语排版要求 (日本語組版処理の要件). 2020年8月11日. NOTE. URL: https://w3org.cn/TR/jlreq/
[JUSTIFY]
Elika Etemad; Richard Ishida. Approches to Full Justification. URL: https://w3org.cn/International/articles/typography/justification
[RFC6919]
R. Barnes; S. Kent; E. Rescorla. RFC 中用于指示需求级别的补充关键词. 2013年4月1日. 实验性质. URL: https://www.rfc-editor.org/rfc/rfc6919
[TYPOGRAPHY]
Richard Ishida. Language enablement index. 2024 年 8 月 15 日. NOTE. URL: https://w3org.cn/TR/typography/
[XML10]
Tim Bray; et al. 可扩展标记语言 (XML) 1.0 (第五版). 2008年11月26日. REC. URL: https://w3org.cn/TR/xml/
[ZHMARK]
General Rules for Punctuation (《标点符号用法》). 2011. GB/T 15834―2011. In Chinese.

属性索引

名称初始值应用于继承百分比动画类型 (Animation type)规范顺序计算值
hanging-punctuation none | [ first || [ force-end | allow-end ] || last ]none(无)text不可用离散 (discrete)按语法指定的关键字
hyphens none | manual | automanualtext不可用离散 (discrete)不可用指定关键字
letter-spacing normal | <length>normalinline boxes and text不可用按计算值类型不可用绝对长度
line-break auto | loose | normal | strict | anywhereautotext不可用离散 (discrete)不可用指定关键字
overflow-wrap normal | break-word | anywherenormaltext不可用离散 (discrete)不可用指定关键字
tab-size <number [0,∞]> | <length [0,∞]>8 text不可用按计算值类型不可用指定的数值或绝对长度
text-align start | end | left | right | center | justify | match-parent | justify-allstart块容器见各个属性离散 (discrete)不可用见各个属性
text-align-all start | end | left | right | center | justify | match-parentstart块容器不可用离散 (discrete)不可用keyword as specified, except for match-parent which computes as defined above
text-align-last auto | start | end | left | right | center | justify | match-parentauto块容器不可用离散 (discrete)不可用keyword as specified, except for match-parent which computes as defined above
text-indent [ <length-percentage> ] && hanging? && each-line?0 块容器refers to block container’s own inline-axis inner size按计算值类型按语法computed <length-percentage> value, plus any specified keywords
text-justify auto | none | inter-word | inter-characterautotext不可用离散 (discrete)不可用specified keyword (except for the distribute legacy value)
text-transform none | [capitalize | uppercase | lowercase ] || full-width || full-size-kananone(无)text不可用离散 (discrete)不可用指定关键字
white-space normal | pre | nowrap | pre-wrap | break-spaces | pre-linenormaltext不可用离散 (discrete)不可用指定关键字
word-break normal | keep-all | break-all | break-wordnormaltext不可用离散 (discrete)不可用指定关键字
word-spacing normal | <length>normaltext不适用按计算值类型不可用绝对长度
word-wrap normal | break-word | anywherenormaltext不可用离散 (discrete)不可用指定关键字