Font Awesome(フォントオーサム)は、Web で最も広く使われているアイコンフォントライブラリである。
アイコンを画像(PNG / SVG ファイル)として管理するのではなく、
フォントとして文字コードに割り当てる仕組みを採用しており、
CSS の font-size や color だけでサイズ・色を自在に変更できる。
2012年に Dave Gandy が Twitter Bootstrap 向けに公開し、現在は Fonticons 社が開発・管理している。 無償で使える Free エディションと、商用拡張の Pro エディションがある。
| 比較項目 | アイコンフォント(Font Awesome) | PNG / SVG ファイル管理 |
|---|---|---|
| サイズ変更 | CSS 1行(font-size) | 別ファイルを用意、または transform |
| 色変更 | CSS の color プロパティのみ | SVG 内部の fill を書き換え |
| 解像度 | ベクターなので Retina でも滲まない | PNG は高解像度用ファイルが別途必要 |
| 管理コスト | CDN 1行で数千アイコン利用可能 | アイコンごとにファイルを管理 |
2024年現在の最新安定版は 6.x 系(6.5 以降)。
クラス名が fas / far / fab(v4/5系)から
fa-solid / fa-regular / fa-brands に変更された(v5 以降)。
後方互換シムも公式提供されているが、新規プロジェクトでは v6 スタイルを推奨する。
以下の <link> タグを <head> 内に追記するだけで、
Font Awesome 6 Free の全アイコンが利用できる。
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
# Solid / Regular / Brands をまとめてインストール
npm install @fortawesome/fontawesome-free
インストール後は CSS をビルドチェーンでインポートする。
/* main.css や app.js の冒頭 */
import '@fortawesome/fontawesome-free/css/all.min.css';
<i> タグ(または <span>)に
スタイルクラスとアイコン名クラスを付与するだけである。
<!-- Solid スタイル -->
<i class="fa-solid fa-house"></i>
<!-- Regular スタイル(輪郭のみ)-->
<i class="fa-regular fa-star"></i>
<!-- Brands(ロゴ系)-->
<i class="fa-brands fa-github"></i>
fa-xs〜fa-2xlの組み込みサイズクラスか、
CSS の font-size で指定する。
<i class="fa-solid fa-location-dot fa-xs"></i>
<i class="fa-solid fa-location-dot fa-xl"></i>
<!-- または CSS で直接指定 -->
<i class="fa-solid fa-location-dot" style="font-size:48px"></i>
アイコンは通常のテキストと同じく、color プロパティで着色できる。
親要素の色を継承するので、ボタン内に配置すればボタンの色が自動で適用される。
<i class="fa-solid fa-star" style="color: #3b6ef6"></i>
<i class="fa-solid fa-star" style="color: #e84393"></i>
fa-spin・fa-pulse・fa-bounce 等のクラスで
CSS アニメーションを簡単に追加できる。
<i class="fa-solid fa-spinner fa-spin"></i> <!-- 回転 -->
<i class="fa-solid fa-bell fa-shake"></i> <!-- 振動 -->
<i class="fa-solid fa-heart fa-beat"></i> <!-- 鼓動 -->
<i class="fa-solid fa-up-down fa-bounce"></i> <!-- バウンス -->
fa-stack コンテナを使うと、2 つのアイコンを重ね合わせて
バッジ風の表現が作れる。
<span class="fa-stack fa-lg">
<i class="fa-solid fa-circle fa-stack-2x" style="color:#3b6ef6"></i>
<i class="fa-solid fa-map-pin fa-stack-1x fa-inverse"></i>
</span>
Leaflet は軽量なオープンソースの JavaScript 地図ライブラリである。 デフォルトで提供される UI コントロール(ズームボタンなど)は独自の PNG 画像を使用するが、 Font Awesome を組み合わせることで、地図上のあらゆる要素をベクターアイコンに置き換えられる。
| 用途 | 概要 |
|---|---|
| カスタムマーカー | L.divIcon で HTML マーカーを作成し、<i> タグを埋め込む |
| ポップアップ内のアイコン | bindPopup の HTML 文字列に <i> を含める |
| カスタムコントロールボタン | L.Control を継承したボタンに <i> を配置 |
| easyButton のアイコン | 後述する easy-button.js と組み合わせて使う(最も一般的) |
L.divIcon を使うと、任意の HTML をマーカーとして地図上に配置できる。
// Font Awesome アイコンをマーカーとして使う
const faIcon = L.divIcon({
html: '<i class="fa-solid fa-location-dot" style="font-size:32px;color:#e84393"></i>',
iconSize: [32, 32],
iconAnchor: [16, 32], // アイコン下端をピン位置に合わせる
className: '' // デフォルトの白背景を除去
});
L.marker([35.6812, 139.7671], { icon: faIcon })
.addTo(map)
.bindPopup('東京駅');
className: '' を指定しないと Leaflet がデフォルトスタイル(白い背景・枠線)を付与する。
Font Awesome アイコンのみを表示したい場合は必ず空文字列を設定すること。
easy-button.js は Leaflet 用の軽量プラグインで、 地図コントロール(左上に並ぶズームボタンと同じ領域)に カスタムボタンをワンライナーで追加できる。
easyButton は「ボタンの中に何を表示するか」を HTML 文字列で受け取るため、
Font Awesome の <i> タグをそのまま渡すだけでアイコンボタンが完成する。
これが「easyButton × Font Awesome」の連携の核心である。
<!-- Leaflet CSS / JS -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<!-- Font Awesome 6 -->
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
<!-- easy-button -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet-easybutton@2/src/easy-button.css">
<script src="https://cdn.jsdelivr.net/npm/leaflet-easybutton@2/src/easy-button.js"></script>
// 現在地ボタンを追加する最小構成
L.easyButton(
'fa-solid fa-location-crosshairs', // ① クラス文字列(または HTML 文字列)
function(btn, map) { // ② クリック時のコールバック
map.locate({ setView: true, maxZoom: 16 });
},
'現在地に移動' // ③ ツールチップ(title 属性)
).addTo(map);
'fa-solid fa-location-crosshairs')でも
完全な HTML 文字列('<i class="fa-solid fa-location-crosshairs"></i>')でも動作する。
v2 系では両者を自動判定する。
L.easyButton に複数のステートを渡すと、クリックのたびにアイコンやラベルが
切り替わる トグルボタンを実現できる。
例えば「レイヤーの表示 / 非表示」の切り替えに最適である。
const toggleBtn = L.easyButton({
states: [
{
stateName: 'show-layer',
icon: 'fa-solid fa-eye',
title: 'レイヤーを非表示',
onClick(btn, map) {
overlay.remove(); // レイヤーを外す
btn.state('hide-layer'); // 次の状態へ
}
},
{
stateName: 'hide-layer',
icon: 'fa-solid fa-eye-slash',
title: 'レイヤーを表示',
onClick(btn, map) {
overlay.addTo(map);
btn.state('show-layer');
}
}
]
}).addTo(map);
複数のボタンを L.easyBar でまとめると、
Leaflet 標準のズームコントロールと同じ見た目のボタングループになる。
const bar = L.easyBar([
L.easyButton('fa-solid fa-magnifying-glass-plus', zoomIn),
L.easyButton('fa-solid fa-magnifying-glass-minus', zoomOut),
L.easyButton('fa-solid fa-house', goHome),
]).addTo(map);
3つのライブラリの役割分担を整理すると以下のようになる。
| ライブラリ | 役割 | Font Awesome との関係 |
|---|---|---|
| Font Awesome | アイコンをフォントとして提供する基盤 | —(提供側) |
| Leaflet | 地図の描画・操作・イベント管理 | L.divIcon の html にアイコンを埋め込む |
| easy-button.js | Leaflet コントロール領域にボタンを追加 | 第1引数にクラス名を渡すだけでアイコンボタン化 |
| 症状 | 原因 | 対処 |
|---|---|---|
| アイコンが□(豆腐)で表示される | フォントファイルの読み込み失敗、またはクラス名の誤り | CDN の URL・クラス名(fa-solid / fa-regular等)を再確認 |
| easyButton でアイコンが表示されない | Font Awesome の CSS が easyButton の JS より後に読み込まれている | Font Awesome の <link> を先に記述する |
L.divIcon に白背景が残る |
Leaflet のデフォルトスタイルが適用されている | className: '' を指定して既定スタイルを除去する |
v4 系のクラス名(fas)が動かない |
v6 からクラス名が変更された | fa-solid / fa-regular / fa-brands に書き換える |
| Pro アイコンが表示されない | Free エディションには含まれないアイコンを使っている | fontawesome.com で Free か Pro かを確認する |
Font Awesome は fontawesome.com にて全アイコンを検索できる。 easy-button.js は GitHub(CliffCloud/Leaflet.EasyButton) で公開されている。