将 HTML 属性添加到 Markdown 的多行部分

pit*_*las 0 markdown

我希望在 Markdown 中的一系列行上为 H4 和 H3 和 P 调用一个特殊的 CSS。我正在使用 Kramdown,但如果它具有所需的功能,我愿意使用另一款。我试过这个:

<div id="X">

### Header

#### Header2

blah 

</id>
Run Code Online (Sandbox Code Playgroud)

但它不起作用。标题不被解释为降价。我也尝试过<span>

有什么办法可以做到这一点吗?

Way*_*lan 5

Kramdown 为您提供了多种选择,下面将依次解释。

\n\n

正如 Markdown规则所解释的:

\n\n
\n

请注意,Markdown 格式化语法不在块级 HTML 标记内进行处理。*emphasis*例如,您可以\xe2\x80\x99t在 HTML 块内使用 Markdown 样式\n。

\n
\n\n

使用原始 HTML

\n\n

当然,您始终可以使用所有原始 HTML,这将适用于所有实现。事实上,如果您查看原始 Markdown 规则的源代码,您会发现所有标头都是使用原始 HTML 定义的,以便可以为每个标头分配 ID。因此,这应该可以解决问题:

\n\n
<h3 id="foo">Header</h3>\n<h4 id="bar">Header2</h4>\n<p class="baz">blah</p>\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,这样你就失去了用 Markdown 编写(和阅读)的好处。然而,Kramdown 提供了许多选项来解决这个问题。

\n\n

解析块_html

\n\n

Kramdown 提供了parse_block_html选项,启用后允许在原始 HTML 块中进行 Markdown 处理。但是,该选项的文档指出:

\n\n
\n

由于通常不需要这样做,因此默认值为false. 通常最好通过 markdown 属性选择性地启用 kramdown 处理。

\n
\n\n

降价=1

\n\n

上面提到的“markdown 属性”是指 Kramdown 默认支持的 Markdown 语法的非标准附加组件,并在其文档的HTML 块部分中进行了记录:

\n\n
\n

还可以使用 markdown 属性在每个标签的基础上启用/禁用语法解析:

\n\n
    \n
  • 如果 HTML 标签具有 属性markdown="0",则该标签将被解析为原始 HTML 块。

  • \n
  • 如果 HTML 标签具有 属性markdown="1",则使用此标签中解析语法的默认机制。

  • \n
  • 如果 HTML 标签具有 属性markdown="block",则该标签的内容将被解析为块级元素。

  • \n
  • 如果 HTML 标签具有 属性markdown="span",则该标签的内容将被解析为跨度级别元素。

  • \n
\n
\n\n

在你的情况下,使用markdown="1"应该可以解决问题(尽管block也应该有效)。

\n\n
<div id="X" markdown="1">\n\n### Header\n\n#### Header2\n\nblah \n\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n\n

属性列表定义

\n\n

但是,您不需要退回到原始 HTML,因为 Kramdown 允许您使用属性列表定义直接在标头和其他元素上定义 ID

\n\n
### Header  {#foo)\n\n#### Header2 {#bar}\n\nblah\n{: .baz}\n
Run Code Online (Sandbox Code Playgroud)\n\n

上面的 Markdown 将转换为以下 HTML:

\n\n
<h3 id="foo">Header</h3>\n<h4 id="bar">Header2</h4>\n<p class="baz">blah</p>\n
Run Code Online (Sandbox Code Playgroud)\n\n

自动ID

\n\n

最后,Kramdown 还支持auto_ids选项,启用该选项后,会将自动生成的 ID 添加到每个标头中。

\n