Kann ich mit Markdown einen Klassennamen für einen Absatz definieren?

138

Kann ich mit Markdown einen Klassennamen für einen Absatz definieren? Wenn das so ist, wie?

Ryan Florence
quelle
54
Mir ist keine genauere Möglichkeit bekannt, zu fragen: "Kann ich mit Markdown einen Klassennamen für einen Absatz definieren?" Hast du vergessen, den Titel zu lesen?
Ryan Florence
[Voreingenommen] Wenn Sie zufällig ein Node-Benutzer sind, schauen Sie sich bitte Rho an . Obwohl es nicht zu 100% mit Markdown kompatibel ist, finden Sie es möglicherweise immer noch sehr attraktiv, da es im Kern über die von Ihnen benötigte Funktion verfügt.
Inkarnation

Antworten:

76

Dupe: Wie setze ich ein HTML-Klassenattribut in Markdown?


Nativ? Nein, aber...

Nein, Markdowns Syntax kann nicht. Sie können ID-Werte mit Markdown Extra bis festlegen .

Wenn Sie möchten, können Sie normales HTML verwenden und das Attribut hinzufügen markdown="1", um die Markdown-Konvertierung innerhalb des HTML-Elements fortzusetzen. Dies erfordert jedoch Markdown Extra .

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

Mögliche Lösung: (ungetestet und vorgesehen für <blockquote>)

Ich habe folgendes online gefunden:

Funktion

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";
}

Abschlag

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

Ergebnis

<blockquote id="id" class="className">
    <p>This is the blockquote</p>
</blockquote>
Sampson
quelle
2
(Getestet mit MaRuKu-Parser) Sie können nur "{.class-name}" am Anfang einer Textzeile verwenden, um das P-Tag zu bewirken. Der ID-Teil wird jedoch ignoriert.
David Hutchison
75

Raw HTML ist in Markdown tatsächlich perfekt gültig. Zum Beispiel:

Normal *markdown* paragraph.

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

Stellen Sie einfach sicher, dass sich der HTML-Code nicht in einem Codeblock befindet.

Matt Bridges
quelle
30
Das Problem bei diesem Ansatz ist, dass der innere Text nicht mehr markiert ist.
Akauppi
@akauppi Ja; Dies kann jedoch mit einem Span-Tag umgangen werden.
Seraphendipity
12

Wenn Ihre Umgebung JavaScript ist, verwenden Sie markdown-it zusammen mit dem Plugin 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);

Ausgabe

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

jsfiddle

Hinweis: Beachten Sie den Sicherheitsaspekt, wenn Sie Attribute in Ihrem Markdown zulassen!

Haftungsausschluss, ich bin der Autor von Markdown-It-Attrs.

arve0
quelle
Markdown It Rocks !!
Ole
8

Markdown sollte diese Funktion haben, tut es aber nicht. Stattdessen stecken Sie in sprachspezifischen Markdown-Supersets fest:

PHP: Markdown Extra
Ruby: Kramdown , Maruku

Wenn Sie sich jedoch an die echte Markdown-Syntax halten müssen, müssen Sie nur unformatiertes HTML einfügen, was weniger ideal ist.

Yarin
quelle
7

Wenn Ihr Markdown-Geschmack kramdown ist, können Sie die CSS-Klasse wie folgt festlegen:

{:.nameofclass}
paragraph is here

Dann legen Sie in Ihrer CSS-Datei die CSS wie folgt fest:

.nameofclass{
   color: #000;
  }
Franc
quelle
3

Wie oben erwähnt, lässt Markdown selbst Sie daran hängen. Abhängig von der Implementierung gibt es jedoch einige Problemumgehungen:

Mindestens eine Version von MD wird <div>jedoch als Block-Level-Tag betrachtet<DIV> ist jedoch nur Text. Alle Browser unterscheiden jedoch nicht zwischen Groß- und Kleinschreibung. Auf diese Weise können Sie die Syntaxvereinfachung von MD auf Kosten des Hinzufügens von div-Container-Tags beibehalten.

Das Folgende ist also eine Problemumgehung:

<DIV class=foo>

  Paragraphs here inherit class foo from above.

</div>

Der Nachteil dabei ist, dass der Ausgabecode <p>Tags enthält, die die <div>Zeilen umschließen (beide, das erste, weil es nicht stimmt, und das zweite, weil es nicht übereinstimmt. Kein Browser macht sich darüber Gedanken, was ich gefunden habe, aber der Code hat gewonnen. ' t validate. MD neigt <p>sowieso dazu, Ersatz- Tags einzufügen.

Mehrere Versionen von Markdown implementieren die Konvention. <tag markdown="1">In diesem Fall führt MD die normale Verarbeitung innerhalb des Tags durch. Das obige Beispiel wird:

<div markdown="1" class=foo>

  Paragraphs here inherit class foo from above.

</div>

In der aktuellen Version von Fletchers MultiMarkdown können Attribute dem Link folgen, wenn Links verwendet werden, auf die verwiesen wird.

Sherwood Botsford
quelle
Hinweis: Bitte stellen Sie sicher, dass Sie Codemarkierungen verwenden. Der größte Teil dieses Beitrags wurde ausgeblendet, da er als HTML-Tags interpretiert wurde.
Lawrence Dol
Danke - der DIV-Hack ist hier die einzige Antwort, die mit Pegdown / Cegdown zu funktionieren scheint. (Pegdown ist auch mit Plugins erweiterbar, also könnte ich das auf längere Sicht tun)
Korny
2

In schlanker Abschlag Verwendung dieses:

markdown:
  {:.cool-heading}
  #Some Title

Wird übersetzt in:

<h1 class="cool-heading">Some Title</h1>
Khalil Gharbaoui
quelle
1

Es sollte auch erwähnt werden, dass <span> Tags in ihnen erlaubt sind - Elemente auf Blockebene negieren MD nativ in ihnen, es sei denn, Sie konfigurieren sie nicht dafür, aber Inline-Stile erlauben nativ MD in ihnen. Als solches mache ich oft etwas Ähnliches wie ...

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.

Ich bin nicht 100% sicher, ob dies universell ist, aber es scheint bei allen von mir verwendeten MD-Editoren der Fall zu sein.

Seraphendipity
quelle
0

Wenn Sie nur einen Selektor für Javascript-Zwecke benötigen (wie ich), möchten Sie möglicherweise nur ein hrefAttribut anstelle von classoder verwendenid :

Mach das einfach:

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

Markdown ignoriert oder entfernt das nicht href Attribut nicht wie bei Klassen und IDs.

In Ihrem Javascript oder Ihrer jQuery können Sie also Folgendes tun:

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

    ... do your thing ...

    event.preventDefault();
});

Zumindest funktioniert das in meiner Version von Markdown ...

Tim und Struppi81
quelle