SVG画像の読み込み方を使い分ける


こんにちは。Gaji-Labo 横田です。SVG 画像の読み込み方を使い分けているパターンについて紹介します。

SVGをdataURLでCSSに記述する

同じ画像だけれど、色やサイズをページやコンポーネントごと、状態変化によって変更したい時、dataURL で CSS に記述して使います。

div {
    background: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 7 12" width="12" height="7"><path d="M6.7,5.3l-5-5A.967.967,0,0,0..." fill="%23000000"/></svg>') no-repeat right center;

    &:has(select:invalid) {
      background-image: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 7 12" width="12" height="7"><path d="M6.7,5.3l-5-5A.967.967,0,0,0..." fill="%23CCCCCC"/></svg>');

}

data:image/svg+xml;charset=UTF-8, に続けて SVG のコードを挿入します。
色の指定はパーセントにエンコーディングしておきます。
fillwidth などの値を簡単に変更できるので、違いごとの画像を用意する必要がなくなり、パフォーマンスの向上にもつながりますね。

SVGをインラインでHTMLに記述する

別ウィンドウで開くリンクに付くアイコンなど、HTML 側に直接画像を置きたい時、SVG 画像をインラインで HTML に記述して使います。

<a href="" target="_blank">
    リンク
    <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" role="img" aria-label="別ウィンドウで開く">
      <path d="M-299.3,6229a.684.684,0,0..." transform="translate(300 -6214)" fill="#252525"/>
    </svg>
</a>

role="img"aria-label 属性で代替テキストの代わりの機能を補完してみました。
こちらも色やサイズを直接変更できるのがメリットですが、複数箇所に使うとコードの見通しや保守性が下がるので、アクセシビリティの観点から HTML に記述したい場合や出現数とのバランスで採用を決めています。

SVGを画像として読み込む

単体でしか使わない画像やコードの複雑な SVG 画像は、通常の画像と同様に使用します。

<img src="/assets/images/hoge.svg" alt="" width="100" height="100">
div {
  background: url("/assets/images/hoge.svg") no-repeat;
  background-size: 50% 50%;
}

画像を SVG にすることでファイルサイズを小さくできますし、サイズの変更も容易です。

ちなみに、わたしはコードエディタに VS Code を使用しているのですが、SVG 画像をエディタで開くとコード表示になってしまい、何の画像か判断できないのが地味に不便でした。この不便さは Svg Preview という拡張機能を入れることで解消されました!ライブ編集もできるので VS Code で SVG 画像を扱う場合におすすめです。

公式サイトより

おわりに

小さなことですが、SVG の読み込み方を使い分けることで、パフォーマンスやアクセシビリティの向上、運用のしやすさにつながると考えます。

開発のお悩み、フロントエンドから解決しませんか?

あなたのチームのお悩みはなんですか?

「バックエンドエンジニアにフロントエンドまで任せてしまっている」
「デザイナーに主業務以外も任せてしまっている」
「すべての手が足りず細かいことまで手が回らない」

役割や領域を適切に捉えてカバーし、チーム全体の生産性と品質をアップするお手伝いをします。
フロントエンド開発に関わるお困りごとがあれば、まずは一度お気軽に Gaji-Labo にお声がけください。

オンラインでのヒアリングとフルリモートでのプロセス支援に対応しています。

リモートワーク対応のパートナーをお探しの場合もぜひ弊社にお問い合わせください!

お悩み相談はこちらから!

投稿者 Yokota Tomoko

運用やアクセシビリティに配慮したHTML/CSSの設計やコンポーネント作成、スタイルガイドの構築、コードレビュー、組み込み、要件の整理、社内進行管理、顧客とのコミュニケーションまで、ジョインしたチームを前に進めるためにあれこれ担当しています。子育てと仕事のバランスを楽しめるよう、日々模索しています。