我可以使用Markdown在段落上定义类名吗?


139

我可以使用Markdown在段落上定义类名吗?如果是这样,怎么办?


54
我不知道一种更精确的方法来询问“是否可以使用Markdown在段落上定义类名?” 你忘了读标题吗?
Ryan Florence

[Biased]如果您碰巧是Node用户,请查看Rho。尽管它与Markdown并非100%兼容,但您可能仍会发现它非常吸引人,因为它具有您所需的核心功能。
化身

Answers:


76

Dupe:如何在Markdown中设置HTML类属性?


本机?不是,但...

不,Markdown的语法不能。您可以通过Markdown Extra 设置ID值

如果愿意,可以使用常规HTML,并添加属性markdown="1"以继续在HTML元素内进行markdown转换。但这需要Markdown Extra

<p class='specialParagraph' markdown='1'>
**Another paragraph** which allows *Markdown* within it.
</p>

可能的解决方案:(未经测试,适用于<blockquote>

我在网上找到了以下内容:

功能

function _DoBlockQuotes_callback($matches) {

    ...cut...

    //add id and class details...
    $id = $class = '';
    if(preg_match_all('/\{(?:([#.][-_:a-zA-Z0-9 ]+)+)\}/',$bq,$matches)) {
        foreach ($matches[1] as $match) {
            if($match[0]=='#') $type = 'id';
            else $type = 'class';
            ${$type} = ' '.$type.'="'.trim($match,'.# ').'"';
        }
        foreach ($matches[0] as $match) {
            $bq = str_replace($match,'',$bq);
        }
    }

    return _HashBlock(
        "<blockquote{$id}{$class}>\n$bq\n</blockquote>"
    ) . "\n\n";
}

降价促销

>{.className}{#id}This is the blockquote

结果

<blockquote id="id" class="className">
    <p>This is the blockquote</p>
</blockquote>

2
(经过MaRuKu解析器测试),您可以在一行文本的开头仅使用“ {.class-name}”来实现P标签。id部分将被忽略。
David Hutchison

75

原始HTML实际上在markdown中是完全有效的。例如:

Normal *markdown* paragraph.

<p class="myclass">This paragraph has a class "myclass"</p>

只要确保HTML不在代码块内即可。


31
这种方法的问题在于内部文本不再是markdown。
akauppi 2015年

@akauppi是的;不过,可以使用span标签解决此问题。
Seraphendipity

13

如果您的环境是JavaScript,请结合使用markdown-it和插件markdown-it-attrs

const md = require('markdown-it')();
const attrs = require('markdown-it-attrs');
md.use(attrs);

const src = 'paragraph {.className #id and=attributes}';

// render
let res = md.render(src);
console.log(res);

输出量

<p class="className" id="id" and="attributes">paragraph</p>

jsfiddle

注意:在减价中允许使用属性时,请注意安全性!

免责声明,我是markdown-it-attrs的作者。


Markdown摇滚!!
Ole

8

Markdown 应该具有此功能,但不是。相反,您只能使用特定于语言的Markdown超集:

PHP: 降价额外的
红宝石: KramdownMaruku

但是,如果您需要遵循真正的Markdown语法,则您将不得不插入原始HTML,这不太理想。


7

如果您的markdown风格是kramdown,则可以这样设置CSS类:

{:.nameofclass}
paragraph is here

然后在css文件中,按以下方式设置css:

.nameofclass{
   color: #000;
  }


3

如上所述,降价本身使您无法自拔。但是,根据实现,有一些解决方法:

至少有一个版本的MD被认为<div>是块级标签,但<DIV>仅仅是文本。但是,所有浏览器都不区分大小写。这使您可以保持MD的语法简单性,但要增加div容器标签。

因此,以下是一种解决方法:

<DIV class=foo>

  Paragraphs here inherit class foo from above.

</div>

这样做的缺点是输出代码具有<p>包裹<div>行的标签(两者都是,第一个是因为行不匹配,第二个是因为行不匹配。没有浏览器对此我大惊小怪,但是代码不会t验证MD总是倾向于放入备用<p>标签。

markdown的几种版本都实现了约定,<tag markdown="1">在这种情况下,MD会在标签内部进行常规处理。上面的示例变为:

<div markdown="1" class=foo>

  Paragraphs here inherit class foo from above.

</div>

如果使用引用的链接,则当前版本的Fletcher的MultiMarkdown允许属性跟随该链接。


注意:请确保使用代码标记;由于该帖子被解释为HTML标签,因此大部分内容都被隐藏了。
劳伦斯·多尔2014年

谢谢-DIV hack是这里唯一适用于pegdown / cegdown的答案。(Pegdown也可通过插件扩展,因此从长远来看,我可能会这样做)
Korny 2015年


1

还应该提到的是,<span>标签允许它们在内部使用-块级项会在其中固有地使MD无效,除非您配置它们不这样做,但内联样式本身会在其中允许MD。因此,我经常做类似于...的事情。

This is a superfluous paragraph thing.

<span class="class-red">And thus I delve into my topic, Lorem ipsum lollipop bubblegum.</span>

And thus with that I conclude.

我不是100%知道这是否通用,但在我使用的所有MD编辑器中似乎都是这种情况。


0

如果您只需要一个用于Javascript的选择器(就像我一样),则可能只想使用href属性而不是classid

只是这样做:

<a href="#foo">Link</a>

Markdown不会href像对类和id一样忽略或删除该属性。

因此,您可以在Javascript或jQuery中执行以下操作:

$('a[href$="foo"]').click(function(event) {

    ... do your thing ...

    event.preventDefault();
});

至少这在我的Markdown版本中有效...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.