目次を設置するなどページ内のリンクで自動でスクロールしてくれる機能をつけたい。
それを簡単に実現してくれるのが
gatsby-remark-autolink-headers
である。
5分もあれば十分設置できる。
こちらはGatsby.js内のプラグインの解説サイト
gatsby-remark-autolink-headers | GatsbyJS
目次などを設定するときに使うほか、他のサイトから参考リンクで飛んでくる時に
ジャンプしてすぐ目的の見出しまでスクロールしてくれる。
ユーザビリティを高めるプラグインだ。
npm install --save gatsby-remark-autolink-headers
gatsby.config.js
設定plugins
配下に設定
plugins: [
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [`gatsby-remark-autolink-headers`],
},
},
],
2022/11/06 追記:
デフォルトだと左側にアイコンがくるが、スマホで画面いっぱいにコンテンツを表示する設計だと画面端に飛び出してしまう。
そこで私のサイトではisIconAfterHeader: true
オプションを付けてhタグの右側(文字の後ろ)に表示するよう変更した。
この設定の詳細は下のオプションでも解説。
gatsby-remark-prismjs
を一緒に使う場合はprimjs
よりも上にこちらのプラグインを記述すること!
公式で認知済みのissueがあるため
基本的にはここまでやれば使用可能。
特別なオプションを設定する必要はない。
設定できるオプションを列挙する。
未確認の物がおおいが、何かの参考になるかもしれないので私なりの翻訳で記述しておく。
見出し左側に現れるリンクアイコンの高さを指定?ピクセル単位の整数。
数値を大きくすると下にズレる。
アイコンを指定する。boolean
でオンオフ。
自前のものを設定したい場合はここにsvg
タグをそのまま入れる。
icon: `<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>`,
文字列
を指定する。
アンカーに独自のクラス名を指定する。
className: `custom-class`,
2022/11/06更新:
boolean
で指定する。英語の見出しの場合、リンクの大文字/小文字を維持する。
当サイトでは英語見出しになるケースもよくあるが、デフォルト(未指定)のままで特別問題なく動いているので理由がなければ気にする必要はなさそう。
maintainCase: true,
boolean
で指定する。生成された見出しIDからアクセントを削除。
アルファベットの上に点が付いている一般的な「アクセント付き文字」を消去するのと同じ効果。
一部の環境依存を解消するオプションだろうか。
日本語サイトならまず考慮する必要は無いだろう。
removeAccents: true,
※テストしたところデフォルトはfalse
のようでアクセントがそのままidになる。
boolean
で指定する。
通常は見出しの左側にリンクアイコンが表示されるようになるが、右側に移動するオプション。
isIconAfterHeader: true,
当サイトではこれをtrueにすることで右側に変更。スマホなどで表示がくずれにくくなる。
文字列の配列
で指定する。
リンクを自動挿入するためのタグ一覧を記述する。
これはデフォルトで指定しなくてもhタグでヒットするので特別必要ないかと思うが
特殊なケースで有用かもしれない。
elements: [`h1`, `h4`],
2020-09-09追記
v0.1以降optionsでclassName
が指定できるようになった。
また0.0系からアップデートするときも関数などの変更はないのでメジャーアップデートして問題なかった。
className: "table-of-contents"
これにて目次の箇所がスタイリングできる。
gatsby-remark-table-of-contents | GatsbyJS
こちらで「目次」の自動生成に対応するために今回のプラグインを導入した。
オプションに関して少し謎が残っているが基本的にはデフォルトで満足する結果が得られると思う。
実装するだけなら5分で完了するのでぜひともやっておきたい。