Tôi có thể định nghĩa tên lớp trên đoạn văn bằng Markdown không?


139

Tôi có thể định nghĩa tên lớp trên đoạn văn bằng Markdown không? Nếu vậy thì thế nào?


54
Tôi không biết một cách chính xác hơn để hỏi "Tôi có thể xác định tên lớp trên đoạn văn bằng Markdown không?" Bạn đã quên đọc tiêu đề?
Ryan Florence

[Xu hướng] Nếu bạn là người dùng Node, vui lòng kiểm tra Rho . Mặc dù nó không tương thích 100% với Markdown, nhưng bạn vẫn có thể thấy nó rất hấp dẫn, vì nó có tính năng bạn yêu cầu ở cốt lõi của nó.
hóa thân vào

Câu trả lời:


76

Dupe: Làm cách nào để đặt thuộc tính lớp HTML trong Markdown?


Tự nhiên? Không nhưng...

Không, cú pháp của Markdown không thể. Bạn có thể đặt giá trị ID với Markdown Extra thông qua.

Bạn có thể sử dụng HTML thông thường nếu bạn thích và thêm thuộc tính markdown="1"để tiếp tục chuyển đổi đánh dấu trong phần tử HTML. Điều này đòi hỏi Markdown Extra mặc dù.

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

Giải pháp có thể: (Chưa được kiểm tra và dự định <blockquote>)

Tôi tìm thấy sau đây trực tuyến:

Chức năng

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

Đánh dấu

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

Kết quả

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

2
(Đã thử nghiệm với trình phân tích cú pháp MaRuKu), bạn có thể sử dụng chỉ "{. Class-name}" khi bắt đầu một dòng văn bản để tạo hiệu ứng cho thẻ P. Tuy nhiên, phần id bị bỏ qua.
David Hutchison

75

HTML thô thực sự hoàn toàn hợp lệ trong markdown. Ví dụ:

Normal *markdown* paragraph.

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

Chỉ cần đảm bảo rằng HTML không nằm trong khối mã.


31
Vấn đề với cách tiếp cận này là văn bản bên trong không còn bị đánh dấu.
akauppi

@akauppi Vâng; điều này có thể được nhận xung quanh bằng cách sử dụng thẻ span, mặc dù.
Seraphendipity

13

Nếu môi trường của bạn là JavaScript, hãy sử dụng markdown-it cùng với 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);

Đầu ra

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

jsfiddle

Lưu ý: Lưu ý về khía cạnh bảo mật khi cho phép các thuộc tính trong phần đánh dấu của bạn!

Từ chối trách nhiệm, tôi là tác giả của markdown-it-attrs.


Markdown It Rocks !!
Ole

8

Markdown nên có khả năng này, nhưng nó không. Thay vào đó, bạn bị mắc kẹt với các supersets Markdown dành riêng cho ngôn ngữ:

PHP: Markdown Extra
Ruby: Kramdown , Maruku

Nhưng nếu bạn cần tuân theo cú pháp Markdown thực sự, bạn sẽ bị mắc kẹt với việc chèn HTML thô, điều này ít lý tưởng hơn.


7

Nếu hương vị markdown của bạn là kramdown, thì bạn có thể đặt lớp css như thế này:

{:.nameofclass}
paragraph is here

Sau đó, trong tệp css của bạn, bạn đặt css như thế này:

.nameofclass{
   color: #000;
  }


3

Như đã đề cập ở trên markdown chính nó để bạn treo trên này. Tuy nhiên, tùy thuộc vào việc thực hiện, có một số cách giải quyết:

Ít nhất một phiên bản MD được coi <div>là thẻ cấp khối nhưng <DIV>chỉ là văn bản. Tất cả các broswers tuy nhiên không nhạy cảm trường hợp. Điều này cho phép bạn giữ sự đơn giản cú pháp của MD, với chi phí thêm thẻ div div.

Vì vậy, sau đây là một cách giải quyết:

<DIV class=foo>

  Paragraphs here inherit class foo from above.

</div>

Nhược điểm của điều này là mã đầu ra có <p>các thẻ bao quanh các <div>dòng (cả hai, thứ nhất vì nó không phải và thứ hai vì nó không khớp. Không có trình duyệt nào ầm ĩ về điều này mà tôi đã tìm thấy, nhưng mã đã thắng ' t xác nhận. MD có xu hướng đặt trong <p>các thẻ dự phòng nào.

Một số phiên bản của markdown thực hiện quy ước <tag markdown="1">trong trường hợp MD sẽ thực hiện xử lý bình thường bên trong thẻ. Ví dụ trên trở thành:

<div markdown="1" class=foo>

  Paragraphs here inherit class foo from above.

</div>

Phiên bản hiện tại của MultiMarkdown của Fletcher cho phép các thuộc tính theo liên kết nếu sử dụng các liên kết được tham chiếu.


Lưu ý: Vui lòng đảm bảo bạn sử dụng các mã đánh dấu; hầu hết bài đăng này đã bị ẩn vì nó được hiểu là các thẻ HTML.
Lawrence Dol

Cảm ơn - hack DIV là câu trả lời duy nhất ở đây dường như hoạt động với pegdown / cegdown. (Pegdown cũng có thể mở rộng với các plugin, vì vậy tôi có thể làm điều đó trong thời gian dài hơn)
Korny

2

Trong markdown mỏng sử dụng này:

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

Dịch sang:

<h1 class="cool-heading">Some Title</h1>

1

Cũng cần đề cập rằng <span>các thẻ cho phép bên trong chúng - các mục ở cấp độ khối phủ định MD bên trong chúng trừ khi bạn định cấu hình chúng không làm như vậy, nhưng các kiểu trong dòng thực sự cho phép MD bên trong chúng. Vì vậy, tôi thường làm gì đó giống như ...

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.

Tôi không chắc chắn 100% nếu điều này là phổ quát nhưng dường như là trường hợp trong tất cả các trình soạn thảo MD tôi đã sử dụng.


0

Nếu bạn chỉ cần một bộ chọn cho mục đích Javascript (như tôi đã làm), bạn có thể chỉ muốn sử dụng một hrefthuộc tính thay vì classhoặc id:

Chỉ cần làm điều này:

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

Markdown sẽ không bỏ qua hoặc xóa hrefthuộc tính giống như với các lớp và id.

Vì vậy, trong Javascript hoặc jQuery của bạn, bạn có thể thực hiện:

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

    ... do your thing ...

    event.preventDefault();
});

Ít nhất thì nó hoạt động trong phiên bản Markdown của tôi ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.