SVG ファビコン:対応状況・ダークモード・フォールバック
SVG ファビコンは、type image/svg+xml の link タグで参照するベクターアイコンで、サイズごとに PNG を用意する代わりに一枚のファイルがあらゆるサイズで鮮明に描画されます。ドキュメントであるため、prefers-color-scheme のメディアクエリを持たせて、ダークモードで自らを異なる形に描くこともできます。対応は万全ではなく、現行の Chrome・Edge・Firefox はレンダリングしますが、Safari はタブアイコンには使わないため、PNG か ICO のフォールバックを並べておきましょう。
セットの代わりに一枚のファイル
ラスターのファビコンは、書き出し時に下したサイズの決定です。SVG はそうではありません。ブラウザは表示面が必要とするサイズでその都度ラスタライズするので、16 ピクセルのタブも 32 ピクセルのブックマークバーも、通常 1 枚の PNG より小さい一枚のファイルから同じ鮮明な結果を得られます。
難点は対応が不均一なことで、SVG ファビコンはアイコンセットの残りの代わりにはなりません。Android と iOS のインストール済みアプリの表示面は依然として PNG を求め、Safari もタブアイコンにはラスターの経路を必要とします。SVG は、機能している PNG と ICO のセットアップの上に重ねるアップグレードとして扱いましょう。
SVG ファビコンが機能する場所
| 表示面 | 挙動 |
|---|---|
| Chrome / Edge のタブ | SVG をレンダリングする |
| Firefox のタブ | SVG をレンダリングする |
| Safari のタブ | 使わない:PNG か ICO にフォールバックする |
| iOS のホーム画面 | apple-touch-icon の PNG を使い、SVG は決して使わない |
| Android / PWA インストール | Web アプリマニフェストの PNG を使う |
head のタグ
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.json">image/svg+xml を理解するブラウザは SVG を採り、それ以外は ICO に落ちます。ユーザーエージェントの判別は不要です。
ダークモードに追従するファビコン
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<style>
path { fill: #111111 }
@media (prefers-color-scheme: dark) {
path { fill: #ffffff }
}
</style>
<path d="M20 80 L50 20 L80 80 Z" />
</svg>スタイルは SVG の内部に置かなければなりません。ファビコンのために外部スタイルシートは読み込まれません。SVG ファビコンに対応するブラウザは概ねこれを尊重し、対応しないものは単にラスターのフォールバックを使います。
SVG ファビコンに関するよくある質問
SVG ファビコンは favicon.ico の代わりになりますか?
完全にはなりません。/favicon.ico をパスでリクエストするもの(および SVG ファビコンをレンダリングしないもの)は、ラスターファイルを必要とします。SVG は追加であって、置き換えではありません。
なぜ Safari で SVG ファビコンが表示されないのですか?
現時点で Safari はタブアイコンに SVG を使いません。宣言してあるラスターアイコンにフォールバックするので、対策はそのフォールバックが存在し、見栄えも良いことを確認することです。
rel="mask-icon" は同じものですか?
いいえ。mask-icon は Safari 独自の別機能で、平坦なモノクロ SVG を受け取り、ピン留めタブ用に色を付けます。ファイル内の色は無視し、通常のタブアイコンには影響しません。