🚀

Astro で FONTPLUS の Web フォントを読み込む

2024/03/22に公開

先に結論

スクリプトの読み込み部分に is:inline を入れるだけで OK。検証していないけれど TypeSquare 等の Web フォントも同様のやり方で読み込めると思う。

src/layouts/layout.astro
<head>
  <script
    is:inline
    src="https://webfont.fontplus.jp/accessor/script/fontplus.js?..."
  ></script>
</head>

なぜなのか

Astro では Web フォントに限らず、外部スクリプトの読み込み時は is:inline をつける必要がある。そうしないと Astro でスクリプトの処理・最適化・バンドルが走ってしまい、期待通りの挙動にはならない模様。

外部スクリプトをロードする – Astro Docs
https://docs.astro.build/ja/guides/client-side-scripts/#外部スクリプトをロードする

View Transitions を導入する場合

View Transitions を使用する場合は、ページ遷移ごとに Web フォントを読み込む必要がある。astro:after-swap イベントをリッスンして、新ページに切り替わった後 Web フォントをリロードする。

src/layouts/layout.astro
<script>
  document.addEventListener('astro:after-swap', () => {
    FONTPLUS.reload()
  })
</script>

TypeScript で書くなら:

src/layouts/layout.astro
<script>
  // 上記コードの TypeScript 版
  interface FONTPLUS {
    reload: (init?: boolean) => void
  }
  declare var FONTPLUS: FONTPLUS

  document.addEventListener('astro:after-swap', () => {
    FONTPLUS.reload()
  })
</script>

ちなみに

Google Fonts に関しては、npm を用いたインストール方法が存在する。

Fontsourceを使う – Astro Docs
https://docs.astro.build/ja/guides/fonts/#fontsourceを使う

Discussion