Markdown против HTML Когда использовать каждый для документов, README-файлов и API

Опубликовано
Markdown против HTML: Когда использовать каждый для документов, README и API 1
Реклама · УДАЛИТЬ?

Что такое Markdown на самом деле

Markdown — это легкий язык форматирования текста — вы пишете простой текст с простыми соглашениями (звездочки для жирного, решетки для заголовков, обратные кавычки для кода), а парсер преобразует его в HTML. Существует единого официального стандарта Markdown; то, что вы получаете, зависит от используемого парсера.

Наиболее распространённые варианты:

  • CommonMark — строгий, точно определённый стандарт. Ближайшее сходство к «чистому Markdown».
  • GitHub Flavored Markdown (GFM) — CommonMark с таблицами, списками задач, зачеркиванием и автоссылками. То, что отображают GitHub и GitLab.
  • kramdown, Pandoc, MultiMarkdown — расширенные варианты с заметками, списками определений и дополнительными атрибутами, которых нет в CommonMark.

Если вы пишете README и ожидаете, что GitHub отобразит его, GFM — ваш стандарт. Если вы используете статический генератор сайтов, проверьте, какой парсер используется — они могут отличаться в крайних случаях, например, при вложенности списков и обработке сырого HTML.

Когда Markdown побеждает

README-файлы и техническая документация. Markdown является стандартом для технической документации. GitHub, GitLab, Bitbucket, npm, PyPI — все они по умолчанию отображают Markdown. Писать README в HTML технически возможно, но это неудобно для участников, которые должны редактировать его.

Вики и журнал изменений. Ровные, версионно-управляемые текстовые файлы, которые редактируются людьми, и где изменения должны быть понятны. HTML — это избыточный и создаёт бессмысленные изменения. Markdown остаётся чистым.

Сайты документации. Инструменты, такие как MkDocs, Docusaurus, Hugo и Jekyll, принимают файлы Markdown и генерируют HTML на этапе сборки. Автор пишет Markdown; сайт отвечает за отображение.

Когда содержимое пишется непрофессионалами. Markdown намного проще в освоении и написании, чем HTML. Если в вашей системе обработки контента участвуют авторы, не являющиеся инженерами фронтенда, Markdown значительно снижает барьеры.

Когда HTML побеждает

Письма. Клиенты почты — особенно Outlook — известны своей несогласованной поддержкой CSS. HTML даёт вам явный контроль над размещением, размерами шрифтов, отступами и встроенными стилями. Письма, отформатированные из Markdown, часто не работают в клиентских программах, которые удаляют определённые теги или не поддерживают результат парсера.

Тонкая настройка размещения и стиля. Когда вам нужно определённое количество столбцов, плавающие размещения или собственные классы CSS, Markdown мешает. Вам приходится либо вводить сырой HTML, либо бороться с результатом парсера.

Сложные таблицы. Таблицы GFM подходят для простых сеток. В тот момент, когда вам нужно объединённые ячейки, многострочные ячейки или простирающиеся столбцы, синтаксис Markdown не справляется. HTML — правильный инструмент. <table> это правильный инструмент.

Содержание, управляемое CMS. Большинство платформ CMS хранят содержимое постов в виде HTML или используют блок-редактор, который генерирует структурированный HTML. Принудительное использование Markdown в такой цепочке приводит к дополнительному слою преобразования, который не даёт явных преимуществ, если CMS не была специально разработана для этого.

Сравнение в краткой форме

Вариант использованияУценкаHTMLПобедитель
GitHub READMEПоддержка по умолчаниюПодробный, неудобныйУценка
Шаблон письмаНеоднородныйПолный контрольHTML
Сайт документацииПоддержка по умолчанию с SSGТребуется этап сборкиУценка
Сложные таблицыОграниченныйПолный контрольHTML
Тело ответа APIОбщая практикаРаботает, но избыточноУценка
Содержание CMSТребуется преобразованиеПоддержка по умолчаниюHTML
Журнал измененийЧистые измененияИзбыточноУценка

GFM: Что добавляет по сравнению с CommonMark

GitHub Flavored Markdown расширяет CommonMark функциями, которые часто используются разработчиками. Вот пример простой таблицы и списка задач — двух дополнений, отсутствующих в CommonMark:

## GFM Table
| Name     | Role     | Status  |
|----------|----------|---------|
| Alice    | Author   | Active  |
| Bob      | Reviewer | Pending |

## GFM Task List
- [x] Write draft
- [x] Add code examples
- [ ] CMO review
- [ ] Schedule publish

Оба этих элемента не отображаются в чистом парсере CommonMark. Если ваша система документации использует CommonMark без расширений, эти блоки будут отображаться как обычный текст. Всегда учитывайте синтаксис, соответствующий вашему парсеру.

Смешивание Markdown и HTML

Большинство парсеров Markdown позволяют вставлять сырой HTML. CommonMark поддерживает это по умолчанию, GFM также поддерживает, с некоторыми фильтрами. Это означает, что вы можете вставить <div> или <table> в Markdown-файл, когда нужно что-то, что не может быть выражено синтаксисом.

Что обычно ломается: вложение Markdown внутри HTML-блоков. Если вы откроете <div> и напишете Markdown внутри него, большинство парсеров не обработают Markdown — они будут рассматривать весь блок как сырой HTML. Если вам нужно содержимое Markdown внутри HTML-обёртки, вам нужно, чтобы парсер поддерживал это явно (kramdown имеет атрибут markdown="1" для этого; большинство других — нет).

Правило: используйте HTML-блоки редко для структурных переопределений. Не пытайтесь писать целые разделы на HTML внутри Markdown-файла — в этом случае просто пишите HTML.

Markdown в телах ответов API

Частая и практичная практика: API возвращают строки Markdown в полях ответа. API с богатым текстом Notion, блок-инструмент Slack, различные API поддержки и CMS отправляют Markdown-содержимое, которое ожидается от клиента для отображения.

Почему? Markdown компактен, удобочитаем и удобен для редактирования. Хранение **bold text** дешевле и яснее, чем хранение <strong>bold text</strong>, и оно сохраняет независимость формата данных от конкретной структуры HTML. Если вы создаёте API, возвращающее человекочитаемое содержимое, использование Markdown в строковых полях — разумный стандарт — просто укажите, какой вариант вы используете.

Безопасное отображение Markdown

Отображение пользовательского Markdown на фронтенде без фильтрации — вектор XSS. Парсер Markdown, поддерживающий сырой HTML, легко передаст <script>alert('xss')</script> внутри пользовательского контента.

Решение: фильтровать HTML результат, а не входной Markdown. Библиотеки, такие как DOMPurify (браузер), sanitize-html (Node.js) или Bleach (Python), удаляют опасные теги и атрибуты из отформатированного HTML, сохраняя безопасный формат. Никогда не отображайте непроверенный Markdown напрямую в DOM без предварительной фильтрации. Парсер не является вашим средством безопасности.

Попробуйте в браузере

Если вы хотите экспериментировать с отображением Markdown — проверить синтаксис GFM, посмотреть, как выглядят таблицы и списки задач, или проверить, как ведёт себя сырой HTML внутри Markdown — можно использовать IO Tools Markdown Editor работает в браузере без установки. Это быстрый онлайн-редактор Markdown для написания документации, предварительного просмотра README-файлов или проверки поведения парсера перед тем, как выбрать формат.

Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?