CSSスタイリングのためのfill属性の除去

SVGアイコンからfillとstroke属性を除去し、CSSのみで色を制御。テーマ、ダークモードサポート、デザインシステムアイコンライブラリに不可欠な手法です。

Styling

詳細な説明

CSSスタイリングのためのfill除去

SVGスプライト構築時の最も一般的な問題の1つは、ソースSVGにハードコードされたfillstroke属性があり、CSSによる色制御を妨げることです。これらの属性を除去することが、柔軟でテーマ対応可能なアイコンシステムの構築に不可欠です。

問題

SVGパスにハードコードされたfillがある場合:

<symbol id="icon-star" viewBox="0 0 24 24">
  <path fill="#FFD700" d="M12 2l3.09 6.26..."/>
</symbol>

CSSでこの色をオーバーライドできません。<use>で作成されたシャドウDOM内で、ハードコードされたfill="#FFD700"はプレゼンテーション属性として継承されたスタイルよりも優先されます。

解決策

fillとstroke属性を除去してSVGがCSSから色を継承するようにします:

<symbol id="icon-star" viewBox="0 0 24 24">
  <path d="M12 2l3.09 6.26..."/>
</symbol>

CSSで色を制御できるようになります:

.icon { fill: currentColor; }

保持すべきもの

すべてのfillとstroke属性を除去すべきではありません:

  • fill="none" — 領域を透明に保ちます。除去するとデフォルトのfill色(黒)になります。常に保持してください。
  • stroke="none" — 明示的にストロークを除去します。保持して安全です。
  • fill="currentColor" — CSS制御用にすでに設定されています。除去する必要はありません。

currentColorの使用

currentColorキーワードはCSSのcolorとSVGのfillの架け橋です。モノクロアイコンのデザインシステムで推奨されるアプローチです。

自動化

SVGスプライトジェネレーターには「Remove fill/stroke」トグルがあり、これを自動的に処理します。ビルドパイプラインでは、SVGOをプレゼンテーション属性を除去するように設定できます。

ユースケース

テーマ対応可能なアイコンライブラリを構築するデザインシステムチーム、カラースキームの変更にアイコンを適応させる必要があるダークモード実装プロジェクト、デザインツールからのSVGを本番用に準備するフロントエンド開発者。

試してみる — SVG Sprite Generator

フルツールを開く