Гайд по возможностям Markdown в блоге
Содержание
В этом посте — все расширения разметки, которые поддерживает наш блог. Каждый пример показан рядом: слева код, справа результат.
Базовые элементы
Жирный, курсив, зачёркивание
Код:
**Жирный текст**, *курсив*, ~~зачёркнутый~~
Результат:
Жирный текст, курсив, зачёркнутый
Блоки кода
Три бэктика с указанием языка — и Pygments раскрасит синтаксис:
```python
def greet(name: str) -> str:
"""Приветствие."""
return f"Привет, {name}!"
```
Результат:
def greet(name: str) -> str:
"""Приветствие."""
return f"Привет, {name}!"
Язык можно не указывать — подсветка определится автоматически (guess_lang). Поддерживается любой язык из Pygments: python, javascript, bash, html, css, json, yaml, go, rust и ещё сотни.
Таблицы
Код:
| Параметр | Значение | Описание |
| ---: | :---: | :--- |
| Скорость | 100 Мбит/с | Очень быстро |
| Надежность | 99.9% | Стабильно |
| Цена | $0 | Бесплатно |
Результат:
| Параметр | Значение | Описание |
|---|---|---|
| Скорость | 100 Мбит/с | Очень быстро |
| Надежность | 99.9% | Стабильно |
| Цена | $0 | Бесплатно |
Списки задач (Task-lists)
Код:
- [x] Настроить Django
- [x] Подключить Pygments
- [ ] Добавить поддержку LaTeX
- [x] Реализовать переключение тем
Результат:
- Настроить Django
- Подключить Pygments
- Добавить поддержку LaTeX
- Реализовать переключение тем
Обычные списки
Код:
- обычный пункт
- ещё один пункт
- вложенный подпункт
- последний пункт
1. сначала
2. потом
3. наконец
Результат:
- обычный пункт
- ещё один пункт
- вложенный подпункт
- последний пункт
- сначала
- потом
- наконец
Блоки уведомлений (Admonition)
!!! note "Примечание"
Здесь полезный дополнительный контекст — например, ссылка на документацию.
!!! tip "Совет"
Используйте admonition, чтобы выделить важные блоки в тексте.
!!! warning "Внимание"
Обратите внимание на лимиты размеров при загрузке файлов.
!!! danger "Осторожно"
Не публикуйте ключи и пароли в открытых статьях.
Результат:
Примечание
Здесь полезный дополнительный контекст — например, ссылка на документацию.
Совет
Используйте admonition, чтобы выделить важные блоки в тексте.
Внимание
Обратите внимание на лимиты размеров при загрузке файлов.
Осторожно
Не публикуйте ключи и пароли в открытых статьях.
Цитаты
Код:
> Markdown — это не только про форматирование текста,
> но и про удобство написания.
> — Принцип проектирования
> quotes
>> quotes
Результат:
Markdown — это не только про форматирование текста, но и про удобство написания. — Принцип проектирования
quotes
quotes
Продвинутые расширения
Вкладки (Tabbed)
=== "Python"
```python
print("Hello from Python!")
```
=== "JavaScript"
```javascript
console.log("Hello from JS!");
```
=== "Bash"
```bash
echo "Hello from Bash!"
```
Результат:
print("Hello from Python!")
console.log("Hello from JS!");
echo "Hello from Bash!"
Сворачивающиеся блоки (Details)
??? "Нажми, чтобы узнать секрет"
Секрет в том, что весь этот текст рендерится с помощью
`pymdown-extensions`! :sparkles:
Результат:
Нажми, чтобы узнать секрет
Секрет в том, что весь этот текст рендерится с помощью pymdown-extensions! ✨
Математика (MathJax)
Код:
Инлайн формула: \( E = mc^2 \)
Блочная формула:
$$ \int_{a}^{b} x^2 \, dx = \frac{b^3 - a^3}{3} $$
Результат:
Инлайн формула: E = mc^2
Блочная формула:
Схемы (Mermaid)
```mermaid
graph TD
Start --> Process
Process --> End
End -->|Retry| Process
```
Результат:
graph TD
Start --> Process
Process --> End
End -->|Retry| Process
Списки определений (Definition Lists)
Код:
Markdown
: Язык разметки для создания структурированного текста.
Django
: Высокоуровневый Python-фреймворк для веб-разработки.
Результат:
- Markdown
- Язык разметки для создания структурированного текста.
- Django
- Высокоуровневый Python-фреймворк для веб-разработки.
Колонки (Columns)
```columns
**Плюсы**
- Только Markdown-блок
- Адаптивная сетка
- Работает в обеих темах
:::
**Минусы**
- Нужно помнить про разделитель `:::`
- На узких экранах — одна колонка
```
Результат:
Плюсы
- Только Markdown-блок
- Адаптивная сетка
- Работает в обеих темах
Минусы
- Нужно помнить про разделитель
::: - На узких экранах — одна колонка
Карточки (Cards)
То же самое, но с фоном и рамкой — fence cards:
```cards
**Карточка 1**
- Фон и рамка
- Скруглённые углы
:::
**Карточка 2**
- Тот же разделитель `:::`
- Адаптивная сетка
```
Результат:
Карточка 1
- Фон и рамка
- Скруглённые углы
Карточка 2
- Тот же разделитель
::: - Адаптивная сетка
Число колонок в ряду
По умолчанию колонки и карточки раскладываются адаптивно. Классы .n-1….n-4 на открывающей строке fence задают точное число колонок или карточек в ряду:
```cards {: .n-3}
**1**
Три карточки
в одном ряду
:::
**2**
Класс `.n-3` —
на fence
:::
**3**
На телефоне —
одна колонка
```
Результат:
1
Три карточки в одном ряду
2
Класс .n-3 —
на fence
3
На телефоне — одна колонка
То же работает для columns: класс ставится на открывающую строку fence и задаёт число колонок независимо от ширины экрана.
Контейнер (Box)
Fence box — универсальная обёртка: содержимое рендерится как обычный Markdown внутри одного блока, а классы с attr_list вешаются прямо на него. Типовой случай — широкая таблица, которая не должна ломать вёрстку страницы:
```box {: .h-scroll-narrow}
| Модель | Контекст | Цена за 1000 | Режимы |
|--------|----------|--------------|--------|
| gpt-oss-20b | 128K | 0,10 ₽ | sync, batch |
| deepseek-v4-flash | 1M | 0,30 ₽ | sync, async, batch |
| qwen3.6-35b-a3b | 256K | 0,42 ₽ | sync, async, batch |
| yandexgpt-pro-5.1 | 32K | 1,20 ₽ | sync, async |
```
Результат:
| Модель | Контекст | Цена за 1000 | Режимы |
|---|---|---|---|
| gpt-oss-20b | 128K | 0,10 ₽ | sync, batch |
| deepseek-v4-flash | 1M | 0,30 ₽ | sync, async, batch |
| qwen3.6-35b-a3b | 256K | 0,42 ₽ | sync, async, batch |
| yandexgpt-pro-5.1 | 32K | 1,20 ₽ | sync, async |
На узком экране таблица прокручивается внутри контейнера (класс .h-scroll-narrow), на широком — просто занимает колонку статьи. У box нет фона и рамки — при необходимости добавьте bg-card, border-card или shadow.
Адаптивная видимость
Классы .only-wide и .only-narrow показывают элемент только на широких (≥641px) или только на узких (≤640px) экранах. Классика жанра — две версии одной схемы: горизонтальная для десктопа, вертикальная для телефона; читатель увидит ровно одну:
```mermaid {: .only-wide}
graph LR; A --> B --> C;
```
```mermaid {: .only-narrow}
graph TD; A --> B --> C;
```
Результат:
graph LR; A --> B --> C;
graph TD; A --> B --> C;
Работает на любых элементах с attr_list: картинках, абзацах, обёртках fence-блоков (columns, box, mermaid).
Эмодзи
Код:
Мы поддерживаем встроенные эмодзи: :smile: :fire: :heart: :star2:
Результат:
Мы поддерживаем встроенные эмодзи:

