今回はCSSだけで作る@keyframesを使用したアニメーションを3つご紹介します。
@keyframesのプロパティのanimation-durationやanimation-timing-functionなど5種類を使用して、初めての方でも理解できるように@keyframesをわかりやすく解説しています。htmlとcssだけしか使っていません。
この記事の信頼性(筆者はこんな人)
- 現役Webデザイナーが執筆
- 継続して月収80万円超のフリーランス
- 完全未経験から独学でWeb制作スキルを習得
- Twitterフォロワー数1,700人超(→@twinzvlog_yk)
- Web制作の無料メンター経験多数
- 認定ランサー(ランサーズ最高ランク)
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
1. 【@keyframes&border-width】複数の円形要素が伸縮するCSSアニメーション
動きは下の画像のような感じになります
コードを見る
<div class="container">
<div class="background1"></div>
<div class="background2"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
0% {
border-width: 150px;
}
50% {
border-width: 75px;
}
100% {
border-width: 0px;
}
}
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background2 {
0% {
border-width: 0px;
}
50% {
border-width: 75px;
}
100% {
border-width: 150px;
}
}
.container {
/* flexboxでcontainerの中身をど真ん中に設置 */
display: flex;
justify-content: center;
align-items: center;
}
.background1, .background2 {
width: 205px;
height: 205px;
border-radius:200px;
/* ボックスに丸みをつける */
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で記述したアニメーションの名前を指定 */
}
.background2 {
border: 0 solid pink;
box-sizing: border-box;
animation-name: Background2
/* keyframesで記述したアニメーションの名前を指定 */
}
ここがポイント!
- @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
- @keyframesでborder-widthを0%, 50%, 100%の時で値を変えることでアニメーションを実現
- animation-durationでアニメーションにかかる時間を指定
- animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
- animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
- animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
- animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
- display:flexでcontainerの中身をど真ん中に設置
2. 【@keyframes&rotateZ】ボックスが回転するCSSアニメーション
動きは下の画像のような感じになります
コードを見る
<div class="container">
<div class="background1"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
0% {
border-width: 100px;
transform:rotate(0deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
25% {
border-width: 75px;
transform:rotate(90deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
50% {
border-width: 50px;
transform:rotate(180deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
75% {
border-width: 25px;
transform:rotate(270deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
100% {
border-width: 0px;
transform:rotate(360deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
}
.container {
/* flexboxでcontainerの中身をど真ん中に設置 */
display: flex;
justify-content: center;
align-items: center;
}
.background1 {
width: 205px;
height: 205px;
margin:50px;
animation-duration: 2s;
/* アニメーションにかかる時間を指定 */
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で記述したアニメーションの名前を指定 */
}
ここがポイント!
- @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
- @keyframesの中でtransform:rotate()で平面の回転角度を0%, 25%, 50%, 75%, 100%の時で値を変えることで回転するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- animation-durationでアニメーションにかかる時間を指定
- animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
- animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
- animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
- animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
- display:flexでcontainerの中身をど真ん中に設置
3. 【@keyframes&rotateZ】複数のボックスが回転するCSSアニメーション
動きは下の画像のような感じになります
コードを見る
<div class="container">
<div class="background1"></div>
<div class="background2"></div>
</div>
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background1 {
0% {
border-width: 150px;
transform:rotate(0deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
25% {
border-width: 120px;
transform:rotate(45deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
50% {
border-width: 90px;
transform:rotate(90deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
75% {
border-width: 60px;
transform:rotate(135deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
100% {
border-width: 0px;
transform:rotate(180deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
}
/* アニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定 */
@keyframes Background2 {
100% {
border-width: 150px;
transform:rotate(45deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
75% {
border-width: 120px;
transform:rotate(90deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
50% {
border-width: 90px;
transform:rotate(135deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
25% {
border-width: 60px;
transform:rotate(180deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
0% {
border-width: 0px;
transform:rotate(225deg);
/* rotateZでZ軸(平面)の回転角度を指定 */
}
}
.container {
/* flexboxでcontainerの中身をど真ん中に設置 */
display: flex;
justify-content: center;
align-items: center;
}
.background1, .background2 {
width: 205px;
height: 205px;
margin:50px;
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で記述したアニメーションの名前を指定 */
}
.background2 {
border: 0 solid pink;
box-sizing: border-box;
animation-name: Background2
/* keyframesで記述したアニメーションの名前を指定 */
}
ここがポイント!
- @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
- @keyframesの中でtransform:rotate()で平面の回転角度を0%, 25%, 50%, 75%, 100%の時で値を変えることで回転するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- animation-durationでアニメーションにかかる時間を指定
- animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
- animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
- animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
- animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
- @keyframesを複数用意して複数のアニメーションが相互に異なる動きをすることを実現
- display:flexでcontainerの中身をど真ん中に設置
【初心者向け】失敗しないプログラミングTIPS
そもそもWebデザインの基礎がわからない。。
ふたご
未経験からWeb制作で月50万稼げるようになったUdemy教材3選
でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
ふたご
完全無料で一人前のエンジニアになれるプログラミングスクール【ProEngineer】
- プログラミング学習&サポートが無料!
- 誰もが知っている超優良企業への就職サポート付き!
- 学習言語:Java、PHP、HTML、CSSなど
話だけ聞いてみる