分页媒体 CSS 生成内容模块

W3C 工作草案,

关于此文档的更多细节
此版本
https://w3org.cn/TR/2024/WD-css-gcpm-3-20240125/
最新发布版本
https://w3org.cn/TR/css-gcpm-3/
编辑草案
https://drafts.csswg.org/css-gcpm/
历史
https://w3org.cn/standards/history/css-gcpm-3/
反馈
CSS 工作组问题仓库
文档内联
编辑
(BFO)
Google
前任编辑
(Hachette Livre)
Håkon Wium Lie (Opera Software)
建议编辑此规范
GitHub 编辑器

摘要

图书和其他分页媒体常常使用特殊技术来显示信息。内容可能会被移动到页面的特殊区域或为其生成内容,例如页眉或脚注。页面内的生成内容(如制表符引导线或交叉引用)帮助读者在页面内外进行导航。

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

关于本文档

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

本文档由 CSS 工作组工作草案形式发布,遵循 推荐标准轨道。作为工作草案发布并不意味着得到 W3C 及其成员的认可。

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

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

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

本文档由在 W3C 专利政策下运作的组织制作。W3C 维护一份与该组织交付成果相关的 公开专利披露列表;该页面还包含披露专利的说明。任何知悉其认为包含 必要权利要求 的专利的个人,必须按照 W3C 专利政策第 6 节披露该信息。

引言

分页媒体对文档内容的显示有许多 特殊需求,这些需求随着印刷书籍的悠久历史而演进。运行页眉和页脚可作为导航辅助。注释可能会出现在页面底部,作为脚注。页面本身的属性可能会依据其内容或在文档中的位置而改变。引导线在视觉上连接相关内容。交叉引用可能需要生成的文本。某些分页媒体格式(例如 PDF)使用书签进行导航。

本模块定义了新属性和新取值,以便作者能够在分页媒体中使用这些技术。

值定义

本规范遵循来自 [CSS21]CSS 属性定义约定,并使用来自 [CSS-VALUES-3]值定义语法。本规范中未定义的值类型在 CSS Values & Units [CSS-VALUES-3] 中定义。与其他 CSS 模块的结合可能会扩展这些值类型的定义。

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

1. 运行页眉和页脚

[CSS3PAGE] 描述了十六个可用于运行页眉和页脚的页面边距盒,但未描述向这些盒中插入内容的机制。本模块提供了两种实现方式。命名字符串可复制文本以在边距盒中重复使用。运行元素则将完整的元素(包括样式和结构)从文档移动到边距盒中。

1.1. 命名字符串

string-set 属性会把元素的文本内容复制到一个 命名字符串 中,充当变量。可以使用 string() 函数来获取该命名字符串的文本内容。由于这些变量在同一页上可能会改变,string() 函数的可选第二个参数允许作者选择使用页面上的哪一个值。

1.1.1. string-set 属性

名称string-set
[ <custom-ident> <content-list> ]# | none
初始值 none(无)
应用于 所有元素,但不包括伪元素
可继承
百分比 不适用
计算值 指定的值
规范顺序 按语法
动画类型 离散 (discrete)

用户代理应在所有介质(包括非可视介质)上支持此属性。

string-set 属性包含一个或多个 pair,每个 pair 由一个自定义标识符(即命名字符串的名称)后跟一个 <content-list>,该列表描述如何构造该命名字符串的值。

<content-list> 可扩展为以下一个或多个值,顺序任意。

<content-list> = [ <string> | <counter()> | <counters()> | <content()> | <attr()> ]+
<string>
一个 字符串,定义见 [CSS21]
<counter()>
一个 counter() 函数,定义见 [CSS21]
<counters()>
一个 counters() 函数,定义见 [CSS21]
<content()>
The content() 函数,下面将作说明。
<attr()>
一个 attr() 函数,定义见 [CSS-VALUES-3]
1.1.1.1. content() 函数
content() = content([text | before | after | first-letter ])

我们该如何为该函数定义默认值?

text
元素的字符串值,等同于已设置 white-space: normal 时的表现。这是默认值。
before
::before 伪元素的字符串值,等同于已设置 white-space: normal 时的表现。
after
::after 伪元素的字符串值,等同于已设置 white-space: normal 时的表现。
first-letter
元素的首字母,按 ::first-letter 伪元素的定义。