Атрибуты элементов (Attr List)
Расширение attr_list позволяет добавлять CSS-классы, ID и произвольные атрибуты к элементам.
Инлайн-элементы
Атрибуты ставятся в {} сразу после элемента:
Код:
[Ссылка](https://example.com){ .btn .btn-primary }
{ width=50% .rounded }
Блочные элементы
Для абзацев и других блоков атрибуты нужно писать на отдельной строке сразу после блока:
Код:
Текст абзаца
{.highlight #intro}
Результат:
Текст абзаца
Результат: <p class="highlight" id="intro">Текст абзаца</p>.
Важно
Если написать {.class} на той же строке, что и текст — атрибуты не применятся. Для блоков — только на отдельной строке.
Заголовки
У заголовков синтаксис чуть другой — через {:}:
Код:
### Заголовок {: #my-heading .title }
Результат:
Заголовок
Результат: <h3 class="title" id="my-heading">Заголовок</h3>.
Полный пример
### Контакты {: #contacts .section-title }
Напишите нам
{.contact-block}
[Написать письмо](mailto:hi@bl0g.ru){ .btn .btn-primary }
Результат:
Контакты
Напишите нам
Нейтральный инлайн-спан (%%текст%%)
«Голое» слово нельзя покрасить через {} — атрибуты цепляются только к элементу. Для таких случаев есть спан-носитель на двойных процентах:
Код:
Обычный текст %%внимание%%{.accent}, а это %%второстепенное%%{.muted}.
Результат:
Обычный текст внимание, а это второстепенное.
Внутри работает обычная разметка (%%**жирный**%%{.info}), непарный %% и проценты вида «50%» остаются обычным текстом, инлайн-код не срабатывает.
Ещё возможности
Горячие клавиши, выделение и индексы
Код:
++ctrl+shift+s++ сохраняет изменения.
Вода — H~2~O, степень — x^2^.
==Выделенный фрагмент== привлекает внимание.
Результат:
Ctrl+Shift+S сохраняет изменения. Вода — H2O, степень — x2. Выделенный фрагмент привлекает внимание.
Правки (Critic Markup)
При совместной работе удобно показывать изменения:
| Значение | Вид | Синтаксис |
|---|---|---|
| Удаление | {-- удалённый текст --} | |
| Вставка | вставленный текст | {++вставленный текст++} |
| Замена | {~~ старое ~> новое ~~} | |
| Выделение | выделенный текст | {== выделенный текст ==} |
| Комментарий | примечание | {>> примечание <<} |
Вот так выглядит правка целого предложения:
старая формулировка новая формулировка.
Или замена целиком: старая формулировкановая формулировка.
Подсветка инлайн-кода
Код:
Нужен язык — просто: `#!python sorted(items, key=lambda x: x.id)`.
Или bash: `#!bash tar -czf backup.tar.gz ./media`.
Результат:
Нужен язык — просто: sorted(items, key=lambda x: x.id). Или bash: tar -czf backup.tar.gz ./media.
Списки с буквами и символами
Код:
a) первый пункт
b) второй пункт
c) третий пункт
i) римские
ii) тоже работают
Результат:
- первый пункт
- второй пункт
- третий пункт
- римские
- тоже работают
Умные символы
Код:
(c) 2026 → знак ©, стрелки --> и <--, дробные: 1/2 и 3/4 —
преобразуются автоматически.
Результат:
© 2026 → знак ©, стрелки → и ←, дробные: ½ и ¾ — преобразуются автоматически.
Ссылки и якоря
Ссылки работают автоматически: вставьте полный URL — и он станет кликабельным:
Сайт Markdown: https://www.markdownguide.org
Результат: Сайт Markdown: https://www.markdownguide.org
Именованные ссылки — классический синтаксис:
[Документация Django](https://docs.djangoproject.com)
Результат: Документация Django
Ссылки на якоря внутри статьи — заголовки автоматически получают id:
См. раздел [Графики](#графики-vega-lite) ниже.
Сгенерированные id — транслитерация заголовка в нижнем регистре: Заголовок {: #custom-id } задаёт свой id вручную (через Attr List).
Изображения

Результат:  — полноценный HTML-тег <img> с подписью-ALT.
Размер — через Attr List:
{ width=100% }
{ width=48 }
Классы — скругление, тень, рамка:
{ .rounded .shadow }
{ .bordered }
Ленивая загрузка — все изображения получают loading="lazy" decoding="async" автоматически (в пайплайне рендера).
Обложки статей — загружаются отдельно при редактировании статьи; пропорция 4:1.
Графики (Vega-Lite)
Блок vega принимает JSON-спеку Vega-Lite v5 и рендерит интерактивный график:
```vega
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": "container", "height": 230,
"data": {"values": [
{"x": "A", "y": 10},
{"x": "B", "y": 25},
{"x": "C", "y": 18}
]},
"mark": "bar",
"encoding": {
"x": {"field": "x", "type": "nominal"},
"y": {"field": "y", "type": "quantitative"}
}
}
```
Типы графиков — mark определяет вид:
mark |
Тип | Когда использовать |
|---|---|---|
"bar" |
Столбцы | Сравнение категорий |
"line" |
Линия | Тренды, динамика |
"point" |
Точки | Рассеяние, корреляция |
"circle" |
Круги (точки большего размера) | Двойное рассеяние |
"arc" |
Секторы (круговая/пончиковая) | Доли, структура |
"area" |
Заливка под линией | Объёмы, накопление |
Слои — несколько графиков в одном блоке:
```vega
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": "container", "height": 240,
"data": {"values": [
{"x": 1, "y": 3.1}, {"x": 2, "y": 4.2}, {"x": 3, "y": 5.9}
]},
"layer": [
{"mark": {"type": "circle", "size": 90},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}},
{"mark": {"type": "line", "color": "#e5534b", "strokeDash": [6, 4]},
"transform": [{"regression": "y", "on": "x"}],
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}}
]
}
```
Интерактивность — params с bind: "scales":
```vega
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": "container", "height": 260,
"params": [{"name": "grid", "select": "interval", "bind": "scales"}],
"data": {"sequence": {"start": 0, "stop": 120, "step": 1, "as": "x"}},
"transform": [{"calculate": "sin(datum.x/6)*10", "as": "y"}],
"mark": {"type": "line", "point": true},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
```
Такой график можно масштабировать мышью и перетаскивать.
Совет
"width": "container" — ширина графика подстраивается под ширину контейнера. Не используйте фиксированные пиксели — график будет нереспонсивным.
Комментарии
Войдите, чтобы комментировать.