【@keyframes×translate】box-shadowが効いた3D画像が移動を繰り返すCSSアニメーション3選

今回はCSSだけで作る@keyframesを使用してtransform:translate3dでXYZ軸を移動するアニメーションを3つご紹介します。

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

transform:translate3dの移動エフェクト、box-shadowで動く影とinfiniteで永遠に3D画像が移動を繰り返すCSSアニメーションを実現しました。

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

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

 

1. 【@keyframes&translate3d&box-shadow】影付きの3D画像が立体的に回転移動するCSSアニメーション

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

コードを見る
<div class="container">
  <div class="image">
    <img src="https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80" style="background-size:cover;" class="img" alt="">
  </div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    transform: translate3d(-120px, 0px, 30px);
    /* translate3dでXYZの移動距離を指定 */
    box-shadow: -30px 30px 15px 5px rgba(0,0,0,0.4);
    /* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
  }
  100% {
    transform: translate3d(-120px, 100px, 30px);
    /* translate3dでXYZの移動距離を指定 */
    box-shadow: -5px 5px 3px 3px rgba(0,0,0,0.4);
    /* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
  }
}
* {
  padding: 0;
  margin: 0;
}
.container {
  width: 100%;
  min-height: 100vh;
}
.image {
  perspective: 3000px;
  /* 3D変形の奥行きの指定 */
  width: 70%;
  position: absolute;
  transform: translate(18%, 25%);
  /* 画像の位置調整 */
}
.image img {
  width: 40%;
  /* 画像の大きさ調整 */
  animation-duration: 3s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: alternate;
  /* アニメーションの再生方向を指定。alternateでアニメーションが行ったり来たりを繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
  box-sizing: border-box;
  animation-name: Background1
  /* 実行したいアニメーションの名前を指定 */
}
POINT
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:translate3dでXYZの移動距離を各時点で指定することで立体的に移動するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  3. @keyframesでbox-shadowを各時点で指定することで画像の影が太陽の動きで変化するような動きを実現
  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の中身をど真ん中に設置

 

2. 【@keyframes&translate3d&rotateXZ&box-shadow】影付きの3D画像が立体的に回転移動するCSSアニメーション

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

コードを見る
<div class="container">
  <div class="image">
    <img src="https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80" style="background-size:cover;" class="img" alt="">
  </div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    transform: rotateX(0deg) rotateZ(0deg) translate3d(-120px, 0px, 30px);
    /* XZ軸の回転角度とtranslate3dでXYZの移動距離を指定 */
    box-shadow: -30px 30px 15px 5px rgba(0,0,0,0.4);
    /* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
  }
  100% {
    transform: rotateX(50deg) rotateZ(-30deg) translate3d(-120px, 100px, 30px);
    /* XZ軸の回転角度とtranslate3dでXYZの移動距離を指定 */
    box-shadow: -10px 10px 5px 5px rgba(0,0,0,0.4);
    /* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
  }
}
* {
  padding: 0;
  margin: 0;
}
.container {
  width: 100%;
  min-height: 100vh;
}
.image {
  perspective: 3000px;
  /* 3D変形の奥行きの指定 */
  width: 70%;
  position: absolute;
  transform: translate(18%, 25%);
  /* 画像の位置調整 */
}
.image img {
  width: 40%;
  /* 画像の大きさ調整 */
  animation-duration: 3s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: alternate;
  /* アニメーションの再生方向を指定。alternateでアニメーションが行ったり来たりを繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
  box-sizing: border-box;
  animation-name: Background1
  /* 実行したいアニメーションの名前を指定 */
}
POINT
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:translate3dでXYZの移動距離、rotateでXZ軸の回転角度を各時点で指定することで3D画像が立体的に移動するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  3. @keyframesでbox-shadowを各時点で指定することで画像の影が太陽の動きで変化するような動きを実現
  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&translate3d&rotateXZ&scale&box-shadow】影付きの3D画像が拡大しながら立体的に回転移動するCSSアニメーション

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

コードを見る
<div class="container">
  <div class="image">
    <img src="https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80" style="background-size:cover;" class="img" alt="">
  </div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    transform: scale(0) rotateX(0deg) rotateZ(-360deg) translate3d(0px, 0px, 0px);
    /* 伸縮率とXZ軸の回転角度、translate3dでXYZの移動距離を指定 */
    box-shadow: -5px 5px 3px 5px rgba(0,0,0,0);
    /* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
  }
  100% {
    transform: scale(1) rotateX(50deg) rotateZ(0deg) translate3d(-320px, 200px, 100px);
    /* 伸縮率とXZ軸の回転角度、translate3dでXYZの移動距離を指定 */
    box-shadow: -50px 50px 30px 15px rgba(0,0,0,0.4);
    /* ボックスに影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、広がりの長さ、色) */
  }
}
* {
  padding: 0;
  margin: 0;
}
.container {
  width: 100%;
  min-height: 100vh;
}
.image {
  perspective: 3000px;
  /* 3D変形の奥行きの指定 */
  width: 70%;
  position: absolute;
  transform: translate(18%, 25%);
  /* 画像の位置調整 */
}
.image img {
  width: 40%;
  /* 画像の大きさ調整 */
  animation-duration: 4s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: alternate;
  /* アニメーションの再生方向を指定。alternateでアニメーションが行ったり来たりを繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
  box-sizing: border-box;
  animation-name: Background1
  /* 実行したいアニメーションの名前を指定 */
}
POINT
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:translate3dでXYZの移動距離、rotateでXZ軸の回転角度、scaleで拡大縮小を各時点で指定することで3D画像が立体的に拡大しながら回転移動するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  3. @keyframesでbox-shadowを各時点で指定することで画像の影が太陽の動きで変化するような動きを実現
  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の中身をど真ん中に設置

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

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

ふたご


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

ふたご

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

 

   話だけ聞いてみる