線が描かれるように引かれる SVG・図形の動き

通称:線画アニメーションLine Drawing Animation

ロゴやイラストの線が、ペンで引いていくように端から順に描かれます。SVG の線の「破線の位置」を動かして描く、いちばん基本の SVG の動きです。

自分のサイトの中身で、この形を作らせる指示文です。最初の「サイトの情報」を書き換えてから渡します。今あるページを直させるときは、その HTML を貼ります。

この形で作る
# 動かすもの(ここを書き換える)
- 動かす要素:〈例:各セクションの見出しとカード、商品の写真〉
- 今あるページ:〈今のページに付けるなら、その HTML と CSS を貼る。新しく作るなら空ける〉

# 動きの呼び名
一般に「線画アニメーション」(Line Drawing Animation)と呼ばれる動きです。

# 作ってほしい動き
Line Drawing Animation(線が描かれるように引かれる)。SVG のイラストの線が、画面に入ったとき、ペンで引くように端から順に描かれる。

# 動き
- きっかけ:イラストが画面に 40% 入ったとき。1回だけ
- 描き方:線ごとに pathLength="1" を付け、stroke-dasharray: 1 1、stroke-dashoffset: 1(隠れた状態)から 0 まで動かす
- 時間:1本 1.4秒。速さの変わり方は cubic-bezier(0.65, 0, 0.35, 1)(出だしと終わりをゆっくり)
- 順番:線ごとに 0.25秒ずつずらして始める(style="--i: 0" のように番号を付け、animation-delay: calc(var(--i) × 0.25秒))
- 描く前の線は visibility: hidden にしておき、動きの始まりで visible にする(線の端の丸い点が先に見えないように)

# 付ける場所
- 「私たちについて」の横のイラスト

# 守ってほしいこと
- 線は fill: none、stroke は太さ 3px、端と角は round。色は currentColor にして、文字色から変えられるようにする
- 隠す指定は、JavaScript が html に付ける class(ld-ready)の下に書く。JavaScript が動かない環境では描き終わった絵が見える
- stroke-dashoffset は transform・opacity の外で、動く間は描き直しが走る。1つの絵の線は10本くらいまで、同時に動かす絵は1つまでにする
- 絵は svg に role="img" と aria-labelを付ける。飾りだけなら aria-hidden="true"
- 動きを控える設定では、描き終わった絵を最初から見せる

# 軽さと配慮(どの動きでも守る)
- 動かすのは transform と opacity だけにする(top・left・width・height・margin は動かさない)
- 動きを控える設定(prefers-reduced-motion: reduce)のときは動かさず、最後の状態で表示する
- 画面に入ったかは IntersectionObserver で見る。scroll イベントで毎回位置を測らない
- JavaScript が動かない環境でも中身が見えるようにする(最初に隠す指定は、JavaScript が付ける class の下に書く)
- will-change を付けるなら動いている間だけにする

# 出力
- 足す CSS と JavaScript を分けて出す。ライブラリは使わない
- 時間・距離・速さの変わり方は CSS 変数にまとめ、あとから変えやすくする
- 今あるページを渡したときは、HTML に足す class や属性だけを書き、ほかの見た目は変えない

線が描かれる・文字が書かれる・道すじを進む・形が変わる・グラフが伸びる・波が揺れるなど、SVGと図形の動きを10種類の型に分け、AIへの指示文・試せる見本・コードを載せています。見本の下で時間や速さを変えると、指示文とコードも同じものに変わります。

SVG・図形の動きはどの型を選ぶか

SVG の動きは、線を描くもの・形が動くもの・数字を見せるもの・背景や区切りの4つに分かれます。線を描く型と数字を見せる型は、画面に入ったときに1回だけ動かします。背景や区切りの型は動き続けるので、止める手段を付け、1ページに1か所までにします。

