Webデザイナー必見!CSSでSVG画像をアニメーションさせるテクニック

2024-04-02

CSS で SVG 画像のスタイルを変更する方法

このページでは、img タグで読み込んだ SVG 画像のスタイルを CSS で変更する方法を、初心者にも分かりやすく解説します。

SVG 画像の基礎知識

SVG 画像は XML 形式で記述されたファイルであり、パスや形状、色などをコードで表しています。そのため、従来の画像形式と比べてファイルサイズが小さく、編集やカスタマイズ性に優れています。

SVG 画像の基本的な構造は以下の通りです。

<svg>
  <defs>
    </defs>
  <g>
    <path fill="red" d="M0 0 L100 100" />
    <circle cx="50" cy="50" r="20" fill="blue" />
  </g>
</svg>

fill 属性は、パスや形状の塗りつぶしの色を指定します。上記例では、赤い線と青い円が表示されます。

img タグで SVG 画像を読み込む

HTML ファイルで img タグを用いて SVG 画像を読み込むには、src 属性に SVG ファイルのパスを指定します。

<img src="sample.svg" alt="サンプル画像">

alt 属性は、画像が表示できない場合に代替テキストとして表示されます。

CSS でスタイルを変更する

SVG 画像のスタイルは、CSS の fill 属性をはじめ、様々なプロパティを用いて変更できます。

塗りつぶしの色を変更する

fill 属性で、パスや形状の塗りつぶしの色を変更できます。

img[src="sample.svg"] {
  fill: green;
}

上記コードは、sample.svg 内の全てのパスや形状の塗りつぶし色を緑色に変更します。

線の色を変更する

stroke 属性で、線の色を変更できます。

img[src="sample.svg"] {
  stroke: blue;
  stroke-width: 2;
}

その他のスタイル

opacity 属性で透明度を、transform 属性で拡大・縮小や回転などの変形を指定できます。

詳細は CSS の各プロパティの説明を参照してください。

応用例

ホバー時のアニメーション

CSS アニメーションを用いて、マウスホバー時に SVG 画像の色や形を変えることができます。

<img src="sample.svg" alt="サンプル画像">
img[src="sample.svg"]:hover {
  fill: yellow;
  transform: scale(1.2);
}

上記コードは、sample.svg にマウスホバーすると、画像の色が黄色に変わり、1.2 倍に拡大されます。

アイコンの切り替え

複数の SVG 画像を用意し、JavaScript で切り替えることで、アイコンアニメーションを作成できます。

<img src="icon-1.svg" alt="アイコン1">
<img src="icon-2.svg" alt="アイコン2">
const img1 = document.querySelector('img[src="icon-1.svg"]');
const img2 = document.querySelector('img[src="icon-2.svg"]');

img1.addEventListener('click', () => {
  img1.classList.add('hidden');
  img2.classList.remove('hidden');
});

img2.addEventListener('click', () => {
  img2.classList.add('hidden');
  img1.classList.remove('hidden');
});

上記コードは、icon-1.svgicon-2.svg をクリックで切り替える例です。

まとめ

CSS を用いることで、SVG 画像のスタイルを自由自在に変更できます。今回紹介した方法を参考に、様々な表現を試してみてください。




基本的なスタイル変更

<img src="sample.svg" alt="サンプル画像">
img[src="sample.svg"] {
  fill: green; /* 塗りつぶしの色 */
  stroke: blue; /* 線の色 */
  stroke-width: 2; /* 線の太さ */
  opacity: 0.5; /* 透明度 */
}

ホバー時のアニメーション

<img src="sample.svg" alt="サンプル画像">
img[src="sample.svg"]:hover {
  fill: yellow; /* ホバー時の塗りつぶしの色 */
  transform: scale(1.2); /* ホバー時の拡大率 */
}

アイコンの切り替え

<img src="icon-1.svg" alt="アイコン1" class="active">
<img src="icon-2.svg" alt="アイコン2">
.active {
  display: block;
}

