Все статьи
Руководства

Markdown таблицы: синтаксис и генерация

Создание таблиц в Markdown, выравнивание, сложные таблицы, конвертация из CSV/Excel, GFM.

19 апреля 2025
6 мин чтения
ConvertHub
#markdown#таблицы#документация

Введение

Markdown давно стал де-факто стандартом для написания документации, README, статей и заметок. Он простой, читаемый в исходном виде и поддерживается повсеместно — от GitHub и GitLab до Notion и Obsidian. Одним из самых частых элементов в технических текстах оказываются таблицы: сравнения, тарифные планы, спецификации, параметры конфигурации. И хотя базовый синтаксис Markdown-таблиц умещается в пару строк, за рамки простых случаев выходить неочевидно: выравнивание, многострочные ячейки, объединение столбцов, конвертация из CSV и Excel. В этой статье разберём синтаксис GFM-таблиц, приёмы работы со сложными данными и способы автоматической генерации. Для быстрого создания таблицы без ручного подсчёта пробелов используйте нашгенератор Markdown таблиц.

Базовый синтаксис таблиц

Markdown таблицы описаны в расширении GitHub Flavored Markdown (GFM) и поддерживаются большинством современных рендереров. Минимальная таблица состоит из строки заголовков, строки-разделителя и строк с данными:

| Язык      | Год   | Создатель      |
|-----------|-------|----------------|
| C         | 1972  | Д. Ритчи       |
| Python    | 1991  | Г. ван Россум  |
| Rust      | 2010  | Г. Хоар        |

Каждая строка начинается и заканчивается вертикальной чертой|. Вторая строка — разделитель: она состоит из дефисов -, по количеству столбцов. Пробелы вокруг дефисов необязательны, но повышают читаемость в исходнике.

Выравнивание колонок

Двоеточие в строке разделителя задаёт выравнивание текста в колонке: слева, по центру или справа.

| Слева     | По центру   | Справа     |
|:----------|:-----------:|-----------:|
| текст     | текст       | текст      |
| 100       | 200         | 300        |

Без двоеточий используется выравнивание по левому краю — это поведение по умолчанию. Выравнивание по правому краю удобно для числовых колонок: суммы, проценты, ID. По центру — для коротких меток и булевых значений.

Нужно ли выравнивать пробелы в исходнике

Технически — нет. Строка | a | b | и|a|b| дадут одинаковый результат. Однако в исходном коде выравнивание пробелами сильно упрощает чтение, особенно в больших таблицах. Большинство редакторов с поддержкой Markdown (VS Code, Typora, Obsidian) автоматически выравнивают колонки при вводе.

Вставка форматирования в ячейки

Внутри ячеек работает большинство инлайн-элементов Markdown: жирный текст, курсив, код, ссылки, изображения.

| Параметр | Тип     | По умолчанию | Описание                          |
|----------|---------|--------------|-----------------------------------|
| `timeout`  | number  | `30000`        | Таймаут запроса в миллисекундах   |
| `retries` | number  | `3`             | Количество повторных попыток      |
| **url**  | string  | —            | Адрес API **обязателен**            |
| [docs]   | link    | —            | Ссылка на [документацию][docs]    |

Многострочный текст и переводы строк

Классический GFM не поддерживает переводы строк внутри ячейки: строка таблицы — это одна строка исходника. Чтобы вставить несколько абзацев, используют HTML-тег<br> или Pandoc-расширениеgrid_tables. Также можно применить подменю через списки с <ul> и <li>, если рендерер поддерживает inline HTML.

| Поле   | Описание                              |
|--------|---------------------------------------|
| status | Принимает значения: &lt;br&gt;- `active` &lt;br&gt;- `paused` &lt;br&gt;- `deleted` |

Сложные таблицы: когда GFM не хватает

У GFM-таблиц есть жёсткие ограничения: нельзя объединять ячейки через colspan и rowspan, нельзя вставлять блочные элементы (заголовки, цитаты, блоки кода). Для таких случаев применяют чистый HTML внутри Markdown:

<table>
  <thead>
    <tr><th rowspan="2">Регион</th><th colspan="2">2024</th></tr>
    <tr><th>Q1</th><th>Q2</th></tr>
  </thead>
  <tbody>
    <tr><td>Москва</td><td>120</td><td>135</td></tr>
    <tr><td>СПб</td><td>80</td><td>92</td></tr>
  </tbody>
</table>

Большинство рендереров на GitHub и GitLab пропускают HTML напрямую. Минус — таблица становится менее читаемой в исходнике и не переносится в системы, где HTML отключён (например, в некоторых рассылках).

Grid tables в Pandoc и PHP Markdown Extra

Расширение grid_tables даёт возможность рисовать таблицы символами псевдографики. В ячейках можно размещать блочные элементы и даже вложенные таблицы:

+-------+-------+-----------------------+
| Код   | Название | Описание             |
+=======+=======+=======================+
| RU    | Рубль | Деньги России.         |
|       |       | Используется с 1991.  |
+-------+-------+-----------------------+

Поддержка ограничена: формат работает в Pandoc, R Markdown, Quarto, но не на GitHub. Если целевой рендерер неизвестен, безопаснее оставаться в рамках GFM.

