はてなブログに「目次記法」があることにいまさら気付いた

WordPress で作られたブログには、よく「目次」のリンクがあり、コレが便利だなーと思っていたのだけど、はてなブログにも「目次記法」というモノがあり、コレで目次を自動生成してくれることを最近知った。

よく見たら記事編集画面のツールバーに生成ボタンあるじゃん…。

目次

公式の解説記事

「はてなブログ開発ブログ」に、この目次記法の紹介記事があった。

目次のインデントも可能

目次は見出しのレベルに応じて自動的にインデントされる。

自分のブログだと Markdown 記法を使っていて、トップレベルの見出しは「#」、つまり h1 要素で作成している。そして先程の「目次のインデントも可能」という見出しは「## = h2 要素」で作成した。コレも目次記法の中では正しくインデントされているであろう。

目次記法の配置方法

目次方法を配置するには、以下のように書くだけ。

[:contents]

これで、ul.table-of-contents が生成され、見出しに応じたリストが生成される。

目次記法のデザイン

通常だと、単なる ul 要素でレイアウトされ、「目次」みたいな見出しも付かない。逆に「目次」という文字を見出しレベルで書いてしまうと、コレも目次記法のリストの中に書かれてしまう。

そこで、CSS でデザインを整えつつ、「目次」という小見出しを入れてみようと思う。

/* 目次記法 */
.table-of-contents {
  display: inline-block;
  margin: 1em 0 !important;
  padding: 1em 1.5em 1em 2em !important;
  border: 1px solid #ccc;
  background: #f3f3f3;
}

/* 目次記法の小見出しを作る */
.table-of-contents:before {
  display: block;
  content: "目次";
  margin-bottom: 1em;
  font-weight: bold;
  text-align: center;
}

このサイトで付けている CSS はこんな感じ。ul.table-of-contentsdisplay: inline-block を付けて、border が幅いっぱいに付かないようにしてやると、WordPress でもよく見る目次記法っぽくなる。

あとは :before 擬似要素で「目次」というテキストを入れてやれば OK。

以上

JavaScript を組み合わせれば目次リストの開閉もできそうだが、とりあえず今はいいかな。