Markdown rules 明确声明:
请注意,Markdown 格式化语法不会在块级 HTML 标记中处理。例如,您不能在 HTML 块中使用 Markdown 样式的 *emphasis*。
也就是说,GitHub Pages uses Kramdown 来解析 Markdown,而 Krandown 的行为略有不同,这为您提供了更大的灵活性。事实上,Kramdown 的 documentation 表示:
如果 HTML 标记具有属性markdown="1",则使用该标记中解析语法的默认机制。
换句话说,这样做:
<p align="justify" markdown="1">
**Text** Text Text.
`Text` Text.
</p>
你会得到以下输出:
<p align="justify">
<strong>Text</strong> Text Text.
<code>Text</code> Text.</p>
Kramdown 足够聪明,可以识别您位于 <p> 标记内,并且不会将各个行包装在新的 <p> 标记中,这将是无效的 HTML。如果您真的希望每一行都是一个单独的段落,那么您应该使用 <div> 来包装所有内容。像这样:
<div align="justify" markdown="1">
**Text** Text Text.
`Text` Text.
</div>
这会导致这个输出:
<div align="justify">
<p><strong>Text</strong> Text Text.</p>
<p><code>Text</code> Text.</p>
</div>
为了完整起见,应该注意 GitHub README 和 Gists 不使用相同的 Markdown 解析器。相反,他们使用扩展的Commonmark 解析器,它处理原始 HTML 中的 Markdown 与上述两种方式不同。在 Commonmark 中,原始 HTML 块的内容是否被解析为 Markdown 取决于内容是否被空行包裹。在这种情况下,正确的方法是这样做:
<div align="justify">
**Text** Text Text.
`Text` Text.
</div>
但是,由于 GitHub 将删除 align 属性,因此在 github.com 上托管的页面(例如自述文件)上这样做没有任何意义。还有一个问题是,Commonmark 不够聪明,无法检测到包装的原始 HTML 标签是 <p> 标签,并将每一行包装在另一个 <p> 中,导致 HTML 无效。因此,在这种情况下,您必须使用<div>。
虽然告诉解析器将内容解析为 Markdown 的 use-blank-lines 方法是比markdown="1" 更优雅的解决方案,但它仅受 Commonmark 解析器支持,而 Kramdown 不支持。因此,只要 GitHub Pages 使用 Kramdown,就需要关注Kramdown's rules。