SVGアニメーション:コード付きの20のライブ例

SVGアニメーションの例

SVGアニメーション:CSSとSMILの20のライブ例、Lottieとの比較 | We.Inc

線の描画、ローダー、アイコンの切り替え、伸びるグラフの棒、パスのモーフィングなど、コピーできるコード付きの20のSVGアニメーション。CSS、SMIL、GSAPの比較、SVGとLottieの比較も掲載しています。

SVGアニメーションは、CSS、SMIL、JavaScriptでベクター図形を動かしたり描き直したりする技術です。CSSのキーフレームは、transform、opacity、そしてstroke-dasharrayとstroke-dashoffsetを使った線の描画テクニックを扱えます。<animate>のようなSMILのタグを使えば、スクリプトなしでパスのモーフィングやモーションパスに沿った移動ができます。GSAPなどのライブラリは、タイムラインやスクロール連動の制御を追加します。デザイナーがAfter Effectsで作ったアニメーションにはLottieが適しています。

効果ごとのテクニック

このページのアニメーションはすべて、横にあるコードからスクリプトを無効にしたフレーム内でライブ再生されています。つまり、コピーしたものはJavaScriptなしでそのまま動きます。また、システムで視差効果を減らす設定をしている訪問者に対しては、どれも停止します。上部の線描画ビルダーは、貼り付けた任意のパスに線の描画テクニックのコードを生成します。

よくある質問

SVGの線描画エフェクトはどういう仕組み?

stroke-dasharrayで線にパスと同じ長さの破線を設定し、同じ値のstroke-dashoffsetで見えない位置に押し出してから、オフセットを0までアニメーションさせます。破線が所定の位置にスライドし、線が自分で描かれていくように見えます。pathLength="1"を使えば両方の値を1にできます。

SMILは非推奨ですか?

いいえ。Chromeは2015年に非推奨化の計画を発表しましたが、その後計画を中止しました。animate、animateTransform、animateMotionなどのSMIL要素は現在の主要ブラウザーすべてで動作し、SVG仕様の一部です。

CSSでSVGパスをモーフィングできますか?

一部はできます。CSSのdプロパティはpath()の値を受け付け、ChromiumブラウザーとFirefoxではアニメーションできますが、執筆時点ではSafariが対応していないため、caniuseで確認してください。両方のパスでコマンドの数と種類が同じである必要があります。d属性に対するSMILのanimateのほうが幅広く動作します。

LottieとSVGのどちらを使うべき?

アイコン、ローダー、コードで表現できるシンプルなイラストには、素のSVGとCSSを使いましょう。モーションデザイナーがAfter Effectsで複雑なキャラクターやシーンを作り、それを忠実に再生したい場合はLottieを使います。Lottieにはプレーヤーライブラリが必要ですが、素のSVGには不要です。

SVGアニメーションで視差効果を減らす設定に対応するには?

CSSアニメーションをprefers-reduced-motionのメディアクエリで囲むか、その中でアニメーションをオフにします。CSSではSMILを一時停止できないため、そのメディアクエリ内で静止版のグラフィックを表示するか、スクリプトからsvg要素のpauseAnimations()を呼び出します。

パフォーマンス

SVGかLottieか

20のライブSVGアニメーション

20個すべてがJavaScriptなしで動作し、視差効果を減らす設定用のルールを含んでいます。どれもその場で編集できます。

線の描画:チェックマーク

pathLength=1を使った定番の線のテクニックで、破線の値が実際の長さに左右されません。

線の描画:手書きのストローク

長いパスをlinearのイージングでゆっくり描くと、ペンが動いているように見えます。

ローダー:回転する円弧

一部だけ破線にした円が回転します。transform-boxで回転の中心を保ちます。

ローダー:3つのドット

animation-delayの値をずらすことで、1組のキーフレームが波のような動きになります。

パルスリング

拡大とフェードを同時に行い、レーダーやライブ表示のインジケーターにします。

イコライザーの棒

各棒がそれぞれ異なる長さの時間で、底辺を基点にY軸方向へ拡大縮小します。

伸びるグラフの棒

棒は読み込み時に1回だけ伸びます。forwardsで最終状態を保ち、視差効果を減らす設定では完成したグラフをそのまま表示します。

ドーナツ型の進捗表示

円に同じ破線のアイデアを使います。-90度回転させると上から始まります。

アイコンの切り替え:メニューから閉じるへ

ボタンにホバーまたはフォーカスしてください。各線がtransitionで移動と回転をし、キーフレームは不要です。

心拍

素早い2回の拡大の後に休止が入り、すべてが1つのキーフレームリストに収まっています。

CSSのdプロパティでモーフィング

ChromiumとFirefoxで動作します。dに対応していない環境では図形は正方形のままです。両方のパスで同じコマンドを同じ順序で使っています。

SMILのanimateでモーフィング

SMILはd属性そのものを変更するため、CSSのdプロパティより幅広く対応しています。視差効果を減らす設定では静止版が表示されます。

animateMotionでパスに沿って移動

rotate=autoにより、図形が進行方向を向くように回転します。

animateTransformで回転する歯車

rotateの値では、2つ目と3つ目の数値で回転の中心点を指定します。

変化するグラデーション

SMILでグラデーションのストップカラーをアニメーションさせます。stop-colorに対するCSSのキーフレームでも同じことができます。

終わりのない波

表示領域の2倍の幅のパスがちょうど1周期分だけ左にスライドするため、ループに継ぎ目ができません。

ホバーで揺れる通知ベル

ベルの上部を基点にした回転で、ホバーまたはキーボードのフォーカスで発動します。

マーチングアンツの選択範囲

破線のストロークのオフセットをアニメーションさせた、画像編集ソフトの選択範囲のような見た目です。

コネクターに沿って流れるデータ

曲線上の短い破線が絶えず動き、方向を示します。

つぶれながら弾むボール

着地時につぶれることで重さが伝わります。transform-originを下端にすると、つぶれている間もボールが床に接したままになります。

CSS、SMIL、JavaScript(GSAP)の比較

SVGをアニメーションさせる3つの方法

同じ線の描画と棒グラフをGSAPで

デモのフレームではスクリプトが無効なので、コードのみです。GSAPは独自のライセンス(MITではありません)の下で無料で使えるため、公開前に利用規約を読んでください。

線描画ビルダー

星

波

家

もう一度再生

お使いのシステムで視差効果を減らす設定がされているため、完成した図を表示しています。「もう一度再生」を押すと1回だけ再生します。

パスデータ(d属性)

再生時間:{n}s

線の太さ:{n}

イージング

色

SVGとCSS

コードをコピー

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る