Як зробити блок, що розгортається, в Markdown:теги details і summary.

У Markdown немає синтаксису для випадного блоку, але він є в HTML, а майже всі Markdown-застосунки HTML приймають. Ось шаблон, правило, яке багато хто пропускає, і як залишити блок відкритим за замовчуванням.

macOS 14 або новіша. Читати можна безкоштовно; редагування й рев'ю оплачуються один раз.

Коротко

Оберніть приховану частину в тег <details>, а заголовок, що видно завжди, помістіть у <summary>. Після summary залиште порожній рядок, щоб Markdown усередині й далі відображався.

<details>
<summary>Show the full log</summary>

Everything here is hidden until the title is clicked.

- even lists
- and **formatting**

</details>

·

Синтаксис

Блок, що розгортається, — звичайний елемент HTML: <details> — контейнер, <summary> — рядок, на який натискають, а все після summary приховане, доки читач не натисне. Відкриває й закриває блок браузер (або веб-подання Markdown-застосунку), тож скриптів немає і новому синтаксису вчитися не треба.

<details>
<summary>Click to expand</summary>

Hidden text goes here.

</details>

У закритому вигляді читач бачить маленький трикутник і слова Click to expand. Натискання повертає трикутник і показує текст. Цей самий шаблон використовують README, issues і коментарі до pull request на GitHub для довгих логів і необов'язкових нотаток.

Правило порожнього рядка

Markdown усередині блоку <details> обробляється, лише якщо він відокремлений від HTML-тегів порожнім рядком. Так CommonMark читає HTML-блок: він тягнеться до наступного порожнього рядка й передається як є. Без порожнього рядка ваш **напівжирний** і список лишаться буквальними символами.

<details>
<summary>Broken</summary>
- this list is not turned into a list
</details>

<details>
<summary>Works</summary>

- this one is a list

</details>

Залиште порожній рядок після </summary> і ще один перед </details>. Сам рядок summary теж HTML, тому використовуйте в ньому <b>bold</b> або <code>code</code>, а не Markdown.

Відкритий за замовчуванням

Додайте атрибут open, щоб блок одразу був розгорнутий. Читач усе одно зможе його згорнути.

<details open>
<summary>Prerequisites</summary>

Node 20 or later.

</details>

Не зловживайте цим: на сторінці, де все відкрите з самого початку, згортання не потрібне, а на сторінці, де все закрите, найкорисніше сховане. Хороше правило: залишайте відповідь на виду, а докази згортайте — довгий вивід, повний конфіг чи список крайніх випадків.

Приклади: код, вкладеність і довгий список

Блоку коду всередині блоку, що розгортається, потрібні порожні рядки, як і будь-якому іншому Markdown:

<details>
<summary>Full config</summary>

```json
{ "retries": 3, "timeout": 30 }
```

</details>

Блоки можна вкладати. Внутрішній за бажання зсуньте, але важливі саме порожні рядки:

<details>
<summary>Troubleshooting</summary>

<details>
<summary>The app does not start</summary>

Check the log in the console.

</details>

</details>

Так читач бачить блок, закритий, доки на нього не натиснуть:

Показати повний логУсе тут приховане, доки не натиснути на заголовок.

Коли використовувати блок, що розгортається

Згортати варто, коли читач може виконати завдання, не відкриваючи блок. Хороші кандидати — довгий вивід команди, повний файл конфігурації, таблиця параметрів, журнал змін старих версій чи кроки з усунення рідкісних проблем. Коротка нотатка, потрібна більшості читачів, має лишатися на виду.

Блок також зручний, щоб охайно помістити довгі вставлені логи в баг-репорт або опис pull request: читач спершу бачить короткий опис того, що пішло не так, і відкриває лог, лише якщо потрібно. Дайте summary конкретну назву, наприклад Build log (412 lines), щоб читач знав, що всередині, ще до натискання.

Часті помилки

  • Немає порожнього рядка. Текст усередині показується як вихідний Markdown. Додайте порожній рядок після summary і перед закривним тегом.
  • Markdown у summary. Використовуйте там HTML-теги.
  • Немає закривного тегу. Усе, що нижче, лишається всередині блоку.
  • Застосунок вирізає HTML. Деякі рендерери видаляють теги, яким не довіряють, і тоді текст просто видно. Якщо блок має працювати всюди, перевірте його там, де його читатимуть.
  • Заголовки всередині summary. У більшості застосунків такий заголовок не потрапляє в зміст. Поставте заголовок над блоком.

Згорнутий текст лишається у файлі, тому пошук і diff його бачать, а читач, який ніколи не натискає, — ні. Не ховайте нічого важливого, наприклад попередження.

Як це виглядає

Щоб перевірити блок, відкрийте файл у програмі, яка відображає HTML. DotMD показує <details> як блок, що розгортається натисканням, з відформатованим Markdown усередині, а в DotMD Editor команда Insert → Collapsible Section сама пише теги. Читання безкоштовне.

Питання про блоки, що розгортаються, в Markdown

Як зробити блок, що розгортається, в Markdown?

Використайте HTML-тег <details> із заголовком у <summary> і помістіть приховений вміст після нього. Власного синтаксису для цього в Markdown немає.

Чому Markdown усередині тегу details не відображається?

Потрібен порожній рядок після </summary> і перед </details>. Без нього вміст вважається сирим HTML і не розбирається як Markdown.

Як зробити блок, що розгортається, відкритим за замовчуванням?

Напишіть <details open>. Читач усе одно зможе його згорнути.

Чи працює блок, що розгортається, на GitHub?

Так. GitHub відображає <details> у README, issues, pull request і коментарях, зокрема Markdown усередині, якщо порожні рядки на місці.

Інші запитання