〽️第1問、ボタン。 〽️第2問、transform-origin。 〽️第3問、translate。 〽️第4問、skew。 〽️第5問、rotate。 〽️第6問、複数指定。 〽️おつかれさまでした。
⬆︎CSSアニメーションについてのまとめページはこちら。
相変わらずですが当コーナーの試験は、参考サイトや書籍などでカンニングしながら、解き進めることを強くおすすめします。
みなさんの「調べながら目的の実装にたどり着く」ためのトレーニングになれば幸いです。
今回も全6問の構成となっています。
前半は基本的なtransform/translateの動きの実装、後半になるにつれ「+ひと工夫」が必要な内容になっていますので、是非チャレンジしてみてください。
CSSアニメーション、中間テスト。
2021.06.03
基本編を終えたらチャレンジしましょう。
前回のテストはこちら⬆︎。
キーフレームアニメーションの基本的スキルについての出題です。
はじめに定番のボタンアクションです。
マウスカーソルを乗せる(タッチデバイスであればタップ)すると、少し大きくなるCSSアニメーション。
ボタン要素(id = "btn"とします)に対し、hover時に少し拡大するアニメーションを実装しましょう。
スマホなどのタッチデバイスでは、タップで変化/他の場所をタップで元に戻るようにしてください。
#btn { transition:0.5s } #btn:hover { transform:scale(1.2); }
ボタンの擬似クラスhoverに拡大を指定し、ボタン本体にはtransitionプロパティでアニメーションの継続時間を指定します。
<body ontouchstart = "">
またbody全体に「ontouchstart = 空の値」を指定することにより、タッチデバイスでのアニメーションon/offができるようにしておきましょう。
<img id = "point" src = "point.png">
要素が左外側から回転しながら画面に入ってくるアニメーションです。
要素が左下を基準に回転し、画面の外側から倒れ込んでくるCSSアニメーションを作ってみましょう。
#point { transform-origin:left bottom; animation:naname 2s infinite; } @keyframes naname { from { transform:rotate(-135deg); } }
html要素のtransform-origin(変形の基準点)は、デフォルトがcenter(要素の中央)となっています。
これを「left bottom」と指定する事で、基準点を左下に持っていくことができます。
全く同じ正方形サイズの、赤と青の要素。
上下が入れ替わるアニメーションにしたい。
2つの要素をアニメーションさせて上下を入れ替える。
2つのサイズは不明。
#ao { animation:ao 2s ease-out alternate infinite; } @keyframes ao { to { transform:translateY(「「1100%」」); } } #aka { animation:aka 2s ease-out alternate infinite; } @keyframes aka { to { transform:translateY(「「1-100%」」); } }
移動にはtranslate関数を用います。translateでの%指定は、自身のサイズに対する比率として解釈されます。
そのため「上に100%」「下に100%」とすれば2つの要素はちょうど入れ替わります。
<img id = "elm" src = "elm.png">
transform:skewの基本的な動き。
要素が右側から「起き上がって」くるようなCSSアニメーションを作ってください。
#elm { 「「1transform-origin:bottom;」」 animation:elm 2s linear infinite; } @keyframes elm { from { transform:skewX(「「1-90deg」」); } }
skewX(-90°)で要素は右側に完全に倒れます。
また要素の足元は固定しておきたいので、transform-originを「bottom」としました。
今の問題が基本的すぎて物足りない方はこちら⬆︎もどうぞ。
<div id = "soto"> <img id = "open" src = "open.svg"> <img id = "closed" src = "closed.svg"> </div> <style> #soto { height:4em; width:10em; position:relative; } #soto img { display:block; width:100%; position:absolute; top:0; } </style>
扨(さて)このへんから、+ひと工夫が必要となってくる問題です。
⬆︎はposition:absoluteを使って「open」「closed」の画像を同じ位置に貼り付けています。両者をX軸回転によって切り替わるようにしたい。
ヒント。要素がX軸またはY軸を基準に90°回転した時、画面上では見えなくなってしまう。その性質を利用します。
同じ位置に貼り付けた2枚の画像。X軸回転を使って表示が切り替わるCSSアニメーションを作りましょう。
#open { animation:open 2s ease-in-out infinite alternate; } @keyframes open { from { transform:rotateX(-90deg); } 50% { transform:rotateX(-90deg); } to { transform:rotateX(0deg); } } #closed { animation:closed 2s ease-in-out infinite alternate; } @keyframes closed { from { transform:rotateX(0deg); } 50% { transform:rotateX(90deg); } to { transform:rotateX(90deg); } }
見せたくないほうの画像をrotateX(90deg)に固定しておき、見せたいほうを回転させています。
<img id = "elment" src = "element.png">
要素が回転しているのですが、だんだんとその回転半径が大きくなっていきます。
実装するには、複数のtransform関数を組み合わせて作る必要がありそうです。
回転軸は固定のまま、回転半径が徐々に大きくなっていくCSSアニメーションを作りましょう。
#element { width:50%; animation:element 6s ease-out infinite; } @keyframes element { to { transform:rotate(2turn) translate(100%); } }
複数のtransformの扱いがわかれば、コードはごく単純なもので実装することができます。
transform関数は「後に記述したものが内包される」ので、((平行移動している要素)が回転)するように、関数を並べています。
期末テスト、おつかれさまでした!
ネットなどで調べながらこの1〜6問の実装に成功したら、あなたのCSSアニメーションのスキルは相当なものだと言えます。
「ちょっとできなかった」という方。
「CSSアニメーション作り方」の中から関連する内容について、勉強してみてください。
最後までお読みくださり、ありがとうございました。
あなたのwebサイトが動きのある、素敵なCSSアニメーションで飾られることを祈っています。ではまた〜 ♪
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。