Markdownで折りたたみを作るには:detailsタグとsummaryタグ。

Markdownにはドロップダウンの構文がありませんが、HTMLにはあり、ほぼすべてのMarkdownアプリがHTMLを受け付けます。ここではそのパターンと、見落とされがちな1つのルール、最初から開いた状態にする方法を説明します。

macOS 14以降。閲覧は無料で、編集とレビューは1回のお支払いです。

要点

隠したい部分を<details>タグで囲み、常に見えるタイトルを<summary>に入れます。中のMarkdownが整形されるように、summaryの後に空行を入れます。

<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アプリのWebビュー)が行うので、スクリプトも、新しく覚える構文もありません。

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

Hidden text goes here.

</details>

閉じているときは小さな三角とClick to expandの文字が見え、クリックすると三角が回って本文が現れます。GitHubのREADME、Issue、プルリクエストのコメントでも、長いログや補足のメモにこの同じ方法が使われています。

空行のルール

<details>ブロックの中のMarkdownは、HTMLタグとの間に空行があるときだけ処理されます。CommonMarkはHTMLブロックを次の空行までと読み取り、生のHTMLとしてそのまま通すためです。空行がないと、**bold**やリストが文字のまま表示されます。

<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なので、ここではMarkdownではなく<b>bold</b>や<code>code</code>を使います。

最初から開いておく

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>

読み手に見えるセクションは次のとおりで、クリックするまで閉じています。

Show the full logEverything here is hidden until the title is clicked.

折りたたみを使う場面

畳む価値があるのは、読み手がセクションを開かなくても作業を終えられるときです。長いコマンド出力、設定ファイル全体、オプションの表、古いバージョンの変更履歴、まれな問題のトラブルシューティング手順などが向いています。多くの読み手に必要な短い補足は、見える状態のままにします。

バグ報告やプルリクエストの説明に長いログを貼るときも、セクションが役立ちます。読み手は何が起きたかの要約を先に見て、必要なときだけログを開けます。中身が分かるように、Build log (412 lines)のように具体的なタイトルを付けてください。

よくある間違い

  • 空行がない。中のテキストに生のMarkdownが表示されます。summaryの後ろと閉じタグの前に空行を入れます。
  • summaryの中にMarkdownを書く。そこではHTMLタグを使います。
  • 閉じタグがない。以降のすべてがセクションの中に入ってしまいます。
  • HTMLを取り除くアプリ。信頼できないタグを除去するレンダラーでは、テキストが単に見えた状態になります。どこでも動かす必要があるなら、実際に読まれる場所でテストしてください。
  • summaryの中の見出し。多くのアプリでは、その見出しがアウトラインに表示されません。見出しはセクションの上に置いてください。

折りたたんだテキストもファイルの中にあるので、検索や差分には含まれますが、一度もクリックしない読み手は目にしません。警告のような大事なことは隠さないでください。

動作を確認する

セクションを確認するには、HTMLを描画するリーダーでファイルを開きます。DotMDは<details>をクリックで開くセクションとして表示し、中のMarkdownも整形されます。DotMD EditorではInsert → Collapsible Sectionがタグを書いてくれます。閲覧は無料です。

Markdownの折りたたみセクションに関するよくある質問

Markdownで折りたたみセクションを作るには?

HTMLの<details>タグに<summary>のタイトルを付け、隠したい内容をその後ろに置きます。Markdownにはそのための標準の構文はありません。

detailsタグの中のMarkdownが整形されないのはなぜ?

</summary>の後ろと</details>の前に空行が必要です。空行がないと、内容は生のHTMLとして扱われ、Markdownとして解析されません。

折りたたみセクションを最初から開いておくには?

<details open>と書きます。読み手は閉じることもできます。

折りたたみセクションはGitHubで動きますか?

はい。GitHubはREADME、Issue、プルリクエスト、コメントで<details>を描画し、空行があれば中のMarkdownも整形されます。

その他の質問