命名字符串的内容值在元素的内容框首次创建(或如果元素的 display 为 none,则在本应创建时)时被赋值。页面的 入口值 是前一页面结束时生效的赋值。页面的 退出值 是当前页面结束时生效的赋值。

每当元素的值发生改变,命名字符串的值也会更新。用户代理必须能够记忆命名字符串的多个历史值,因为 string() 函数可以返回过去、当前或将来的赋值。

HTML

<h1>Loomings</h1>

CSS

h1::before { content: 'Chapter ' counter(chapter); }
h1 { string-set: header content(before) ':' content(text); }
h1::after { content: '.'; }

命名字符串 “header” 的值将是 “Chapter 1: Loomings”。

HTML
<section title="Loomings">

CSS

section { string-set: header attr(title) }

“header” 字符串的值将是 “Loomings”。

1.1.2. string() 函数

string() 函数用于通过 content 属性把命名字符串的值拷贝到文档中。该函数需要一个参数——命名字符串的名称。因为同一页上同一命名字符串的值可能会出现多次(随着定义该字符串的元素出现),可选的第二参数指明在出现多次赋值时应使用哪一个值。

该函数的第二参数可以是以下关键字之一:

first
使用页面上的首次赋值。如果页面上没有赋值,则使用 入口值first 为默认值。
start
如果元素是页面上的第一个元素,则使用首次赋值的值;否则使用 入口值。如果元素尚未出现,入口值 可能为空。
last
使用命名字符串的 退出值
first-except
这与 first 完全相同,只是当值在页面上被赋值时使用空字符串。
CSS
@page {
   size: 15cm 10cm;
   margin: 1.5cm;

   @top-left {
   content: "first: " string(heading, first);
   }
   @top-center {
   content: "start: " string(heading, start);
   }
    @top-right {
    content: "last: " string(heading, last);
   }
  }

h2 { string-set: heading content() }

下面的示例展示了 “heading” 字符串在不同页面上的 first、start、last 三种赋值。

start 值为空,因为页面起始时尚未设置该字符串。
由于页面以 h2 开头,start 值即为该标题的值。
因为本页顶部没有 h2start 值取自前一页的 退出值

1.2. 运行元素

许多页眉和页脚不能仅用未格式化的文字表示。例如,书名作为运行页眉时可能包含斜体字。需要一种机制将元素整体(包括样式和结构)移动或复制到边距盒中。为此,我们把 running() 值添加到 position 属性,并把 element() 值添加到 content 属性。
@page {
  @top { content: element(header); }
}

h1 { position: running(header); }

在本例中,h1 元素被放置在 @top 边距盒中,保持原有的格式以及所有子元素。它不再在普通文档流中显示。

1.2.1. running() 值

position: running(custom-ident) 会将元素(以及关联的 ::before 与 ::after 伪元素)从正常流中移除,并使其可通过 element() 放置到页面边距盒中。元素仍从文档中原始位置继承属性,但不在该位置显示。

名称position
新值 <running()>
running() = running( <custom-ident> )

HTML

<p class="rh"><i>Miranda v. Arizona</i> in Context</p>
<h2><i>Miranda v. Arizona</i> in Context</h2>

CSS

@top-center {
  content: element(heading);
  }

p.rh {
  position: running(heading);
  }

p.rh::before {
  content: counter(page) ' / ';
  }

running header using running elements

在页面边距盒中的运行元素

元素的 value() 只能在页面边距盒中使用,且不能与 content 属性的其他可能取值组合使用。

如果我们还能 复制(而不是仅移动)元素,这一想法将更加实用。这样可以避免上例中 HTML 的重复。

Bert Bos 提出了替代语法,允许在运行页眉中既移动又复制元素。以下示例中,h2 元素仍保留在文档中的正常位置,同时也被复制到运行页眉中。

h2 {
display: block;
running: chapter;
font-size: 18pt;
font-weight: bold;
}

h2:running {
display: inline;
font-size: 11pt;
font-weight: normal;
font-variant: small-caps;
letter-spacing: 1pt;
}

