UI実装では、アイコンや装飾図形を「SVGで作るべきか」「CSSだけで表現すべきか」で迷う場面が頻繁にあります。どちらも正解になり得る手段ですが、基準が曖昧なまま選択すると、後から修正しづらい構成になったり、保守コストが増えたりします。本記事では、SVGとCSS図形それぞれの特性を整理し、実務で判断に迷わないための使い分け基準を設計視点で解説します。
SVGとCSS図形の役割の違い
SVGは「図形そのものをデータとして表現する技術」であり、CSS図形は「レイアウトや装飾の延長として形を作る手段」です。SVGは形状そのものが主役で、CSS図形は要素を補助するための視覚表現という位置付けになります。この役割の違いを意識することが、使い分けの第一歩になります。
CSS図形が向いているケース
CSS図形は、単色かつ単純な形状で、装飾的な意味合いが強い場合に適しています。チェックマーク、矢印、リストマーカー、装飾線、吹き出しの矢印などは典型例です。currentColor や em 単位を使えば、文字サイズやテーマカラーと自然に連動し、レスポンシブ対応も容易になります。
また、before/after を使ったCSS図形はHTML構造を増やさずに実装できるため、小さなUI装飾においては非常に保守性が高い選択になります。
CSS図形の限界を理解する
CSS図形は、border や transform、擬似要素を組み合わせて形を「それっぽく」表現しているに過ぎません。そのため、複雑な曲線、精密な比率、微妙な形状差を正確に再現するのは困難です。また、状態ごとに形が変わる表現や、アニメーションを伴う複雑な動きも実装が煩雑になりがちです。
SVGが向いているケース
SVGは、形状そのものに意味があり、正確性が求められる場合に適しています。ロゴ、ブランドアイコン、複雑なアイコンセット、グラフ、地図、インフォグラフィックなどはSVGを使うべき領域です。パスデータによって形が定義されているため、拡大縮小しても劣化せず、デザインの再現性が高いという特徴があります。
SVGのスタイル制御とCSS連携
SVGはCSSと組み合わせることで、色変更やホバー表現、簡単なアニメーションも可能です。inline SVGであれば、fill や stroke を currentColor に連動させることで、CSS図形と同じような使い勝手も実現できます。
.icon {
color: #333;
}
この場合、SVG側で fill=”currentColor” を指定しておくことで、CSSから一元管理できます。
SVGを使う際の注意点
SVGは便利な反面、使い方を誤ると管理コストが増えます。不要なメタデータや属性が含まれたまま配置すると、HTMLが肥大化しやすくなります。また、装飾用途の小さなアイコンまでSVGにしてしまうと、CSSで完結できたはずの表現が分散し、全体の見通しが悪くなることがあります。
パフォーマンスと管理コストの観点
単純な装飾であればCSS図形のほうが軽量で、HTTPリクエストも不要です。一方、SVGスプライトやインラインSVGは再利用性が高く、同一アイコンを多数使う場合には管理しやすくなります。どちらが速いかではなく、「その表現に対して過剰な手段になっていないか」を基準に判断することが重要です。
判断基準をシンプルにするための考え方
迷った場合は、「意味を持つ図形かどうか」で判断すると整理しやすくなります。意味や情報を伝える役割を持つ図形はSVG、装飾や補助的な視覚表現はCSS図形、という線引きをしておくと、設計が破綻しにくくなります。
実務で使いやすい使い分けルール
プロジェクト全体でルールを決めておくことも重要です。チェックや矢印はCSS、アイコンセットはSVG、ロゴは必ずSVG、といった基準を共有しておけば、実装者ごとの判断ブレを防げます。結果として、CSSとSVGが無秩序に混在する状態を避けられます。
まとめ
SVGとCSS図形は競合する技術ではなく、役割の異なる表現手段です。単純で装飾的な図形はCSS、正確性や意味を持つ図形はSVGという基準で使い分けることで、保守性と拡張性の高いUI実装が可能になります。表現力ではなく「責務」で選ぶことが、長期運用に耐える設計につながります。