.hidden {
  display: none;
}
const img1 = document.querySelector('img[src="icon-1.svg"]');
const img2 = document.querySelector('img[src="icon-2.svg"]');

img1.addEventListener('click', () => {
  img1.classList.add('hidden');
  img2.classList.remove('hidden');
  img2.classList.add('active');
});

img2.addEventListener('click', () => {
  img2.classList.add('hidden');
  img1.classList.remove('hidden');
  img1.classList.add('active');
});



SVG 画像のスタイル変更方法:その他の方法

style 属性

img タグに style 属性を直接記述することで、スタイルを指定できます。

<img src="sample.svg" alt="サンプル画像" style="fill: green; stroke: blue;">

ただし、この方法はコードの見通しが悪くなる場合があり、あまり推奨されていません。

JavaScript を用いて、動的にスタイルを変更できます。

<img src="sample.svg" alt="サンプル画像" id="my-image">
const img = document.querySelector('#my-image');

img.style.fill = 'green';
img.style.stroke = 'blue';

この方法は、アニメーションなど動的な表現に適しています。

SVG ファイルを直接編集ソフトで開いて、パスや形状の色などを変更できます。

ただし、編集ソフトの操作に慣れないと、時間がかかったり、誤操作をしてしまう可能性があります。

ライブラリの利用

Snap.svg や D3.js などのライブラリを用いて、SVG 画像をプログラムで操作することができます。

これらのライブラリは複雑なアニメーションやインタラクションを作成するのに役立ちますが、学習曲線が steep です。

おすすめの方法

  • シンプルなスタイル変更であれば、CSS が最も簡単です。
  • 動的な表現や複雑なアニメーションの場合は、JavaScript がおすすめです。
  • SVG ファイルを直接編集したい場合は、編集ソフトに慣れている必要があります。
  • 高度な機能が必要な場合は、ライブラリの利用を検討しましょう。

まとめ

SVG 画像のスタイル変更には、様々な方法があります。それぞれの方法の特徴を理解し、目的に合った方法を選びましょう。


css image svg


横並びレイアウトの作り方: float vs display vs Flexbox

float プロパティは、要素を左右に浮かせ、横並びにするために使用されます。 以下のコードは、2つのdivを左側に並べる例です。display プロパティは、要素の表示方法を指定するために使用されます。 以下のコードは、2つのdivをインラインブロックとして表示し、横並びにする例です。...


【初心者向け】HTMLとCSSでファイル入力ボタンをデザインする方法【2024年最新版】

HTMLCSSこの方法は、すべての主要なブラウザでサポートされています。この方法は、より自由度の高いデザインが可能ですが、一部の古いブラウザではサポートされていない場合があります。input 要素の type 属性を file に設定することで、ファイル入力ボタンになります。...


シンプルでわかりやすいHTMLスタイルの書き方:<style> タグを使いこなそう

外部 CSS ファイルを使用する:スタイル定義を . css ファイルに記述し、<head> タグ内で <link> タグを使用して HTML ファイルに読み込む方法です。利点: 複数のページで共通するスタイルを効率的に管理できる、コードが読みやすくなる欠点: ファイルの読み込みが必要となるため、ページの読み込み速度が遅くなる可能性がある...


水平線と文字を中央に配置する5つの方法 (HTML/CSS)

この方法は、beforeまたはafter擬似要素を使用して、水平線を表現します。この例では、p要素に対してtext-align: center;を指定することで文字を中央に配置し、::before擬似要素を使用して水平線を表現しています。利点:...


隣接兄弟セレクタ vs nth-childセレクタ:ホバーイベントで別のdivを操作する

隣接兄弟セレクタを使うHTMLの構造が以下の場合、#div1にマウスが乗った時に#div2の背景色を変えることができます。CSSは以下のようになります。この例では、#div1:hoverで#div1にマウスが乗っている状態を指定し、+記号を使って#div1の直接後ろにある#div2のみを対象にしています。...