Конвертация из CSV, Excel и HTML

Вручную набирать таблицу из 50 строк утомительно. Гораздо быстрее получить её из готового источника — CSV-файла, Excel-листа или HTML-страницы. Алгоритм простой: читаем построчно, разделяем по разделителю, формируем Markdown-строки. На TypeScript это выглядит так:

function csvToMarkdown(csv: string, delimiter = ','): string {
  const rows = csv.trim().split('\n').map((r) =>
    r.split(delimiter).map((c) => c.trim().replace(/\|/g, '\\|'))
  );
  if (rows.length === 0) return '';
  const widths = rows[0].map((_, i) =>
    Math.max(...rows.map((r) => r[i].length))
  );
  const pad = (s: string, i: number) => s.padEnd(widths[i]);
  const header = `| ${rows[0].map(pad).join(' | ')} |`;
  const sep = `| ${widths.map((w) => '-'.repeat(w)).join(' | ')} |`;
  const body = rows.slice(1).map((r) =>
    `| ${r.map(pad).join(' | ')} |`
  );
  return [header, sep, ...body].join('\n');
}

Если разбираться в коде не хочется — используйте нашгенератор Markdown таблиц. Он принимает данные через копирование из Excel или Google Sheets, через запятую или табуляцию, и сразу выдаёт готовый Markdown с выровненными колонками.

Экранирование вертикальных черт

Если в значении встречается символ |, его обязательно экранируют обратным слэшем: \\|. Без экранирования парсер решит, что начался новый столбец, и таблица поедет. Для автоматической генерации в скрипте всегда заменяйте| на \\\\|.

Стилизация и читаемость

Хорошая таблица — это не только правильный синтаксис, но и продуманная структура. Несколько правил:

  • Ограничивайте ширину. Если колонок больше пяти — подумайте о разбивке на две таблицы или на вертикальный список.
  • Используйте единицы измерения в заголовке. Не «Таймаут», а «Таймаут, мс» — это экономит строку и время читателя.
  • Выравнивайте числа по правому краю. Так столбцы с цифрами сравниваются визуально, как в финансовых отчётах.
  • Сортируйте осмысленно. По убыванию значения, по алфавиту или по логической группе — но не случайно.
  • Не перегружайте форматированием. Жирный и код в каждой ячейке создают визуальный шум; оставьте акценты для ключевых значений.

Рендеринг в HTML и CSS

При конвертации Markdown в HTML таблица превращается в стандартный <table>. Чтобы она выглядела прилично, добавьте CSS-стили: границы, отступы, зебру. Вот минимальный набор:

table {
  border-collapse: collapse;
  width: 100%;
  margin: 1.5rem 0;
  font-size: 0.95rem;
}
th, td {
  border: 1px solid #e5e7eb;
  padding: 0.5rem 0.75rem;
  text-align: left;
}
th {
  background: #f9fafb;
  font-weight: 600;
}
tbody tr:nth-child(even) {
  background: #fafafa;
}

Если на сайте есть тёмная тема, не забудьте про медиазапросprefers-color-scheme: dark — границы и фон должны меняться вместе с остальной страницей.

Импорт из Google Sheets и Notion

Google Sheets и Notion — популярные источники табличных данных. Чтобы превратить лист в Markdown, достаточно выделить диапазон, скопировать в буфер (ячейки разделятся табуляцией) и вставить вгенератор Markdown таблиц. Инструмент определит разделитель автоматически и выдаст готовый код с выровненными колонками.

В Notion есть встроенная функция экспорта таблицы в Markdown: откройте таблицу, нажмите «Export» и выберите формат. Результат содержит корректный GFM-синтаксис, но колонки не выровнены пробелами — для красивого исходника прогоните результат через форматтер. Это полезно, когда таблица большая и выравнивать вручную не хочется.

Таблицы в GitHub Discussions и Issues

GitHub Discussions и Issues поддерживают GFM-таблицы. Чтобы вставить таблицу в комментарий, вставьте Markdown-код прямо в поле ввода — рендеринг сработает автоматически. Для больших таблиц используйте <details>-обёртку, чтобы свернуть таблицу по умолчанию и развернуть по клику:

<details>
<summary>Полная таблица совместимости (25 строк)</summary>

| Платформа | Версия | Статус |
|-----------|--------|--------|
| iOS       | 17+    | OK     |
| Android   | 12+    | OK     |
| ...       | ...    | ...    |

</details>

Заключение

Markdown-таблицы — мощный инструмент для структурирования данных в тексте. Базовый синтаксис из вертикальных черт и дефисов покрывает 90% задач: списки параметров, тарифы, сравнения. Выравнивание двоеточиями делает таблицы аккуратнее, экранирование\\| спасает от разъехавшихся колонок, а автоматическая конвертация из CSV или Excel экономит часы ручной работы. Для сложных случаев — объединённые ячейки, многострочный текст — используйте HTML или расширения вроде grid_tables. И не забывайте про нашгенератор Markdown таблиц: вставили данные, выбрали выравнивание, скопировали результат — готово.

Попробуйте эти инструменты

Похожие статьи