Posso definir um nome de classe no parágrafo usando Markdown?
Pergunta
Posso definir um nome de classe no parágrafo usando Markdown? Se sim, como?
Solução
Dupe: Como faço para configurar uma classe HTML atributo no Markdown?
nativamente? Não. Mas ...
Não, sintaxe do Markdown não pode. Você pode valores set ID com Markdown através Extra.
Você pode uso regular HTML se você gosta, e adicione o atributo markdown="1"
para continuar remarcação conversão dentro do elemento HTML. Isso requer Markdown extra embora.
<p class='specialParagraph' markdown='1'>
**Another paragraph** which allows *Markdown* within it.
</p>
Possível solução: (Não testado e destinados <blockquote>
)
Eu encontrei o seguinte linha:
Função
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";
}
Markdown
>{.className}{#id}This is the blockquote
Resultado
<blockquote id="id" class="className">
<p>This is the blockquote</p>
</blockquote>
Outras dicas
Raw HTML é realmente perfeitamente válida na remarcação. Por exemplo:
Normal *markdown* paragraph.
<p class="myclass">This paragraph has a class "myclass"</p>
Apenas certifique-se o HTML não está dentro de um bloco de código.
Markdown deve tem esta capacidade, mas isso não acontece. Em vez disso, você está preso com supersets Markdown específicos de idioma:
PHP: Markdown extra
Ruby: Kramdown , maruku
Mas se você precisa respeitar verdadeira sintaxe Markdown, você está preso com a inserção de HTML puro, que é menos ideal.
Se o seu ambiente é JavaScript, use remarcação-lo junto com o plugin remarcação-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);
saída
<p class="className" id="id" and="attributes">paragraph</p>
Nota: Esteja ciente do aspecto de segurança ao permitir atributos em sua remarcação
Disclaimer, eu sou o autor de remarcação-it-attrs.
Aqui está um exemplo de trabalho para kramdown seguinte resposta da @ Yarin.
A simple paragraph with a class attribute.
{:.yourClass}
Referência: https://kramdown.gettalong.org/syntax.html# -atributo inline-listas
Se o seu sabor da remarcação é kramdown, então você pode definir classe css como este:
{:.nameofclass}
paragraph is here
Então, em que você arquivo css, você definir o css como este:
.nameofclass{
color: #000;
}
Como mencionado acima remarcação si deixa-lo pendurado sobre isso. No entanto, dependendo da implementação, existem algumas soluções alternativas:
Pelo menos uma versão do MD considera <div>
ser uma tag de nível de bloco, mas <DIV>
é apenas texto. Todos os broswers no entanto são maiúsculas e minúsculas. Isto permite-lhe manter a simplicidade sintaxe de MD, ao custo de adicionar tags de contêiner div.
Assim, o seguinte é um solução alternativa:
<DIV class=foo>
Paragraphs here inherit class foo from above.
</div>
A desvantagem desta situação é que o código de saída tem marcas <p>
envolvendo as linhas <div>
(ambos, o primeiro porque não é e o segundo porque não corresponde. Alvoroço navegador Não há sobre isso que eu encontrei, mas o código não irá validar. MD tende a colocar em tags <p>
peças de qualquer maneira.
Várias versões de remarcação implementar o <tag markdown="1">
convenção em cujo caso MD fará o processamento normal dentro da tag. O exemplo acima é:
<div markdown="1" class=foo>
Paragraphs here inherit class foo from above.
</div>
A versão atual do Fletcher MultiMarkdown permite que atributos a seguir o link se estiver usando links mencionados.
Em remarcação magro isto:
markdown:
{:.cool-heading}
#Some Title
traduz em:
<h1 class="cool-heading">Some Title</h1>
Se você só precisa de um seletor para fins de JavaScript (como eu fiz), você pode apenas querer usar um atributo href
em vez de um class
ou id
:
Apenas faça o seguinte:
<a href="#foo">Link</a>
Markdown não vai ignorar ou remover o atributo href
como acontece com as classes e ids.
Assim, no seu Javascript ou jQuery você pode fazer:
$('a[href$="foo"]').click(function(event) {
... do your thing ...
event.preventDefault();
});
Pelo menos isso funciona na minha versão do Markdown ...