1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

とりあえずSVGアニメーションをやってみたい人へのススメ

1
Last updated at Posted at 2021-03-16

SVG とは

  • 拡大しても見た目を損なわないベクター形式の画像です。
  • jpg や png などはビットマップ形式をとっているため、拡大すると境界がギザギザで荒く見えてしまいます。
  • SVG は画像データをパスとして持っているので、数値を変えるだけで形を変えられ、また CSS を使用することで画像の形に沿って線を描画したり色を変えることができます。
  • ただし写真などの色数の多い画像や複雑な構成の画像には不向きなため、ロゴのようなシンプルな構成の画像に向いています。

使い方

基本的なコード

<svg
  version="1.1"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  width="50px"
  height="50px"
  viewBox="0 0 50 50"
>
  <path d="..." />
</svg>

必須な属性

  • xmlns="http://www.w3.org/2000/svg":SVG 名前空間宣言
  • xmlns:xlink="http://www.w3.org/1999/xlink":XLink 名前空間宣言
  • version="1.1":最新版を指定
  • width,height:キャンバスサイズ
  • viewBox:描画エリアサイズ

CSS

svg {
  width: 100px;
  height: 100px;
  stroke: green;
  stroke-width: 1;
  stroke-dasharray: 100;

  animation: animation-svg 3s ease-out forwards;
}

@keyframes animation-svg {
  0% {
    fill: #fff;
    stroke-dashoffset: 100;
  }

  90% {
    fill: #fff;
    stroke-dashoffset: 0;
  }

  100% {
    fill: green;
  }
}

簡単な解説

  • CSS で徐々に線が描かれるようなアニメーションをやりたい場合は基本的には HTML にインラインで記述する必要があります。

HTML について

  • 色々試してみた結果、イラストレーターで作成するにしてもGoogle Fonts/iconなど既存のものを落としてくるにしてもviewBox属性だけは生成されたものをそのままいじらない方が扱いやすいです。(画像のサイズが設定されているため)
  • widthheightに関しては CSS で管理する場合、なくてもよさそうです。
    • svgタグにデフォルト値としてwidthheightを設定しておくことで、万が一 css によるスタイルが反映されていない場合にレイアウト崩れを最小限に抑えられます。(生成したときのままで OK)

CSS について

  • 流れとしては線描画から始まって最後に塗りつぶしを行っています。
  • widthheightは適当な数値を入れています。
  • stroke-widthで線の太さを指定していますが、画像の大きさやviewBoxなどによって見え方が変わって来ます。
    • 例えば小さいサイズの画像の場合はwidthheightで大きく表示したときにstroke-widthで小さい数値を指定しても通常よりも太く見えてしまいます。(より小さな値を指定する必要があります)
  • strokeプロパティで色を指定しています。
  • stroke-dasharryで描画する線の間隔を指定、stroke-dashoffsetで線の始まりの位置を指定しています。
    • 上記プロパティの値を同じにすることで徐々に線描画されるように見えます。
    • 指定する数値に関しては実際にプレビューしながら指定するといいかと

最後に

  • とりあえず SVG アニメーションをやってみたいということでやってみました。
  • 今まで SVG を扱ってこなかった、初めて触るけどとにかくアニメーション SVG をやってみたいという人のために役に立てばいいなと思います。
  • 逆に間違ってるよってことでしたら教えていただけるとありがたいです。

参考サイト

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?