HTML转换器可以配置为将样式表的CSS直接嵌入到HTML中、链接到样式表文件,或者完全禁用它。无论您是使用默认样式表还是自定义样式表,这些模式都是可用的。本页面涉及控制应用样式表的文档属性。
Important
|
HTML转换器只会在生成独立的HTML文档时应用样式表。这是因为样式表会被放置在HTML的`<head>`元素内部,而转换器仅在生成独立输出时创建该元素。 |
嵌入样式表
链接到样式表
您已经知道当安全模式为安全时,HTML转换器会链接到样式表。然而,不依赖于安全模式也可以启用这种行为。如果你正在将多个AsciiDoc文档转换为HTML,并希望它们都使用同一个样式表,这可能会有益。这也可以使检查HTML变得简单一些。
如果设置了`linkcss`文档属性,转换器将链接到样式表而不是嵌入它。为了链接到样式表,转换器使用了一个通过`rel="stylesheet"`属性专门化的`<link>`元素。`href`属性将使用相对路径引用样式表。
linkcss`文档属性必须在标题的末尾设置才能生效。一种设置属性的方法是在文档头部设置:
Unresolved directive in stylesheet-modes.adoc - include::example$my-document.adoc[tag=title] :linkcss: Unresolved directive in stylesheet-modes.adoc - include::example$my-document.adoc[tag=body]
您也可以使用API或CLI(如下所示)设置`linkcss`:
$ asciidoctor -a linkcss my-document.adoc
无论哪种情况,如果你检查输出文件[path]_my-document.html_中的`<head>`元素,你会看到HTML链接到了样式表。
<link rel="stylesheet" href="./asciidoctor.css">
由于我们没有指定样式表,转换器链接到默认的样式表。但是这个样式表在哪里呢?让我们找出来。
将样式表复制到输出目录
如果您要链接到样式表文件,样式表文件必须在引用的路径上可用,这样浏览器才能访问它。对于简单的情况,Asciidoctor 会为您处理这个问题。
如果安全模式是服务器级别或更低,且设置了`linkcss`文档属性,Asciidoctor将会把样式表复制到输出目录,以便HTML能够链接到它。当使用默认样式表时,Asciidoctor会将CSS写入到输出目录中的[.path]_asciidoctor.css_文件。如果你指定了一个自定义的样式表,Asciidoctor将复制该文件,保留文件的名称。即使你指定了一个与源文件不同目录的输出文件,这个工具仍然有效。
如果安全模式是安全的,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`属性。
为了防止Asciidoctor在任何安全模式下都会复制样式表,请取消设置`copycss`文档属性。
copycss` 文档属性必须在页眉结束前取消设置才能生效。一种方法是在文档页眉中取消设置该属性:
Unresolved directive in stylesheet-modes.adoc - include::example$my-document.adoc[tag=title] :linkcss: :!copycss: Unresolved directive in stylesheet-modes.adoc - include::example$my-document.adoc[tag=body]
您也可以通过API或CLI取消设置`copycss`(如下所示):
$ asciidoctor -a linkcss -a copycss! my-document.adoc
无论哪种情况,如果你检查输出目录,你会发现样式表文件[.path]_asciidoctor.css_缺失(除非它已经存在)。
我们会在自定义样式表页面上再次看到`copycss`属性,作为一种覆盖要复制的样式表位置的方法。
禁用样式表
在生成嵌入式HTML时,样式表实际上是禁用的,因为嵌入式HTML不包括`<head>`元素。如果您不希望转换器在独立HTML中包含样式表,请使用CLI取消设置`stylesheet`属性。
$ asciidoctor -a stylesheet! my-document.adoc
你必须取消设置`stylesheet`属性的原因是因为它默认是设置的(为空值)。当`stylesheet`属性被设置但为空时,HTML转换器会使用默认的样式表。通过取消设置这个属性,我们告诉转换器完全不使用样式表。
当你查看生成的HTML文件,my-document.html 时,你会看到裸露的HTML,没有应用任何样式,如下所示:
Note
|
当 stylesheet 属性未设置时,linkcss 和 copycss 属性将被忽略。
|
现在既然你有了一个干净的画布,让我们来学习如何应用你自己的自定义样式表吧。