元素属性是控制AsciiDoc语法中单个块级元素和内联元素内置设置的强大手段。它们也可以用于添加补充信息,例如引用元数据和特定元素的备用内容。

元素的属性是什么?

元素属性定义了可以应用于文档中单个块元素或行内元素的内置和用户定义的设置和元数据(包括宏)。虽然include指令技术上不算是一个元素,但元素属性也可以在include指令上定义。

元素属性可以是位置属性(只有值)或命名属性(键/值对)。一些内置和扩展元素将会把位置属性映射成命名属性。每个元素都能识别一组预定义的位置属性和/或命名属性。作者可以定义任意数量的自定义元素属性,以便向扩展或文档分析器传递信息。

像文档属性一样,元素属性没有严格的模式,`options`元素属性的值也是如此。所有块元素和大多数内联元素共享一组核心的保留属性,这包括id、role、opts和title。某些元素可能会保留额外的属性和选项值。例如,source块保留了`lang`属性来设置源代码语言,和`linenums`选项来启用行号。链接宏保留了`window`属性来更改链接的目标窗口,和`nofollow`选项来防止爬虫跟踪。否则,元素属性的模式是开放的,从而允许扩展使用它们用于自己的目的。

元素属性通常用于以下目的:

  • 声明一个元素的ID

  • 开启或关闭单个元素的内置功能

  • 配置单个元素的内置功能

  • 将用户定义的信息,如引用元数据、后备文本、链接文本和目标内容,应用于单个元素。

  • 将用户定义的角色和行为应用于单个元素

与文档属性不同,元素属性是直接在它们适用的元素上使用属性列表定义的。

属性列表

属性可以通过使用[.term]属性列表(通常缩写为attrlist)赋给块元素和内联元素。

属性列表的解剖
first-positional,second-positional,named="value of named"

属性列表中的条目用逗号分隔,引号内的逗号除外。属性列表条目使用的语法决定了它是定位属性还是命名属性。分隔条目的逗号后的空格是可选的。要了解更多关于如何解析属性列表的信息,请参阅positional-and-named-attributes.html

对于*块级元素*,属性列表放置在一个或多个块属性行中。块属性行是指块的开始之上的任何文本行(例如,开放分隔符或简单内容),以 [ 开始并以 ] 结束。这一行可以与其他块元数据行交错,例如块标题。被 [] 边界包围的文本被认为是一个有效的属性列表,并且该行将自动被消耗。如果文本无法解析,一个错误消息将被发送到日志。

一个块属性线
[样式,第二位置参数,命名="命名值"]
Warning
段落的开头行可能会无意中匹配块属性行的语法。如果发生这种情况,请在行尾添加 {empty} 以破坏语法匹配。

对于*块级和内联宏*,属性列表被放置在宏的方括号之间。块宏的属性列表中的文本永远不需要逃避(转义)。对于内联宏,可能需要逃避(转义)属性列表中的文本,以避免过早结束宏或不想要的替代。

一个带有属性列表的块宏
name::target[first-positional,second-positional,named="value of named"]

对于*格式化文本*,属性列表放置在文本封闭符号前方的方括号内。然而,格式化文本仅支持限制形式的属性列表。具体地,它不支持命名属性,只支持属性简写语法。

带有属性列表的格式化文本
[#idname.rolename]*text with id and role*

属性列表:

正如前一节所述,元素属性的模式是开放式的。任何未被识别的位置属性或命名属性都将被存储在元素上,但不会影响其行为或输出。扩展可能会利用这些辅助信息来影响其行为并/或定制输出。