如何在markdown中为HTML输出设置单个列表的样式

时间:2015-05-08 02:42:00

标签: html css markdown multimarkdown

我正在尝试在Markdown文档中设置个人列表的样式,该列表将转换为HTML。我不能通过CSS设置li标记的样式,因为所有列表都是样式化的,我不能在特殊列表周围使用div,因为multimarkdown不会在{div内转换Markdown 1}}。所以我尝试了span

此处示例Markdown文档:

A normal list:

* List-item-one
* List-item-two

The special-styled list:

<span class="linelist">

* List-item-alpha
* List-item-beta

</span>

我通过multimarkdown将其转换为HTML。显示特殊列表的相关部分如下所示:

<p><span class="linelist"></p>

<ul>
<li>List-item-alpha</li>
<li>List-item-beta</li>
</ul>

<p></span></p>

到目前为止一直很好,但是当我使用带有以下linelist

的CSS时
.linelist {
    display: inline;
    color: red;
}

特殊列表在浏览器中仍然呈现为没有颜色或内联属性。

如何将linelist类应用或“注入”到列表项而不将类添加到ulli标记(因为Markdown生成列表)。

更新:使用的降价转换器是Discount库的变体。如果有一个独立于转换器的纯CSS解决方案,那就太好了。

1 个答案:

答案 0 :(得分:1)

您需要告诉MultiMarkdown在HTML块中处理Markdown。有几种方法可以做到这一点(如docs中所述)

首先,您可以通过在包含的原始HTML元素上设置markdown=1,将块标记为包含Markdown文本:

<div class="linelist" markdown=1>

* List-item-alpha
* List-item-beta

</div>

哪个应该给你这个输出:

<div class="linelist">
    <ul>
        <li>List-item-alpha</li>
        <li>List-item-beta</li>
    </ul>
</div>

第二个选项是告诉MultiMarkdown使用--process-html命令行选项处理所有 HTML块中的Markdown文本。如果你走这条路,你可以省略markdown=1,但要注意任何原始HTML中的所有文本都将被处理为Markdown,这可能会在某些边缘情况下产生不良结果。通常最好坚持使用markdown=1方法,并仅在需要时明确要求Markdown处理。

最后,即使使用markdown=1技巧,也需要修复CSS。类linelist指向div,而不是列表。虽然颜色变化将由所有div元素的子元素继承,但display: inline可能不会。实际上,display: inline需要专门应用于li

.linelist ul li {
    display: inline;
    color: red;
}

注意第一行;该规则适用于任何li ul的子项,linelist<p><span class="linelist"></span></p> <ul> <li>List-item-alpha</li> <li>List-item-beta</li> </ul> <p><span></span></p> 类的任何元素的子项。

顺便说一句,你使用span不会起作用(即使修复了CSS),因为span是一个内联元素,而一个内联元素不能包含块级元素。虽然这意味着您的输出无效,但构建浏览器以处理无效标记。事实上,浏览器可能(不同的浏览器可能因此这种稍微不同且不可预测的方式)解释您的输出(使用跨度),如下所示:

<p>

请注意,当浏览器到达块元素的末尾(在这种情况下为lineline元素)时,它会为您关闭未闭合的跨度。因此,就浏览器而言,您的span实际上并没有包装列表,因此,使用> %linelist% > * List-item-alpha > * List-item-beta 类不会将CSS应用于列表。因此,您必须使用div或至少一些块级元素。

如果您使用折扣(如问题更新中所示),您可以使用Class Block创建一个分配了类的div:

<div class="linelist">
    <ul>
        <li>List-item-alpha</li>
        <li>List-item-beta</li>
    </ul>
</div>

我并不熟悉Discount,这是未经测试的,但根据文档,上述输入应该提供以下输出:

MKD_NODIVQUOTE

请确保MKD_TAGTEXT flag 设置为禁用此功能。我对此不太确定,但如果我正确理解文档,$memcache->addServer('memcache', 11211); 标记可能会将HTML标记内的Markdown文本解析为第二个选项。