ダークモード対応ファビコンの実装方法
投稿日:2026/01/27
最近のブラウザやOSはダークモードに対応しており、Webサイトも自動的に配色が切り替わることが増えています。
しかし、ファビコンがライトモード前提のままだと、背景と同化して見えなくなることがあります。
本記事では、ダークモードに対応したファビコンを実装する方法を解説します。
ダークモード対応ファビコンとは?
通常のファビコンは1つの画像だけを指定します。
<link rel="icon" href="/favicon.png">
この方法だと、ダークモードでも同じ画像が使われるため、
- 黒背景に黒いアイコンが見えない
- 白背景前提のデザインが浮いて見える
といった問題が発生します。
ダークモード対応ファビコンでは、OSやブラウザのテーマに応じてアイコンを切り替えます。
方法① media 属性でファビコンを切り替える
prefers-color-scheme を使うことで、ライト / ダークを切り替えられます。
HTML設定例
<!-- ライトモード用 -->
<link
rel="icon"
href="/favicon-light.svg"
type="image/svg+xml"
media="(prefers-color-scheme: light)"
>
<!-- ダークモード用 -->
<link
rel="icon"
href="/favicon-dark.svg"
type="image/svg+xml"
media="(prefers-color-scheme: dark)"
>
ブラウザが自動的に適切なファビコンを選択します。
SVGでファビコンを作成する
SVGを使うと、画像ツールを使わずにコードだけでファビコンを作成できます。
ライトモード用(favicon-light.svg)
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<rect width="100" height="100" rx="20" fill="#e2e8f0"/>
<text x="50" y="65" text-anchor="middle" font-size="48" fill="#0f172a">
SAMPLE
</text>
</svg>
ダークモード用(favicon-dark.svg)
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<rect width="100" height="100" rx="20" fill="#0f172a"/>
<text x="50" y="65" text-anchor="middle" font-size="48" fill="#38bdf8">
SAMPLE
</text>
</svg>
Laravelプロジェクトでの配置例
public/
├── favicon-light.svg
├── favicon-dark.svg
└── index.php
Bladeテンプレートの <head> に設定します。
<link
rel="icon"
href="{{ asset('favicon-light.svg') }}"
type="image/svg+xml"
media="(prefers-color-scheme: light)"
>
<link
rel="icon"
href="{{ asset('favicon-dark.svg') }}"
type="image/svg+xml"
media="(prefers-color-scheme: dark)"
>
方法② SVG内部でCSSを使って切り替える
SVGの中に prefers-color-scheme を書く方法もあります。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<style>
rect { fill: #e2e8f0; }
text { fill: #0f172a; }
@media (prefers-color-scheme: dark) {
rect { fill: #0f172a; }
text { fill: #38bdf8; }
}
</style>
<rect width="100" height="100" rx="20"/>
<text x="50" y="65" text-anchor="middle" font-size="48">
SAMPLE
</text>
</svg>
1ファイルで管理できるメリットがありますが、一部ブラウザでは挙動が不安定な場合があります。
キャッシュ対策
ファビコンはブラウザに強くキャッシュされます。
変更が反映されない場合は:
- スーパーリロード(Cmd + Shift + R)
- シークレットモードで確認
- ファイル名を変更する
例:
favicon-dark-v2.svg
動作確認方法
- ブラウザのテーマを切り替える
- macOS:システム設定 → 外観 → ライト / ダーク
- タブのファビコンが切り替わるか確認
- DevTools → Application → Manifest / Icons でも確認可能
まとめ
- ダークモード対応ファビコンはUXと視認性を向上させる
prefers-color-schemeを使うだけで簡単に切り替え可能- SVGなら画像ツール不要で管理しやすい
- Laravelでは
public配下に配置して Blade に設定するだけ - キャッシュ対策を忘れない