PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   
PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   

【CSS】SVGアニメーションの基礎.2

SVGアニメーションサンプル

See the Pen
Untitled
by ryotom (@ryotam-smoke)
on CodePen.

SVGを用いたアニメーションとスタイリングの例です。
以下に、このコードの解説をします。

HTML 部分

<svg> タグ

  1. <svg version="1.0" id="milmona" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 566.9 566.9" width="90%" height="90%" style="enable-background:new 0 0 566.9 566.9">

xmlns=”http://www.w3.org/2000/svg”: SVGの名前空間を指定。これがないとSVGが正しくレンダリングされません。
viewBox=”0 0 566.9 566.9″: ビューの領域を定義します。この設定でSVGのコンテンツがどのように表示されるかが決まります。
width=”90%” height=”90%”: SVGのサイズを設定しています。ここでは親要素に対して90%のサイズに設定されています。

<circle> タグ

  1. <circle class="milmona-circle1" cx="283.5" cy="284.2" r="138.1" />
  2. <circle class="milmona-circle2" cx="283.5" cy="284.2" r="138.1" />
  3. <circle class="milmona-circle3" cx="283.5" cy="284.2" r="138.1" />

cx, cy: 円の中心の座標。
r: 円の半径。

<path> タグ

  1. <path class="object" d="M333.4 270.4c-.8-2.4-1.2-5.1-2-7.8..."/>

d 属性: パスのデータを定義します。M は移動、c は相対的な曲線です。

<g> タグ

  1. <g class="st1">
  2.   <!-- 複数のパスが含まれています -->
  3. </g>

グループ要素で、内部の全ての要素に対してスタイルやアニメーションを適用できます。

<switch> タグ

  1. <switch>
  2.   <g class="milmona-group">
  3.     <!-- グループ要素が含まれています -->
  4.   </g>
  5. </switch>

<switch> タグは、異なる子要素を条件によって表示するために使いますが、ここでは単にグループをまとめています。

CSS 部分

SVG の基本スタイル

  1. svg {
  2.   position: absolute;
  3.   inset: 0;
  4.   margin: auto;
  5. }

osition: absolute;: SVGを親要素に対して絶対配置します。
inset: 0;: 上下左右のマージンを0にします。
margin: auto;: 中央に配置されるようにします。

アニメーションの基本設定

  1. .milmona-circle1, .milmona-circle2, .st1, .st2, .dashed-line, .fadein1, .fadein2 {
  2.   transition: 200ms all ease;
  3.   transform-origin: 50% 50%;
  4. }

transition: 要素の変化をスムーズにする設定です。200msで全てのプロパティが変更されます。
transform-origin: 変形の基準点を中心に設定します。

.milmona-circle1 のアニメーション

  1. .milmona-circle1 {
  2.   animation: circle1 0.2s linear 1s normal forwards;
  3. }
  4. @keyframes circle1 {
  5.   0% {
  6.     fill: transparent;
  7.     transform: scale(1);
  8.   }
  9.   100% {
  10.     fill: #516bce;
  11.     transform: scale(0.95);
  12.   }
  13. }

animation: アニメーションを適用。circle1 という名前のアニメーションが0.2秒間で実行され、1秒の遅延があります。
@keyframes circle1: アニメーションの設定で、fill の色と transform のスケールを変化させます。

.st1 の回転アニメーション

  1. .st1 {
  2.   stroke: #fff;
  3.   animation: rotate2 20s linear 1s infinite normal;
  4. }
  5. @keyframes rotate2 {
  6.   0% {
  7.     transform: rotate(0deg);
  8.   }
  9.   100% {
  10.     transform: rotate(360deg);
  11.   }
  12. }

animation: 20秒で360度回転し続けるアニメーションです。

.fadein1 のフェードインアニメーション

  1. .fadein1 {
  2.   animation: fadein1 200ms linear 1s;
  3. }
  4. @keyframes fadein1 {
  5.   0% {
  6.     transform: scale(1.3);
  7.     opacity: 0;
  8.   }
  9.   100% {
  10.     transform: scale(1);
  11.     opacity: 1;
  12.   }
  13. }

animation: 200msでフェードインし、スケールが1.3から1に変わります。

.fadein2 のフェードインアニメーション

  1. .fadein2 {
  2.   transform: scale(0);
  3.   stroke: #516bce;
  4.   fill: none;
  5.   stroke-width: 3;
  6.   stroke-linecap: round;
  7.   stroke-miterlimit: 10;
  8.   stroke-dasharray: 12.9653, 13.9626, 0, 12.9653, 13.9626, 0;
  9.   animation: fadein2 200ms linear 1s forwards;
  10. }
  11. @keyframes fadein2 {
  12.   0% {
  13.     opacity: 0;
  14.     transform: scale(0);
  15.   }
  16.   100% {
  17.     opacity: 1;
  18.     transform: scale(1);
  19.   }
  20. }

stroke-dasharray: ダッシュのパターンを定義します。
animation: フェードインとスケールの変化を200msで実行します。

MILMONA   MILMONA   MILMONA   MILMONA   MILMONA   
MILMONA   MILMONA   MILMONA   MILMONA   MILMONA