@page {
  @top-center {
    content: element(chapter);
    }
  }
名称running
<custom-ident>
初始值 none(无)
应用于 元素
可继承
百分比 不适用
计算值 指定的值
规范顺序 按语法
动画类型 离散 (discrete)

用户代理应在所有介质(包括非可视介质)上支持此属性。

1.2.2. element() 值

element() 取值用于将已通过 running() 从正常流中移除的元素放入页面边距盒。当元素的值发生变化时,element() 的取值也会随之更新。

string() 类似,element() 也接受可选关键字,以描述在页面上出现多次赋值时应使用哪个值。用户代理必须能够记忆多个历史值,因为 element() 能返回过去、当前或将来的赋值。

名称内容
新值 <element()>
element() = element( <custom-ident> , [ first | start | last | first-except ]? )

2. 脚注

辅助内容可能会被移动到页面的底部或侧边。当此类内容被移至页面底部并留下引用指示器时,就会产生脚注。

2.1. 术语

脚注是复杂对象(见 脚注章节,来自 [dpub-latinreq]),因此在继续之前先定义一些术语会更有帮助。

page with footnotes

脚注术语
footnote element
包含脚注内容的元素,该元素会从文档流中移除并以脚注形式显示。
footnote marker(亦称 footnote number)
位于脚注主体旁边的数字或符号,用以标识具体的脚注。脚注标记应使用与对应的 footnote call 相同的数字或符号,尽管标记里可以包含额外的标点符号。
footnote body
脚注标记放在 footnote element 前面,两者共同构成 footnote body,随后会被放置到脚注区域中。
footnote call(亦称 footnote reference)
出现在正文中的数字或符号,用来指向对应的脚注主体。
footnote area
用于显示脚注的页面区域。
footnote rule(亦称 footnote separator)
通常使用水平分隔线将脚注区域与页面其余部分分开。若页面没有脚注,则分隔线(以及整个脚注区域)不可渲染。

2.2. 创建脚注

float: footnote 应用于元素即可使其成为脚注。这会触发以下操作:
  1. 脚注元素从流中移除,并在其原位置插入一个 ::footnote-call 伪元素,作为脚注的引用。
  2. 在脚注元素开头放置一个 ::footnote-marker 伪元素,用以标识脚注。两者合起来构成脚注主体。
  3. 脚注计数器递增。
  4. 脚注主体被放置在页面底部的脚注区域中。属于同一页面的脚注元素按文档顺序放入该页的脚注区域。
HTML
<p>Though the body was erect, the head was thrown back so that the closed eyes were pointed towards the needle of the tell-tale that swung from a beam in the ceiling.<span class="footnote">The cabin-compass is called the tell-tale, because without going to the compass at the helm, the Captain, while below, can inform himself of the course of the ship.</span></p>

CSS

@page {
  @footnote {
    float: bottom;
  }
}

span.footnote { float: footnote; }

为何在脚注区域使用 float:bottom?将脚注浮动到脚注区域,然后再将脚注区域本身浮动似乎过于复杂,因为实现通常不允许脚注区域在其它地方浮动。注意有的实现允许脚注区域使用绝对定位。

2.3. 脚注的类型

以下 float 属性的新取值会创建脚注元素:
名称float
新值 footnote
footnote
每个脚注元素会被放置到该页面的脚注区域。

footnote-display 属性决定脚注是作为块级元素还是行内元素显示。

名称footnote-display
block | inline | compact
初始值 block
应用于 元素
可继承
百分比 不适用
计算值 指定的值
规范顺序 按语法
动画类型 离散 (discrete)
block
脚注元素作为块级元素放置在脚注区域中。
inline
脚注元素作为行内元素放置在脚注区域中。
compact
用户代理自行决定将给定脚注元素作为块级还是行内放置。如果同一行可以容纳两个或更多脚注,则应使用行内布局。

2.4. 脚注区域

页面上下文 中使用 @footnote 规则可以描述用于显示脚注的 页面区域。此规则定义的盒子(若使用)会包含该页面上出现的所有脚注元素。

如何在 CSS3‑Page 的语法中描述该规则?

