ガイド · Markdown → HTML
Markdown の表を HTML の表へ
パイプ表は、Markdown のなかで壊れるところを一番よく見られている部分です。GitHub では表示されるのに、別の場所ではパイプだらけの段落になって出てきます。
変換を通る書き方、向こう側の HTML がどうなるか、そして表をテキストに戻してしまう三つの間違いを見ていきます。
表が表になるための条件
パイプ表は CommonMark の一部ではありません。GitHub Flavoured Markdown 由来なので、変換する側がそれを自分で有効にする必要があります —— していないものもあります。ここではしています。
必要なものは三つ。見出しの行、その下のハイフンの行、そして内容の行が少なくとも一行。三つのどれかが欠けると、出てくるのは段落です。
- 01見出しの行を、セルごとにパイプで区切って書きます。行頭と行末のパイプは省略できますが、書いておくとセルの数が合っていない行にすぐ気づけます。
- 02その直下にハイフンの行を、空行を挟まずに書きます。一列あたりハイフン三つが安全な最小です。
- 03内容の行を書きます。ソース上で桁を揃える必要はありません —— セルの区切りはパイプで、列位置ではありません。
| Part | Qty |
| ---- | --- |
| Bolt | 12 |
| Nut | 12 |<table>
<thead>
<tr>
<th scope="col">Part</th>
<th scope="col">Qty</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bolt</td>
<td>12</td>
</tr>
</tbody>
</table>scope 属性は何のためにあるか
見出しのセルは太字の <td> ではなく <th scope="col"> として出てきます。スクリーンリーダーが「Qty、12」と読み上げられるのは、ひとえにこの属性があるからです。これがないと、どの列のものか分からない数字が一つ読まれるだけになります。
コストはゼロで、それが「表」と「数字の並び」の分かれ目になります。div で組んだ見た目だけの表ではこれを表現できません —— そう組むべきでない一番強い理由です。
配置:コロンの行
ハイフンの行に置いたコロンが、列ごとの配置を決めます。左にコロンで左寄せ、両側で中央、右で右寄せ —— 数字の列に欲しいのは最後のものです。
HTML に出てくるのはインラインスタイルではなくクラスです。align-left、align-center、align-right の三つ。このサイトの出力ではインラインスタイルを一切残していません。style 属性は CSS を注入するときの入口そのものだからです。
つまりページ全体モードでは配置がそのまま効いています —— <head> のスタイルシートがこの三つのクラスを定義しています。フラグメントモードではそれをあなたの CSS に委ねます。それがフラグメントモードの意味です。一行のルールを三つ書けば、サイトと戦うのではなくサイトに馴染みます。
| Item | Cost |
| :--- | ---: |
| Bolt | 0.40 |<th scope="col" class="align-left">Item</th>
<th scope="col" class="align-right">Cost</th>
...
<td class="align-left">Bolt</td>
<td class="align-right">0.40</td>表が段落になって出てくるとき
原因は三つ、よく起きる順に。
- 01見出しの行とハイフンの行のあいだに空行がある。表のパーサーが見る前に、もう二つの段落に分かれています。
- 02セルの文字のなかにパイプがある。\| とエスケープしてください。しないとそのセルが二つに割れて、その行だけ見出しよりセルが多くなります。
- 03ハイフンが足りない。一列にハイフン一つは通るパーサーと通らないパーサーがあります。三つならどれでも通ります。
セルに入れられるのは文字だけではない
セルのなかではインラインの Markdown が効きます。太字、斜体、インラインコード、リンク。ブロックレベルのものは効きません —— リストも段落もフェンス付きコードブロックも入りません。これは表の構文そのものの制約で、この変換ツールの制約ではありません。
セル内で改行するには、<br> を手で書く必要があります。Markdown のなかの生の HTML はエスケープせずそのまま通しているので機能しますし、出るときにはほかと同じくサニタイズされます。
パイプ表が HTML になったあとで挙動が変わるのは、以上です。変換ツールは貼り付けた Markdown も、ドロップした .md ファイルも受け取ります。何もブラウザの外には出ません。
MD → HTML