こんなとき 向いている動き 形の型(UIパターン集)
ロゴやイラストを、ペンで描くように見せたい線が描かれるように引かれる(線画アニメーション)—
代表のあいさつの結びに、サインを書き入れたい手書きの文字が書き順どおりに書かれる(手書きアニメーション)著者・監修者ボックス
フォームを送ったことを、はっきり伝えたい円が描かれ、中にチェックが引かれる(チェックマークアニメーション)フォーム(送信完了)
配送の経路や手続きの流れを、「どこからどこへ」で見せたい決めた道すじに沿って進む(パスアニメーション)フロー
再生⇄一時停止のように、押すたびにアイコンの意味が変わるアイコンが別の形に変わる(モーフィング)—
ファーストビューに、雑誌のような目印のバッジを置きたい円に沿って並んだ文字がゆっくり回る(サークルテキスト)—
図形でできたロゴを、部品から組み上がるように見せたい丸・三角・四角が順に組み上がる(ジオメトリックアニメーション)—
実績やアンケートの数字を、グラフで見せたい棒グラフが伸び、円グラフが埋まる(グラフアニメーション)。数字そのものは数字が数え上がる—
写真の少ないセクションに、やわらかい印象を少しだけ足したい不定形の図形がゆっくり形を変え続ける(ブロブアニメーション)—
セクションの境目を、まっすぐな線より柔らかく見せたいセクションの境目の波がゆっくり揺れる(ウェーブアニメーション)—

ハンバーガーメニューの3本線が×に変わる動きは、形を変えずに線を回すだけで作れるので、部品の動きのハンバーガーメニューアニメーションにまとめています。

どの型でも守ること

  1. 描く前を隠す指定は、JavaScript が付ける class の下に書く。JavaScript が動かない環境でも、描き終わった線・組み上がった絵・伸びきったグラフが見えるようにします。
  2. 線は pathLength="1" で描く。stroke-dasharray: 1 1 と stroke-dashoffset: 1 → 0 だけで、どの長さの線も同じ書き方で描けます。描く前は visibility: hidden にして、端の丸い点が先に見えないようにします。
  3. 線や形(d)を動かす型は、数を絞る。stroke-dashoffset や d の動きは描き直しが走ります。1つの絵の線は10本くらいまで、同時に動かす絵は1つまでにし、動き続けるものは transform だけで作ります。
  4. 意味のある図は文言でも伝える。図の svg には role="img" と aria-label、グラフには同じ数値の表、送信完了には見出しの文言を付けます。飾りだけの図形は aria-hidden="true" にします。
  5. 動き続けるものは止められるようにする。サークルテキスト・ブロブ・ウェーブには止めるボタンを付け、画面の外では止め、動きを控える設定では止まった絵にします。どれも1ページに1か所までです。

よくある質問 (FAQ)

path に pathLength="1" を付ければ、測らずに作れます。pathLength は「この線の長さを 1 とみなす」という指定で、stroke-dasharray: 1 1 と stroke-dashoffset: 1 から 0 への動きだけで、長い線も短い線も端から端まで描けます。手書きの文字のように、画の長さに合わせて時間を配りたいときだけ、JavaScript の getTotalLength() で本当の長さを測ります。

まず、SVG と CSS で足りないかを考えます。Lottie は After Effects で作った動きを JSON に書き出し、lottie-web などの読み込み用のライブラリで再生するしくみです。AI に頼むときは、書き出した JSON のファイル、置く場所と大きさ、再生のきっかけ(画面に入ったとき・押したときなど)、くり返すかどうか、動きを控える設定のときに見せる止まった絵、を伝えます。線を描く・形が組み上がる・チェックが引かれるくらいの動きなら、このページの型のほうが軽く、ライブラリも要りません。

1ページに1か所までにします。不定形の図形や波は、入れすぎると意味のない飾りに見え、かえって安っぽくなります。見本は、図形は1つ、色は落ち着いた1色、波は2本、揺れは小さく周期は長く、という控えめな形にしています。グラデーション・ぼかし・光る効果を重ねると、どこかで見たようなページになりがちです。

描き方の決まりと、描く前の隠し方です。「ロゴを描いて」だけだと、線の長さを目分量で決めて描き終わらない作りや、JavaScript が動かないと何も見えない作りになりがちです。ここの指示文は、pathLength の使い方、描く前を隠す class、時間と順番の数字、動きを控える設定で見せる状態を書き、Line Drawing Animation のような英語の一般名も添えています。