MDX (Markdown for JSX) позволяет объединять возможности Markdown и React-компонентов, создавая удобный инструмент для написания документации и контента с интерактивными элементами. Семантическая разметка в MDX играет ключевую роль, обеспечивая структурированное представление контента и улучшая доступность.
В MDX заголовки создаются так же, как в Markdown, с помощью символа
#:
# Основной заголовок
## Подзаголовок второго уровня
### Подзаголовок третьего уровня
Особенности:
## <Badge text="Новый" /> Подзаголовок
MDX использует обычные Markdown-абзацы, которые автоматически
рендерятся как <p> в HTML. Для логического выделения
информации применяются блоки цитат и списки.
Цитаты:
> Это цитата, которая передается через MDX как <blockquote>.
Списки:
- Пункт списка
- Еще один пункт
Нумерованные списки создаются с помощью цифр:
1. Первый шаг
2. Второй шаг
Списки можно комбинировать с React-компонентами для создания интерактивных элементов:
- <InteractiveButton label="Кликни меня" />
MDX позволяет использовать стандартные HTML-теги для уточнения семантики. Это особенно важно для элементов, которые не имеют прямого Markdown-аналога:
<section> — логический блок документа.<article> — самостоятельный фрагмент
контента.<aside> — вспомогательная информация, например
подсказки или примечания.<header> и <footer> —
заголовки и нижние колонтитулы блоков.Пример:
<section>
<header>
<h2>Пример секции</h2>
</header>
<p>Текст секции с семантическим выделением.</p>
<aside>Вспомогательная информация</aside>
<footer>Примечание к секции</footer>
</section>
MDX позволяет передавать пропсы и классы React-компонентам для
управления стилем и семантикой. Использование классов и атрибутов
role улучшает доступность:
<Callout className="warning" role="alert">
Важно: соблюдайте семантику при использовании интерактивных элементов.
</Callout>
Таблицы в MDX создаются стандартным синтаксисом Markdown и рендерятся
как <table>. Важно использовать заголовки колонок
через | и --- для правильной семантики:
| Имя | Возраст | Должность |
|-----|--------|-----------|
| Иван | 30 | Разработчик |
| Анна | 25 | Дизайнер |
Для расширенной семантики можно использовать HTML-таблицы с
<thead>, <tbody> и
<th>:
<table>
<thead>
<tr><th>Имя</th><th>Возраст</th></tr>
</thead>
<tbody>
<tr><td>Иван</td><td>30</td></tr>
<tr><td>Анна</td><td>25</td></tr>
</tbody>
</table>
MDX позволяет включать компоненты React, сохраняя при этом семантическую структуру. Например, кнопки, вкладки и аккордеоны должны использовать корректные HTML-ролики:
<Tabs role="tablist">
<Tab label="Описание">Контент вкладки 1</Tab>
<Tab label="Пример">Контент вкладки 2</Tab>
</Tabs>
Использование правильных атрибутов role,
aria-expanded и aria-controls делает контент
доступным для скринридеров.
MDX поддерживает блоки кода через тройные обратные кавычки:
```javascript
function sum(a, b) {
return a + b;
}
**Рекомендации по семантике:**
- Указывать язык для подсветки синтаксиса.
- Использовать `code` и `pre` теги корректно для доступности.
- Можно внедрять React-компоненты для интерактивного кода:
```mdx
<LiveCode code={`console.log("Hello MDX")`} />
Семантически правильные ссылки оформляются через Markdown или JSX:
[Документация MDX](https://mdxjs.com/)
Для кастомных компонентов важно использовать a или
Link с атрибутами href и rel:
<Link href="/guide" rel="noopener">Перейти к руководству</Link>
role и aria-* помогают
пользователям с ограничениями восприятия.Соблюдение этих принципов делает MDX-документы структурированными, удобными для восприятия людьми и машинами, и готовыми к интеграции в сложные веб-приложения.