今回は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だけしか使っていません。
この記事の信頼性(ゆうけんブログの筆者はこんな人)
- 現役Webデザイナーが執筆
- 最高月収7桁超のフリーランス
- 完全未経験から独学でWeb制作スキルを習得
- Twitterフォロワー数2,000人超(→@twinzvlog_yk)
- Web制作のメンター経験多数
- 認定ランサー(ランサーズ最高ランク)
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
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
- @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
- @keyframesでtransform:translate3dでXYZの移動距離を各時点で指定することで立体的に移動するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- @keyframesでbox-shadowを各時点で指定することで画像の影が太陽の動きで変化するような動きを実現
- animation-durationでアニメーションにかかる時間を指定
- animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
- animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
- animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
- animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
- 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
- @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
- @keyframesでtransform:translate3dでXYZの移動距離、rotateでXZ軸の回転角度を各時点で指定することで3D画像が立体的に移動するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- @keyframesでbox-shadowを各時点で指定することで画像の影が太陽の動きで変化するような動きを実現
- animation-durationでアニメーションにかかる時間を指定
- animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
- animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
- animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
- animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
- 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
- @keyframesを使いアニメーションで実行されるプロパティと開始から終了までの期間をパーセントで指定
- @keyframesでtransform:translate3dでXYZの移動距離、rotateでXZ軸の回転角度、scaleで拡大縮小を各時点で指定することで3D画像が立体的に拡大しながら回転移動するアニメーションを実現(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
- @keyframesでbox-shadowを各時点で指定することで画像の影が太陽の動きで変化するような動きを実現
- animation-durationでアニメーションにかかる時間を指定
- animation-timing-function: linearでアニメーションの進行の度合いを指定し、linearで開始から終了までを一定に変化(滑らかなアニメーションになる)するよう指定
- animation-direction: alternateでアニメーションの再生方向を指定し、alternateでアニメーションが行ったり来たりを繰り返すよう指定
- animation-iteration-count: infiniteでアニメーションの繰り返し回数をinfiniteに指定して無限に繰り返すアニメーションを実現
- animation-nameを@keyframeのアニメーションを使用したい要素の中で名前を指定
- display:flexでcontainerの中身をど真ん中に設置
『絶対にリモートワーク!』という方におすすめの求人サイトをご紹介!
クラウドテック
この講座のポイント
対象
Webデザイナー・エンジニア・グラフィックデザイナー・PM・マーケター・ライター
公式サイト
クラウドテック公式ページ
特徴
- クラウドソーシング企業大手のクラウドワークスが運営する求人サイト
- 実務未経験者でもOK
- 登録社数14万社
- フリーランス・個人事業主向け案件がケタ違いに多い
- 報酬額や勤務地・職種など希望が通りやすい
- Web制作・コーディングの高単価案件が多い
- リモートワーク案件数は業界トップクラス
- 最短3日で案件を獲得できる
現役Webデザイナーの筆者イチオシの求人サイト!フリーランス向けWeb制作案件なら確実に業界トップクラス。営業かけずに案件に困らなくなる一番の近道です。
ふたご
無料で登録してみる >>
まとめ
HTMLとCSSを使うと今回紹介したようなことも簡単にできてしまうんです。
『CSSアニメーションやエフェクトだけではなくWebサイトをゼロから作って稼いでいきたい』
『3ヶ月くらいで最低でも月10万円は稼ぎたい』
『営業とかやったことないけどWeb制作だけで稼いでいきたい』
こんな方のためにWeb制作で月80万超稼ぐ筆者が自身の経験を踏まえて【失敗しない】Webデザイナー(Web制作)独学ロードマップを執筆しました。
少額の投資で3ヶ月後には月10〜30万稼げるよう設計してあります。
(学習教材やAdobeなど最低限のコストはかかります)
ロードマップの構成
- Web制作に特化した『確実に身に付く』学習方法
- Web制作会社が喰いつく理想的なポートフォリオの作成手順
- 返信率10%以上!Web制作会社へのメール営業
有料公開も考えましたが「Webデザイナー(Web制作)はまだまだ稼げることを証明したい!」という思いが強く、期間限定で無料公開をすることにしました。
2021年半ばまでは無料公開する予定ではありますが前倒しすることもあり得ますのでご興味ある方はお早めにどうぞ!