SEARCH

CATEGORY

Font Awesome のSVGアイコンをCSS疑似要素(::before / ::after)で表示する方法

SVGアイコンは、HTMLへ直接記述するだけでなく、CSSの疑似要素(::before / ::after)として使用することもできます。

例えば、以下のような装飾用途のアイコンを一括で表示したい場合に非常に便利です。
・PDFリンク
・外部リンクアイコン
・矢印アイコン
・リストマーカー

疑似要素でのアイコン表示は装飾用途向けです。
意味を持つアイコンは、アクセシビリティの観点からHTMLへ直接記述する方法が推奨されます。

Font Awesome からSVGコードを取得する

まずは使用したいアイコンのSVGコードを取得します。

Font Awesome からSVGコードを取得する方法については以下の記事で紹介しています。

background-image でCSSに記述する

取得したSVGコードを、CSSの background-image にdata URI(data:image/svg+xml)形式で記述します。

※ d=”…” の中身には、取得した実際の長いSVGパスデータをそのまま記述します。

fillカラーの「#」は %23 に変換する

SVG内の fill=””(塗りつぶし色)などで色を指定する場合、カラーコードの # はURLのハッシュと見なされてしまうため、%23 に変換する必要があります。

変換しないとSVGが正常に表示されない原因になります。

mask-image を使って色をCSS側で変更する方法(おすすめ)

アイコンが単色の場合は、background-image の代わりに mask-image を使用する方法がおすすめです。

SVG自体に色(fill)を書き込まず、CSS側の background-color でアイコンの色を指定できるようになるため、ホバー時の色変更やダークモード対応など、CSSで柔軟に色管理したい場合に便利です。

mask-image のメリット

mask-image を使用すると、SVG側へ fill=”%23xxxxxx” を記述する必要がありません。

そのため、

  • CSSだけで色変更できる
  • hover時のカラー変更が簡単
  • ダークモード対応しやすい
  • SVGコードを使い回しやすい

といったメリットがあります。

mask-image の注意点

mask-image は、SVGの形状をマスクとして使用する仕組みのため、基本的に単色アイコン向けです。
グラデーションや複数色アイコンには向いていません。

また、古いブラウザでは -webkit-mask-image の併記が必要な場合があります。

まとめ

CSS疑似要素でSVGを使用すると、HTMLへ装飾用アイコンを追加せずに管理できるメリットがあります。

background-image と mask-image は用途に応じて使い分けるのがおすすめです。

  • グラデーションや複数色、固定色のアイコン → background-image
  • ホバーで色を変えたい、サイトのテーマ色と連動させたい単色アイコン → mask-image

ただし、アイコンの数があまりにも多い場合や、SVGのパスデータが長すぎる場合は、CSSのファイル容量が肥大化して可読性が落ちる原因になります。
その場合は「SVGスプライト」など別の手法との使い分けを検討してみてください。