Гайд по возможностям Markdown в блоге

blogtest · 16.08.2026 10:14 #markdown #справка
Гайд по возможностям 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. наконец

Результат:

  • обычный пункт
  • ещё один пункт
    • вложенный подпункт
  • последний пункт
  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

Блочная формула:

\int_{a}^{b} x^2 \, dx = \frac{b^3 - a^3}{3}

Схемы (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 }
![Картинка](/media/pic.jpg){ width=50% .rounded }

Результат:

Ссылка получит class="btn btn-primary", картинка — width="50%" и class="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) тоже работают

Результат:

  1. первый пункт
  2. второй пункт
  3. третий пункт
  1. римские
  2. тоже работают

Умные символы

Код:

(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).

Изображения

![Подпись к картинке](/media/pic.jpg)

Результат: ![Подпись](/media/pic.jpg) — полноценный HTML-тег <img> с подписью-ALT.

Размер — через Attr List:

![Широкая картинка](/media/pic.jpg){ width=100% }
![Маленькая иконка](/media/icon.png){ width=48 }

Классы — скругление, тень, рамка:

![Картинка](/media/pic.jpg){ .rounded .shadow }
![Картинка с рамкой](/media/pic.jpg){ .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" — ширина графика подстраивается под ширину контейнера. Не используйте фиксированные пиксели — график будет нереспонсивным.

Комментарии

Войдите, чтобы комментировать.