【@keyframes×infinite×rotate】永遠に回転し続けるCSSアニメーション3選【CSSの本気見せます】

今回はCSSだけで作る@keyframesを使用した回転し続けるアニメーションを3つご紹介します。

@keyframesのプロパティのanimation-durationやanimation-timing-function、animation-iteration-count: infinite;など5種類を使用して、初めての方でも理解できるように@keyframesをわかりやすく解説しています。

transform:rotateの回転エフェクトとinfiniteで永遠に回転し続けるCSSアニメーションを実現しました。

htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。

 

1. 【@keyframes&rotateZ】ボックスが同じ方向に回転し続けるCSSアニメーション

動きは下の画像のような感じになります

コードを見る
<div class="container">
  <div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    border-width: 100px;
    transform:rotate(0deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  12.5% {
    border-width: 75px;
    transform:rotate(90deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  25% {
    border-width: 50px;
    transform:rotate(180deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  37.5% {
    border-width: 25px;
    transform:rotate(270deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  50% {
    border-width: 0px;
    transform:rotate(360deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  62.5% {
    border-width: 25px;
    transform:rotate(450deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  75% {
    border-width: 50px;
    transform:rotate(540deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  87.5% {
    border-width: 75px;
    transform:rotate(630deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  100% {
    border-width: 100px;
    transform:rotate(720deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
}
.container {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.background1 {
  width: 205px;
  height: 205px;
  margin:100px;
  animation-duration: 5s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: normal;
  /* アニメーションの再生方向を指定。normalでアニメーションが同じ方向に繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
}
.background1 {
  border: 0 solid blue;
  box-sizing: border-box;
  animation-name: Background1
  /* keyframesで記述したアニメーションの名前を指定 */
}
ここがポイント!
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:rotateZを720°まで9分割して回転角度を各時点で変えることで滑らかな回転アニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  3. animation-durationでアニメーションにかかる時間を指定
  4. animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
  5. animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
  6. animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
  7. animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
  8. display:flexでcontainerの中身をど真ん中に設置

 

2. 【@keyframes&rotateZ&border-radius】ボックスが円形に変形&回転し続けるCSSアニメーション

動きは下の画像のような感じになります

コードを見る
<div class="container">
  <div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    border-width: 100px;
    transform:rotate(0deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  12.5% {
    border-width: 75px;
    transform:rotate(90deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  25% {
    border-width: 50px;
    transform:rotate(180deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  37.5% {
    border-width: 25px;
    transform:rotate(270deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  50% {
    border-width: 0px;
    border-radius:100px;
    /* 50%時点でborder-radiusによって円形にすることで徐々に円形に変化するアニメーションを実現 */
    transform:rotate(360deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  62.5% {
    border-width: 25px;
    transform:rotate(450deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  75% {
    border-width: 50px;
    transform:rotate(540deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  87.5% {
    border-width: 75px;
    transform:rotate(630deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
  100% {
    border-width: 100px;
    transform:rotate(720deg);
    /* rotateZでZ軸(平面)の回転角度を指定 */
  }
}
.container {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.background1 {
  width: 205px;
  height: 205px;
  margin:100px;
  animation-duration: 5s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: normal;
  /* アニメーションの再生方向を指定。normalでアニメーションが同じ方向に繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
}
.background1 {
  border: 0 solid blue;
  box-sizing: border-box;
  animation-name: Background1
  /* keyframesで記述したアニメーションの名前を指定 */
}
ここがポイント!
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:rotateZを720°まで9分割して回転角度を各時点で変えることで滑らかな回転アニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  3. 50%時点でborder-radius:100px;によって円形にすることで徐々に円形に変化するアニメーションを実現
  4. animation-durationでアニメーションにかかる時間を指定
  5. animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
  6. animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
  7. animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
  8. animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
  9. display:flexでcontainerの中身をど真ん中に設置

 

3. 【@keyframes&rotate3d】ボックスが立体的に回転し続けるCSSアニメーション

動きは下の画像のような感じになります

コードを見る
<div class="container">
  <div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    border-width: 100px;
    transform: rotate3d(1,1,1,0deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  12.5% {
    border-width: 75px;
    transform: rotate3d(1,1,1,90deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  25% {
    border-width: 50px;
    transform: rotate3d(1,1,1,180deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  37.5% {
    border-width: 25px;
    transform: rotate3d(1,1,1,270deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  50% {
    border-width: 0px;
    transform: rotate3d(1,1,1,360deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  62.5% {
    border-width: 25px;
    transform: rotate3d(1,1,1,450deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  75% {
    border-width: 50px;
    transform: rotate3d(1,1,1,540deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  87.5% {
    border-width: 75px;
    transform: rotate3d(1,1,1,630deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
  100% {
    border-width: 100px;
    transform: rotate3d(1,1,1,720deg);
    /* rotate3dでXYZ軸(立体)の回転角度を指定 */
  }
}
.container {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.background1 {
  width: 205px;
  height: 205px;
  margin:100px;
  animation-duration: 5s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: normal;
  /* アニメーションの再生方向を指定。normalでアニメーションが同じ方向に繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
}
.background1 {
  border: 0 solid blue;
  box-sizing: border-box;
  animation-name: Background1
  /* keyframesで記述したアニメーションの名前を指定 */
}
ここがポイント!
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:rotate3dを最大720°まで9分割して回転角度を各時点で変えることで滑らかな立体的な回転アニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  3. animation-durationでアニメーションにかかる時間を指定
  4. animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
  5. animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
  6. animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
  7. animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
  8. @keyframesを複数用意して複数のアニメーションが相互に異なる動きをすることを実現
  9. display:flexでcontainerの中身をど真ん中に設置

【初心者向け】失敗しないプログラミングTIPS

そもそもWebデザインの基礎がわからない。。
そんなあなたには『Udemy』

ふたご


でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
そんなあなたにはProEngineer

ふたご

完全無料で一人前のエンジニアになれるプログラミングスクール【ProEngineer】
  1. プログラミング学習&サポートが無料!
  2. 誰もが知っている超優良企業への就職サポート付き!
  3. 学習言語:Java、PHP、HTML、CSSなど

 

   話だけ聞いてみる