样式表模式
链接到样式表
您已经知道,当安全模式为 secure 时,HTML 转换器会链接到样式表。但是,可以独立于安全模式启用此行为。如果您将大量 AsciiDoc 文档转换为 HTML,并希望它们共享相同的样式表,这可能很有益。它还可以使检查 HTML 更加简单。
如果设置了linkcss文档属性,转换器将链接到样式表而不是嵌入它。要链接到样式表,转换器会使用由rel="stylesheet"属性专门化的<link>元素。href属性将使用相对路径引用样式表。
linkcss文档属性必须在文档头结束之前设置才能生效。一种方法是在文档头中设置该属性:
= The Dangers of Wolpertingers
:url-wolpertinger: https://en.wikipedia.org/wiki/Wolpertinger
:linkcss:
Don't worry about gumberoos or splintercats.
Something far more fearsome plagues the days, nights, and inbetweens.
Wolpertingers.
== Origins
Wolpertingers are {url-wolpertinger}[ravenous beasts].
您还可以使用 API 或 CLI(此处显示)设置linkcss
$ asciidoctor -a linkcss my-document.adoc
无论哪种情况,如果您检查输出文件 my-document.html 的<head>元素,您将看到 HTML 链接到样式表。
<link rel="stylesheet" href="./asciidoctor.css">
由于我们没有指定样式表,转换器会链接到默认样式表。但是,这个样式表在哪里?让我们找出答案。
将样式表复制到输出目录
如果您链接到样式表文件,则该样式表文件必须在引用的路径下可用,以便浏览器可以访问它。对于简单的情况,Asciidoctor 会为您处理这个问题。
如果安全模式为 server 或更低,并且设置了linkcss文档属性,Asciidoctor 会将样式表复制到输出目录,以便 HTML 可以链接到它。使用默认样式表时,Asciidoctor 会将 CSS 写入输出目录中的 asciidoctor.css 文件。如果您指定自定义样式表,Asciidoctor 将复制该文件,保留文件名。此实用程序即使您指定了一个输出文件在不同目录于源文件的位置,也有效。
如果安全模式为 secure,Asciidoctor 将不会复制样式表文件,因此到它的链接将断开(除非您单独复制该文件)。
让我们回顾一下前面的示例
$ asciidoctor -a linkcss my-document.adoc
运行此命令后,样式表文件 asciidoctor.css 将被复制到与生成的 HTML 文件 my-document.html 相同的目录中。键入ls查看目录中的文件。您应该看到一个名为 asciidoctor.css 的文件。
$ ls asciidoctor.css my-document.adoc my-document.html
当您在浏览器中查看 HTML 文件时,您应该会看到应用了默认样式表。
复制还是不复制
Asciidoctor 是否将样式表复制到输出目录由copycss文档属性控制。copycss属性默认设置为,除非安全模式为 secure。
要阻止 Asciidoctor 复制样式表(独立于安全模式),请取消设置copycss文档属性。
copycss文档属性必须在文档头结束之前取消设置才能生效。一种方法是在文档头中取消设置该属性:
= The Dangers of Wolpertingers
:url-wolpertinger: https://en.wikipedia.org/wiki/Wolpertinger
:linkcss:
:!copycss:
Don't worry about gumberoos or splintercats.
Something far more fearsome plagues the days, nights, and inbetweens.
Wolpertingers.
== Origins
Wolpertingers are {url-wolpertinger}[ravenous beasts].
您还可以使用 API 或 CLI(此处显示)取消设置copycss
$ asciidoctor -a linkcss -a copycss! my-document.adoc
无论哪种情况,如果您检查输出目录,您将看不到样式表文件 asciidoctor.css(除非它已经存在)。
我们将在自定义样式表页面上再次看到copycss属性,作为覆盖要复制的样式表位置的一种方式。
禁用样式表
在生成嵌入式 HTML 时,样式表被有效地禁用,因为嵌入式 HTML 不包含<head>元素。如果您不希望转换器在独立的 HTML 中包含样式表,请使用 CLI 取消设置stylesheet属性。
$ asciidoctor -a stylesheet! my-document.adoc
您必须取消设置stylesheet属性的原因是它默认被设置(为一个空值)。当stylesheet属性被设置但为空时,HTML 转换器会使用默认样式表。通过取消设置此属性,我们告诉转换器根本不使用样式表。
当您查看生成的 HTML 文件 my-document.html 时,您将看到没有应用任何样式的纯 HTML,如下所示:
当stylesheet属性被取消设置时,linkcss和copycss属性将被忽略。 |
现在您有了一个干净的开始,让我们学习如何应用您自己的自定义样式表。