Nuxt Fontaine
Nuxt 3 向けフォントメトリクスフォールバックの実装
機能
⚠️ @nuxtjs/fontaine
は現在活発に開発されています。⚠️
- 💪 精巧に作られたフォントメトリクスでローカルフォントフォールバックを使用することで CLS を削減します。
- ✨ フォントメトリクスとフォールバックを自動的に生成します。
- ⚡️ 純粋な CSS、ゼロのランタイムオーバーヘッド。
プレイグラウンドプロジェクトで、このモジュールを有効/無効にすると、/
をレンダリングする際、カスタマイズは必要なく、次の違いが生まれます
前 | 後 | |
---|---|---|
CLS | 0.34 | 0.013 |
パフォーマンス | 88 | 98 |
今後
最高の性能を得るには、フォントフェイスフォールバックルールだけでなくすべての CSS をインラインにする必要があります(このモジュールは自動的に実行します)。そうしないと、スタイルシートの読み込み時にレイアウトがずれてしまいます(上の数字がゼロでない理由です)。
この PR は、それらの機能を Nuxt 自体に組み込もうとしています。
インストール
npx nuxi@latest module add fontaine
使用方法
export default defineNuxtConfig({
modules: ['@nuxtjs/fontaine'],
// If you are using a Google font or you don't have a @font-face declaration
// for a font you're using, you can declare them here.
//
// In most cases this is not necessary.
//
// fontMetrics: {
// fonts: ['Inter', { family: 'Some Custom Font', src: '/path/to/custom/font.woff2' }],
// },
})
以上です。
Tailwind CSS
Tailwind CSS を使用していて、設定ファイルからカスタムフォントを使用している場合、フォールバックフォントを手動で追加する必要があります。
import type { Config } from 'tailwindcss'
import { fontFamily } from 'tailwindcss/defaultTheme'
export default <Partial<Config>> {
theme: {
extend: {
fontFamily: {
sans: ['Roboto', 'Roboto fallback', ...fontFamily.sans],
},
},
},
}
動作方法
Nuxt は @font-face
ルールをスキャンし、適切なメトリクスを使用してフォールバックルールを生成します。たとえば
@font-face {
font-family: 'Roboto';
font-display: swap;
src: url('/fonts/Roboto.woff2') format('woff2'), url('/fonts/Roboto.woff') format('woff');
font-weight: 700;
}
/* This will be generated. */
@font-face {
font-family: 'Roboto fallback';
src: local('BlinkMacSystemFont'), local('Segoe UI'), local('Roboto'), local('Helvetica Neue'),
local('Arial'), local('Noto Sans');
ascent-override: 92.7734375%;
descent-override: 24.4140625%;
line-gap-override: 0%;
}
font-family: 'Roboto'
を使用する場合は、いつでも Nuxt がフォールバックをフォントファミリーに追加します
:root {
font-family: 'Roboto';
/* This becomes */
font-family: 'Roboto', 'Roboto fallback';
}
Nuxt の外部での使用
このモジュールのコアは Nuxt の外側でも動作し、別のライブラリに分割されています: fontaine
。ぜひチェックしてください。
💻 開発
- このリポジトリをクローンしてください
corepack enable
を使用して Corepack を有効にする(Node.js < 16.10 の場合はnpm i -g corepack
を使用します)pnpm install
を使用して依存関係をインストールするpnpm dev:prepare
でモジュールをスタブするpnpm dev
を実行して プレイグラウンド を開発モードで開始する
クレジット
以下のものなしにはこれは実現できませんでした
- capsizecss からの素晴らしいツールと生成されたメトリクス
- Google オーロラチームの ケイティ・ヘンペニウス と カラ・エリクソン の示唆とアルゴリズム - フォントメトリクスオーバーライドの計算に関するメモ を参照してください。
ライセンス
❤️のこもった開発
MITライセンスに従って公開しています。