2.4.1. 脚注区域的位置

脚注区域的底部外边距边缘定位到页面区域的底部。脚注区域只能包含脚注。

在多列文本中脚注如何工作?Prince 使用 float: prince-column-footnote 在列底部而非页面底部创建脚注。

大多数实现支持类似 float: bottom 的页面浮动。页面浮动应位于脚注区域之上。该如何在规范中说明?

2.4.2. 脚注区域的大小

脚注区域的 max-height 属性限制该区域的尺寸,除非页面仅包含脚注(如文档最后一页的情况)。

由于页面只由脚注组成并非理想状态,用户代理 may 为脚注区域设置默认的 max‑height 值。

2.5. 脚注计数器

脚注计数器 是与 footnote element 关联的预定义 counter。它的值是用于标识脚注的数字或符号,并在 footnote call 与 footnote marker 中使用。每个脚注都应递增该计数器。

2.5.1. 脚注计数器的值

脚注计数器(如同其他计数器)可以使用任意 计数样式。脚注常使用一系列符号。

::footnote-call { content: counter(footnote, symbols('*', '†', '‡', '§')); }

::footnote-marker { content: counter(footnote, symbols('*', '†', '‡', '§')) '. '; }

2.5.2. 重置脚注计数器

脚注计数器可以在每页上重置。

@page {
  counter-reset: footnote;
  @footnote { … }
}

请注意,脚注计数器的值应取决于脚注元素在文档树中的位置,而不是它最终被放置的位置。脚注元素有时会在脚注引用之后才出现在页面上,但两者必须使用相同的计数器值。

2.6. footnote-call 伪元素

当脚注元素被从流中移除时,会在其位置插入一个 ::footnote-call 伪元素,作为对脚注的引用。默认情况下,该伪元素的内容为脚注计数器的值,显示为上标数字。
::footnote-call {
content: counter(footnote);
vertical-align: baseline;
font-size: 100%;
line-height: inherit;
font-variant-position: super;
}

2.7. footnote-marker 伪元素

::footnote-marker 伪元素表示脚注元素的标记(即标识每个脚注的数字或符号)。它的行为类似 ::marker 伪元素,定义见 [CSS3LIST]。该伪元素位于其父元素内容的开头,默认为行内元素。可以像其他 ::marker 元素一样进行样式化,默认样式应包括 list-style-position: inside
::footnote-marker {
content: counter(footnote);
}

::footnote-marker::after {
content: '. ';
}

2.8. 渲染脚注和 footnote policy

渲染脚注可能比较复杂。如果脚注出现在页面底部附近,页面可能没有足够空间容纳脚注主体。footnote-policy 属性让作者能够在难以布局的页面上施加一定的影响。

名称footnote-policy
auto | line | block
初始值 auto
应用于 元素
可继承
百分比 不适用
计算值 指定的值
规范顺序 按语法
动画类型 离散 (discrete)
auto
用户代理自行决定如何渲染脚注,且可以将脚注主体放在脚注引用之后的后续页面上。脚注主体永远不能出现在脚注引用之前的页面。
如果当前页面因空间不足而无法放置某脚注主体,用户代理将在包含脚注引用的行开头强制分页,使引用和脚注主体一起出现在下一页。注意,此时用户代理必须遵守 孤行和寡行 设置,必要时可能需在更早的行上插入分页符。
block
line,只是在脚注所在段落之前强制分页。

我们需要一种脚注布局算法

2.9. 未来方向

下一阶段将加入旁注、列脚注以及多个脚注区域等功能。

3. 选择页面

一个分页文档由一系列页面组成。[CSS3PAGE] 定义了 页面选择器,用于选择文档的第一页、左页、右页以及空白页。这里我们在此基础上扩展,使其能够选择任意文档页面。

3.1. 页面选择器

:nth() 页面伪类允许选择任意文档页面。该伪类接受形如 An + B 的参数,定义见 [CSS3SYN]。当它应用于默认的 @page 规则时,:nth() 选中索引匹配该参数的文档页面。
:nth() = :nth( <an+b> [of <custom-ident>]? )

:nth() 与页面计数器无关,页面计数器可能会重置并使用各种编号方案。

