SVG transformの完全ガイド:基礎から実践まで、座標変換をマスターしよう
SVGのtransform属性を使いこなして、図形の移動・回転・拡大縮小・傾斜を自在に制御する方法を解説。初心者向けの基礎から実践的な応用テクニックまで、コード例を交えて詳しく説明します。
SVG(Scalable Vector Graphics)において、transform属性は図形の位置、サイズ、向きを変更する強力なツールです。本記事では、SVG transformの基礎概念から実践的な応用まで、詳細なコード例とともに解説します。
SVG transformの基礎概念
SVG transformは、図形に対して以下の変換操作を提供します:
- 移動(translate): 図形の位置を変更
- 回転(rotate): 図形を指定した角度で回転
- 拡大縮小(scale): 図形のサイズを変更
- 傾斜(skew): 図形を指定した角度で傾ける
transformの基本構文
<svg width="200" height="200"> <rect x="10" y="10" width="50" height="50" fill="blue" /> <rect x="10" y="10" width="50" height="50" fill="red" transform="translate(30, 20)" /> </svg>
主要なtransform関数の詳細解説
移動(translate)
図形をX軸、Y軸方向に移動します。
<svg width="200" height="200"> <!-- 元の図形 --> <circle cx="50" cy="50" r="20" fill="blue" /> <!-- X方向に30、Y方向に20移動 --> <circle cx="50" cy="50" r="20" fill="red" transform="translate(30, 20)" /> </svg>
回転(rotate)
指定した角度で図形を回転します。回転の中心点を指定することも可能です。
<svg width="200" height="200"> <!-- 元の図形 --> <rect x="40" y="40" width="40" height="20" fill="blue" /> <!-- 45度回転(中心点指定なし) --> <rect x="40" y="40" width="40" height="20" fill="red" transform="rotate(45)" /> <!-- 中心点(50,50)を基準に30度回転 --> <rect x="40" y="40" width="40" height="20" fill="green" transform="rotate(30, 50, 50)" /> </svg>
拡大縮小(scale)
図形のサイズを拡大または縮小します。
<svg width="200" height="200"> <!-- 元の図形 --> <rect x="20" y="20" width="30" height="30" fill="blue" /> <!-- X方向に1.5倍、Y方向に2倍に拡大 --> <rect x="20" y="20" width="30" height="30" fill="red" transform="scale(1.5, 2)" /> </svg>
傾斜(skew)
図形をX軸またはY軸方向に傾斜させます。
<svg width="200" height="200"> <!-- 元の図形 --> <rect x="20" y="20" width="40" height="40" fill="blue" /> <!-- X軸方向に30度傾斜 --> <rect x="20" y="20" width="40" height="40" fill="red" transform="skewX(30)" /> <!-- Y軸方向に15度傾斜 --> <rect x="80" y="20" width="40" height="40" fill="green" transform="skewY(15)" /> </svg>
複合transformの活用
複数の変換を組み合わせることで、より複雑な効果を実現できます。
<svg width="300" height="200"> <!-- 移動+回転+拡大の複合変換 --> <rect x="0" y="0" width="40" height="20" fill="blue" transform="translate(50, 30) rotate(45) scale(1.2)" /> </svg>
変換は右から左の順に適用されることに注意してください。上記の例では、まず拡大、次に回転、最後に移動が適用されます。
実践的な応用例
アニメーションとの連携
SVG transformはCSSアニメーションやSMILと組み合わせて使用できます。
<svg width="200" height="200"> <rect x="20" y="20" width="40" height="40" fill="blue"> <animateTransform attributeName="transform" type="rotate" from="0 40 40" to="360 40 40" dur="3s" repeatCount="indefinite" /> </rect> </svg>
レスポンシブデザインでの活用
<svg viewBox="0 0 100 100" width="100%" height="auto"> <g transform="scale(0.5) translate(25, 25)"> <circle cx="50" cy="50" r="40" fill="lightblue" /> <rect x="30" y="30" width="40" height="40" fill="red" transform="rotate(45 50 50)" /> </g> </svg>
よくある間違いと解決策
間違い1: 変換順序の誤解
<!-- 誤った順序 --> <rect transform="translate(50, 50) rotate(45)" /> <!-- 正しい順序(意図に応じて) --> <rect transform="rotate(45) translate(50, 50)" />
間違い2: 単位の混在
<!-- 誤り:単位の混在 --> <rect transform="translate(50px, 20)" /> <!-- 正解:単位なしで記述 --> <rect transform="translate(50, 20)" />
SVG transformでは座標値に単位(px, emなど)を付けないことが重要です。詳細はMDN Web DocsのSVG transform解説を参照してください。
パフォーマンス最適化のヒント
- ハードウェアアクセラレーションの活用: 複雑なtransformはCSSの
transformプロパティを使用 - 変換の最小化: 必要な変換のみを適用
- グループ化の活用: 関連する要素を
<g>タグでグループ化
W3C SVG Transform仕様では、より詳細な技術情報を確認できます。
よくある質問(FAQ)
Q: transform属性とCSS transformプロパティの違いは何ですか? A: SVGのtransform属性はSVG要素専用で、座標系に直接作用します。CSS transformはより広範な要素に適用でき、ハードウェアアクセラレーションの恩恵を受けやすいですが、SVGの座標系には影響しません。
Q: 複数のtransformを適用する順序は重要ですか? A: はい、非常に重要です。変換は適用順に実行されるため、順序によって結果が大きく異なります。
Q: transformのパフォーマンスへの影響は? A: 単純なtransformは軽量ですが、複雑な変換や多数の要素への適用はパフォーマンスに影響する可能性があります。最適化を心がけましょう。
まとめ
SVG transformは、図形の操作において非常に強力な機能です。基礎的な移動、回転、拡大縮小から、複合変換による高度な効果まで、適切に活用することで表現力豊かなグラフィックを作成できます。変換の順序や座標系の理解が重要であり、実践を通じて習熟していきましょう。