2022-11-16(更新)

【Gatsby.js】見出しにページ内リンクを設定するプラグイン「gatsby-remark-autolink-headers」

hタグにidを設定してページ内のリンクを生成する。これにより記事トップに「目次」などを設定してワンクリックでスクロールさせるなど可能に。

Article Image

ページ内リンクを設定したい

目次を設置するなどページ内のリンクで自動でスクロールしてくれる機能をつけたい。

それを簡単に実現してくれるのが

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があるため

基本は以上

基本的にはここまでやれば使用可能。

特別なオプションを設定する必要はない。

オプション

設定できるオプションを列挙する。

未確認の物がおおいが、何かの参考になるかもしれないので私なりの翻訳で記述しておく。

offsetY

見出し左側に現れるリンクアイコンの高さを指定?ピクセル単位の整数。

数値を大きくすると下にズレる。

icon

アイコンを指定する。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

文字列を指定する。

アンカーに独自のクラス名を指定する。

className: `custom-class`,

maintainCase

2022/11/06更新:

booleanで指定する。英語の見出しの場合、リンクの大文字/小文字を維持する。

当サイトでは英語見出しになるケースもよくあるが、デフォルト(未指定)のままで特別問題なく動いているので理由がなければ気にする必要はなさそう。

maintainCase: true,

removeAccents

booleanで指定する。生成された見出しIDからアクセントを削除。

アルファベットの上に点が付いている一般的な「アクセント付き文字」を消去するのと同じ効果。

一部の環境依存を解消するオプションだろうか。

日本語サイトならまず考慮する必要は無いだろう。

removeAccents: true,

※テストしたところデフォルトはfalseのようでアクセントがそのままidになる。

isIconAfterHeader

booleanで指定する。

通常は見出しの左側にリンクアイコンが表示されるようになるが、右側に移動するオプション。

isIconAfterHeader: true,

当サイトではこれをtrueにすることで右側に変更。スマホなどで表示がくずれにくくなる。

elements

文字列の配列で指定する。

リンクを自動挿入するためのタグ一覧を記述する。

これはデフォルトで指定しなくてもhタグでヒットするので特別必要ないかと思うが

特殊なケースで有用かもしれない。

elements: [`h1`, `h4`],

v0.1にてclassNameに対応

2020-09-09追記

v0.1以降optionsでclassNameが指定できるようになった。

また0.0系からアップデートするときも関数などの変更はないのでメジャーアップデートして問題なかった。

className: "table-of-contents"

これにて目次の箇所がスタイリングできる。

さいごに

gatsby-remark-table-of-contents | GatsbyJS

こちらで「目次」の自動生成に対応するために今回のプラグインを導入した。

オプションに関して少し謎が残っているが基本的にはデフォルトで満足する結果が得られると思う。

実装するだけなら5分で完了するのでぜひともやっておきたい。



この記事のタグ

この記事をシェア


謎の技術研究部 (謎技研)