#author("2021-05-06T18:32:03+09:00;2021-05-06T18:31:50+09:00","default:inoue.ko","inoue.ko") #author("2021-05-06T18:32:13+09:00;2021-05-06T18:32:03+09:00","default:inoue.ko","inoue.ko") *CSS Animation ~ CSSアニメーションはCSS3の規格で、スマートフォンを含む多くのブラウザがそれに対応したことで、活用事例が増えています。それなりにコード量は増えますが、JavaScript(jQuery)なしで動きが実現できるのが大きな魅力です。 //以下、CSSアニメーションでできること・・を知っていただくための事例です。ブラウザの「ページのソースを開く」からHTMLのコード、また <head>のリンクから CSSのコードをご確認ください。 //&color(red){事例はFirefoxとChromeでのみ動作確認しています(古い環境では動きません)。}; CSSでアニメーションを実現するには、位置・回転・拡大縮小について「どういう状態であるか」を定義する ''transform'' と、時間的に「どのように変化するか」あるいは「どのように動くか」を定義する ''transition'' と ''animation''、計3つのプロパティーがあります。以下、順に概説します。 //&color(red){事例はすべて標準的な記述のみです。ブラウザによっては、[[ベンダープレフィックス>Google:ベンダープレフィックス CSS]]が必要になる場合があります。}; ~ ~ **transform transform は''要素の状態(位置・回転、拡大縮小)を定義するプロパティー''で、後述する transitionの開始・終了時の状態や、@keyframes の個々のタイミングにおける変形処理を定義します。2Dと3Dがあります。 transition や animation の使用に際して記述するものですが、例えば、アイコンを傾けて表示したい場合などは、これだけの記述でも機能します。 ~ ***プロパティー -移動(translate, translate3d, translateX, translateY, translateZ) &color(red){''注意'':transformプロパティーで translate(移動) を利用する場合、''要素は position: absolute; で初期位置が定義されている''ことが前提となります。}; -回転(rotate, rotate3d, rotateX, rotateY, rotateZ) -拡大縮小(scale, scale3d, scaleX, scaleY, scaleZ) -スキュー(skew, skewX, skewY) -マトリクス処理(matrix, matrix3d) -透視投影(perspective) ~ ***transformを単なる状態定義に用いた事例 BOXが45度傾いて表示されます。 -HTML <div class="box"></div> -CSS .box { width: 100px; height: 100px; background: black; transform: rotate(-45deg); } ~ ~ **transition transition(状態の変化)は、CSSプロパティが変化する際のアニメーションを定義します。典型的なのは :hover によってCSSプロパティーが変化する場合です。よって一般に、:hover によって変化する対象のセレクタに対して、このプロパティーを適用します。実際に動くのは :hover したときです。 -プロパティー --transition-property アニメーションを適用する対象プロパティ --transition-duration 開始から終了までの所要時間 --transition-delay アニメーションが開始するまでの遅延時間 --transition-timing-function イージングを指定 --transition ショートハンド(上記4つをまとめて指定できます) -一般にCSSには、「常態」と :hover をセットで記述します。transition すなわち「どう遷移するか」の情報は、常態側に記述します。 ~ ***transitionを用いた事例1|マウスホバーで変形 マウスホバーで「100x100の黒い正方形が、2秒かけて幅500pxのグレーの長方形に変化する」という事例の要点のみを記述した例です。 -HTML <div class="box"></div> -CSS .box { width: 100px; height: 100px; background: black; transition: all 200ms 0s ease; } .box: hover { background: gray; width: 500px; } ~ ***transitionを用いた事例2|マウスホバーで要素にアクション 各要素に個別にクラスを定義しただけのシンプルな事例集です。CSSは必要な部分のみカットして使えます。 -DEMO:https://koichi-inoue.github.io/CSS_Animation01/ -CODE:https://github.com/koichi-inoue/CSS_Animation01 ~ ~ **animation ''animation'' は ''@keyframes'' とセットで使います。''具体的な動きのパターンを @keyframes [ animation-name ]{・・} に定義''したうえで、''animation プロパティに、使用する animation-name、所要時間、開始までの遅延、イージング、ループ回数などの値を定義''します。 ~ ***@keyframes の書き方 @keyframes [ animation-name ] { /* プロパティー */ }; 記述例1 単純遷移(白から黒へ) @keyframes pattern01 { 0% { color: #FFFFFF; } 100% { color: #000000; } } 記述例2 from to の利用 @keyframes pattern02 { from { transform: rotate(0deg); } to { transform: rotate(180deg); } } 記述例2 パーセンテージの列挙 @keyframes pattern03 { 0% { transform: rotate(0deg); } 30% { transform: rotate(180deg); } 80% { transform: rotate(-180deg); } 100% { transform: rotate(0deg); } } ~ ***amimationプロパティーの書き方 animation: animation-name animation-duration animation-timing-function animation-delay animation-iteration-count animation-direction animation-fill-mode animation-play-state; -animation-name 要素に適用するキーフレームアニメーションを指定 -animation-duration 開始から終了までの所要時間 -animation-timing-function イージングを指定( ease / linear) -animation-delay アニメーションが開始するまでの遅延時間 -animation-iteration-count アニメーションのループ回数 -animation-direction アニメーションの再生方向 -animation-fill-mode キーフレーム指定プロパティの適用法 -animation-play-state アニメーションの再生と一時停止 -animation ショートハンド(上記をまとめて指定できます) ''記述例'': animation: pattern01 5s ; この例は、@keyframesにおいて ''pattern01'' として定義された動きを、5秒で動かすことを意味します。 ~ ***animationを用いた事例1 Hello World! がじわっと出ます。animation-name を ''fade'' にしています。 -DEMO:https://koichi-inoue.github.io/CSS_Animation00/ -CODE:https://github.com/koichi-inoue/CSS_Animation00 -HTML <h1>Hello World!</h1> -CSS h1{ text-align: center; animation: fade 5s ease; } @keyframes fade { 0% { color: #3399FF; } /* 背景色と同じ色(背景に埋もれます) */ 100% { color: #FFFFFF; } /* 白 */ } ~ ***animationを用いた事例2 回転しながら、背景色が赤→緑→青と変化します。 -HTML <div class="box"></div> -CSS .box { width: 100px; height: 100px; background: red; animation: rotation 3s ease 0s infinite alternate none running; } @keyframes rotation { 0% { transform: scale(.3); background: red; } 50% { transform: scale(.6) rotate(-45deg); background: green; } 100% { transform: scale(1) rotate(180deg); background: blue; } } ~ ***animationを用いた事例3 オープニングアニメーションの例 -DEMO:https://koichi-inoue.github.io/CSS_Animation02/ -CODE:https://github.com/koichi-inoue/CSS_Animation02 既存のサイトに付け足す形で利用できるように、アニメーション要素のみのページにしています。「数秒のアニメーション、その後 [ ENTER ] で本編にジャンプ」という前提のページです。 CSSアニメーションのイベントを取得することも可能なので、JavaScriptが扱える方であれば「特定要素のアニメーション終了と同時に自動で本編表示」という動きも可能です(参考記事>[[Quiita>http://qiita.com/omatoro/items/0388b90a104568093691]])。 ~ ~ **ライブラリの活用 Animate.css を利用した事例を紹介します。スクロールすると要素が動きながら登場する・・というよくある演出の事例です。 -DEMO:https://koichi-inoue.github.io/CSS_AnimateCSS/ -CODE:https://github.com/koichi-inoue/CSS_AnimateCSS ~ ~ **参考 ナビゲーション等にアニメーションを適用する事例は、Web上にたくさん紹介されています。以下、リンクをご覧ください。 -Animate.css - Just-add-water CSS animations https://animate.style/ -Hover.css - A collection of CSS3 powered hover effects https://ianlunn.github.io/Hover/ -CSSアニメーション入門 qiita.com http://qiita.com/soarflat/items/4a302e0cafa21477707f -ディズニー社に学ぶ!HTML/CSSで12個のアニメーション基本原則を再現 https://cssanimation.rocks/jp/principles/ -[[スターウォーズ風のオープニング(数行で簡単)>http://coliss.com/articles/build-websites/operation/css/css3-tutorial-starwars-scrolling-text.html]] ~ ~