営業ナシでWeb制作案件が舞い込んでくる”新世代”戦略 ▶︎

【@keyframes×infinite×scale】拡大縮小を繰り返すCSSアニメーション3選

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

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

transform:scaleの拡大縮小エフェクトとinfiniteで永遠に拡大縮小を繰り返すCSSアニメーションを実現しました。

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

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



1. 【@keyframes&scale】滑らかに拡大しながら迫ってくるCSSアニメーション

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

コードを見る
<div class="container">
  <div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    border-width: 100px;
    transform: scale(0);
    /* scaleで伸縮率を指定 */
  }
  25% {
    border-width: 75px;
    transform: scale(.5);
    /* scaleで伸縮率を指定 */
  }
  50% {
    border-width: 50px;
    transform: scale(1);
    /* scaleで伸縮率を指定 */
  }
  75% {
    border-width: 25px;
    transform: scale(1.5);
    /* scaleで伸縮率を指定 */
  }
  100% {
    border-width: 0px;
    transform: scale(2);
    /* scaleで伸縮率を指定 */
  }
}
.container {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.background1 {
  width: 205px;
  height: 205px;
  margin:150px;
  animation-duration: 3s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: alternate;
  /* アニメーションの再生方向を指定。alternateでアニメーションが行ったり来たりを繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
}
.background1 {
  border: 0 solid blue;
  box-sizing: border-box;
  animation-name: Background1
  /* keyframesで記述したアニメーションの名前を指定 */
}
POINT
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:scaleを実行して伸縮率を各時点で変えることで滑らかに拡大縮小するアニメーションを実現(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&scale】拡大縮小を繰り返しながら拡大していくCSSアニメーション

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

コードを見る
<div class="container">
  <div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    border-width: 100px;
    transform: scale(0);
    /* scaleで伸縮率を指定 */
  }
  12.5% {
    border-width: 75px;
    transform: scale(.5);
    /* scaleで伸縮率を指定 */
  }
  25% {
    border-width: 50px;
    transform: scale(.25);
    /* scaleで伸縮率を指定 */
  }
  37.5% {
    border-width: 25px;
    transform: scale(.75);
    /* scaleで伸縮率を指定 */
  }
  50% {
    border-width: 0px;
    transform: scale(.5);
    /* scaleで伸縮率を指定 */
  }
  62.5% {
    border-width: 25px;
    transform: scale(1.0);
    /* scaleで伸縮率を指定 */
  }
  75% {
    border-width: 50px;
    transform: scale(.75);
    /* scaleで伸縮率を指定 */
  }
  87.5% {
    border-width: 75px;
    transform: scale(1.25);
    /* scaleで伸縮率を指定 */
  }
  100% {
    border-width: 100px;
    transform: scale(1.0);
    /* scaleで伸縮率を指定 */
  }
}
.container {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.background1 {
  width: 205px;
  height: 205px;
  margin:150px;
  animation-duration: 5s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: alternate;
  /* アニメーションの再生方向を指定。alternateでアニメーションが行ったり来たりを繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
}
.background1 {
  border: 0 solid blue;
  box-sizing: border-box;
  animation-name: Background1
  /* keyframesで記述したアニメーションの名前を指定 */
}
POINT
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:scaleを実行して伸縮率を各時点で変えることで拡大縮小を繰り返しながら拡大していくアニメーションを実現(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の中身をど真ん中に設置



3. 【@keyframes&rotate3d&scaleXY】縦横に伸縮しながら立体的に回転するCSSアニメーション

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

コードを見る
<div class="container">
  <div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
  0% {
    border-width: 100px;
    transform: rotate3d(1,1,1,0deg) scale(0,0);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  12.5% {
    border-width: 75px;
    transform: rotate3d(1,1,1,90deg) scale(0,0.4);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  25% {
    border-width: 50px;
    transform: rotate3d(1,1,1,180deg) scale(0.6,0.1);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  37.5% {
    border-width: 25px;
    transform: rotate3d(1,1,1,270deg) scale(0.3,0.8);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  50% {
    border-width: 0px;
    transform: rotate3d(1,1,1,360deg) scale(1.0,0.5);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  62.5% {
    border-width: 25px;
    transform: rotate3d(1,1,1,450deg) scale(0.7,1.2);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  75% {
    border-width: 50px;
    transform: rotate3d(1,1,1,540deg) scale(1.4,0.9);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  87.5% {
    border-width: 75px;
    transform: rotate3d(1,1,1,630deg) scale(1.1,1.6);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
  100% {
    border-width: 100px;
    transform: rotate3d(1,1,1,720deg) scale(1.8,1.8);
    /* rotate3dでXYZ軸(立体)の回転角度、scaleで伸縮率を指定 */
  }
}
.container {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.background1 {
  width: 205px;
  height: 205px;
  margin:150px;
  animation-duration: 5s;
  /* アニメーションにかかる時間を指定 */
  animation-timing-function: linear;
  /* アニメーションの進行の度合いを指定。linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定 */
  animation-direction: alternate;
  /* アニメーションの再生方向を指定。alternateでアニメーションが行ったり来たりを繰り返す */
  animation-iteration-count: infinite;
  /* アニメーションの繰り返し回数をinfiniteで無限に指定 */
}
.background1 {
  border: 0 solid blue;
  box-sizing: border-box;
  animation-name: Background1
  /* keyframesで記述したアニメーションの名前を指定 */
}
POINT
  1. @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
  2. @keyframesでtransform:rotate3dを最大720°まで9分割して回転角度を各時点で変え、scaleXYでXYの伸縮率を各時点で変えることで縦横に交互に伸縮しながら立体的に回転するアニメーションを実現(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の中身をど真ん中に設置


まとめ

HTMLとCSSを使うと今回紹介したようなことも簡単にできてしまうんです。

 

『CSSアニメーションやエフェクトだけではなくWebサイトをゼロから作って稼いでいきたい』

『3ヶ月くらいで最低でも月10万円は稼ぎたい』

『営業とかやったことないけどWeb制作だけで稼いでいきたい』

 

こんな方のためにWeb制作で月80万超稼ぐ筆者が自身の経験を踏まえて【失敗しない】Webデザイナー(Web制作)独学ロードマップを執筆しました。

 

少額の投資で3ヶ月後には月10〜30万稼げるよう設計してあります。
(学習教材やAdobeなど最低限のコストはかかります)

 

ロードマップの構成
  1. Web制作に特化した『確実に身に付く』学習方法
  2. Web制作会社が喰いつく理想的なポートフォリオの作成手順
  3. 返信率10%以上!Web制作会社へのメール営業

 

有料公開も考えましたが「Webデザイナー(Web制作)はまだまだ稼げることを証明したい!」という思いが強く、期間限定で無料公開をすることにしました。

 

2021年半ばまでは無料公開する予定ではありますが前倒しすることもあり得ますのでご興味ある方はお早めにどうぞ!