:nth() 选择器应用于已命名页面且该页面属于一个页面组(见下文)时,它选中该页面组中的第 n 页。

@page :nth(1)

这将选中文档的第一页。

@page :nth(2n)
这将选中文档中所有偶数页。

3.2. 页面组

许多分页文档具有重复结构,如多个章节、节或文章。每个子结构的第一页通常需要特殊处理,但 [CSS3PAGE] 并未定义选择每章第一页(不同于整个文档的第一页)的方法。

page 属性与强制换页属性同时作用于同一元素时,会创建一个 页面组页面组 包含该元素实例产生的所有页面。当渲染该元素的新实例时,将启动一个新的 页面组

一个页面可以属于多个页面组,因为某个 页面组 的祖先或后代可能属于另一个 页面组

CSS
div { 
  page: A;
  break-before: page;
}
child { 
  page: B;
  break-before: page;
}
一个页面可能属于多个页面组。
请注意,第 5 页可以通过三种方式进行选择。
@page :nth(5 of A) /* will select 5th page of every <div> */
@page :nth(1 of B) /* will select first page of every <child> */
@page :nth(5)   /* will select 5th page of document */

考虑如下 HTML:

<div class="chapter">
<h1>Chapter One</h1>
<p>some text</p>
<table class="broadside">
...
</table>
...
</div>
<div class="chapter">
<h1>Chapter Two</h1>
<p>some text</p>
...
<table class="broadside">
...
</table>
...
</div>

以及下面的 CSS:

div.chapter {
  page: body;
  break-before: page;
}

table.broadside {
  page: broadside;
  break-before: page;
}

在此情况下,每个章节都会形成一个独立的页面组。@page:nth(3 of body) 将选中每章的第三页,即便该页使用了 “broadside” 命名页面。@page:nth(1) 则只会选中文档的第一页,@page:first 亦如此。

4. 引导线(已移动)

现已在 [CSS3‑CONTENT] 中描述

5. 交叉引用(已移动)

现在已在 [CSS3-CONTENT] 中描述

6. 书签(已移动)

现在已在 [CSS3-CONTENT] 中描述

附录 A:它们现在在哪里?

许多在 2011 年 11 月 29 日工作草案 中的章节已被迁移到其他规范。以下是各章节迁移位置的说明。

页面标记和出血区

此节已移至 CSS Paged Media Module Level 3

CMYK 颜色

此节已移至 CSS Color Module Level 5

空白页的样式

此节已移至 CSS Paged Media Module Level 3

分页演示

此节已移至 CSS Overflow Module Level 4

此内容在 WHATWG CSS Books 中讨论。

页面浮动

此节已移至 CSS Page Floats

选择列和页面

关于选择列的简短说明可在 WHATWG CSS Books 中找到。

附录 B:默认 UA 样式表

本附录仅供参考,用于帮助 UA 开发者实现 HTML 的默认样式表,但 UA 开发者可根据需要自由忽略或修改。

@page {
  counter-reset: footnote;
  @footnote {
    counter-increment: footnote;
    float: bottom;
    column-span: all;
    height: auto;
  }
}

::footnote-marker {
  content: counter(footnote);
  list-style-position: inside;
}

::footnote-marker::after {
  content: '. ';
}

::footnote-call {
  content: counter(footnote);
  vertical-align: super;
  font-size: 65%;
}

@supports ( font-variant-position: super ) {
  ::footnote-call {
    content: counter(footnote);
    vertical-align: baseline;
    font-size: 100%;
    line-height: inherit;
    font-variant-position: super;
  }
}

h1 { bookmark-level: 1 }
h2 { bookmark-level: 2 }
h3 { bookmark-level: 3 }
h4 { bookmark-level: 4 }
h5 { bookmark-level: 5 }
h6 { bookmark-level: 6 }

附录 C:更改

2014 年 5 月 13 日工作草案 以来的更改

2013 年 9 月 24 日编辑稿 以来的更改

2011 年 11 月 29 日工作草案 以来的更改

WHATWG CSS Books 规范的差异

隐私考量

本规范未报告任何新的隐私考量。

安全考量

本规范未报告任何新的安全考量。

致谢

若没有 Håkon Wium Lie 的巨大贡献,此工作不可能完成。

Chris Lilley、Elika J. Etemad、Alan Stearns、L. David Baron、Bert Bos、Florian Rivoal、[$your_name, ", " ]+ 与 Liam Quin 提供了宝贵的反馈。

一致性

文档约定

一致性要求通过描述性断言和 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 邮件列表。

索引

本规范定义的术语

通过引用定义的术语

引用

规范性引用

[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2023年4月3日. WD. URL: https://w3org.cn/TR/css-position-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块第 3 级. 2022年12月1日. CR. URL: https://w3org.cn/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2023年12月18日. WD. URL: https://w3org.cn/TR/css-values-4/
[CSS-VALUES-5]
CSS Values and Units Module Level 5. 编辑草案. URL: https://drafts.csswg.org/css-values-5/
[CSS21]
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/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016年4月12日. WD. URL: https://w3org.cn/TR/CSS22/
[CSS3-CONTENT]
Elika Etemad; Dave Cramer. CSS Generated Content Module Level 3. 2019年8月2日. WD. URL: https://w3org.cn/TR/css-content-3/
[CSS3LIST]
Elika Etemad; Tab Atkins Jr.. CSS Lists and Counters Module Level 3. 2020年11月17日. WD. URL: https://w3org.cn/TR/css-lists-3/
[CSS3PAGE]
Elika Etemad. CSS Paged Media Module Level 3. 2023年9月14日. WD. URL: https://w3org.cn/TR/css-page-3/
[CSS3SYN]
Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3. 2021年12月24日. CR. URL: https://w3org.cn/TR/css-syntax-3/
[RFC2119]
S. Bradner. RFC 中用于指示要求级别的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119

参考资料

[DPUB-LATINREQ]
Dave Cramer. 拉丁文本布局和分页的要求. FPWD. URL: https://w3org.cn/TR/dpub-latinreq/

属性索引

名称初始值应用于继承百分比动画类型 (Animation type)规范顺序计算值
footnote-display block | inline | compactblock元素不适用离散 (discrete)按语法指定的值
footnote-policy auto | line | blockauto元素不适用离散 (discrete)按语法指定的值
running <custom-ident>none(无)元素不适用离散 (discrete)按语法指定的值
string-set [ <custom-ident> <content-list> ]# | nonenone(无)所有元素,但不包括伪元素不适用离散 (discrete)按语法指定的值

问题索引

我们该如何为该函数定义默认值?

如果我们还能 复制(而不是仅移动)元素,这一想法将更加实用。这样可以避免上例中 HTML 的重复。

Bert Bos 提出了替代语法,允许在运行页眉中既移动又复制元素。以下示例中,h2 元素仍保留在文档中的正常位置,同时也被复制到运行页眉中。

h2 {
display: block;
running: chapter;
font-size: 18pt;
font-weight: bold;
}

h2:running {
display: inline;
font-size: 11pt;
font-weight: normal;
font-variant: small-caps;
letter-spacing: 1pt;
}

@page {
  @top-center {
    content: element(chapter);
    }
  }
名称running
<custom-ident>
初始值 none(无)
应用于 元素
可继承
百分比 不适用
计算值 指定的值
规范顺序 按语法
动画类型 离散 (discrete)

用户代理应在所有介质(包括非可视介质)上支持此属性。

为什么在脚注区域使用 float:bottom?将脚注浮动到脚注区域,然后再将脚注区域本身浮动,显得过于复杂,因为实现通常不允许脚注区域在其它位置浮动。需要注意的是,有些实现允许脚注区域使用绝对定位。
如何在 CSS3-Page 的语法中描述此行为?
脚注在多列文本中如何工作?Prince 使用 float: prince-column-footnote 在列底部而不是页面底部创建脚注。
支持脚注的实现通常也支持类似 float: bottom 的页面浮动。页面浮动应出现在脚注区域之上。该如何在规范中描述?
我们需要一个布局脚注的算法
现在已在 [CSS3-CONTENT] 中描述
现在已在 [CSS3-CONTENT] 中描述
现在已在 [CSS3-CONTENT] 中描述