LogoMark.png

CSS/Animation の変更点


#author("2017-12-19T14:31:49+00: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'' マウスホバーで要素にアクション
DEMO:https://koichi-inoue.github.io/CSS_Animation01/
DL:https://github.com/koichi-inoue/CSS_Animation01
各要素に個別にクラスを定義しただけのシンプルな事例集。CSSは必要な部分のみカットして使えます。
~
~

***animation:アニメーション
-''animation'' は ''@keyframes'' とセットで使います。''具体的な動きのパターンを @keyframes [ animation-name ]{・・} に定義''したうえで、''animation プロパティに、使用する animation-name、所要時間、開始までの遅延、イージング、ループ回数などの値を定義''します。  

-amimationプロパティーの書き方
 animation: animation-name animation-duration animation-timing-function
                   animation-delay animation-iteration-count animation-direction
                   animation-fill-mode animation-play-state;
記述例
 animation: pattern01  5s ; 
この例は( @keyframesにおいて)''pattern01'' として定義された動きを、5秒で動かすことを意味します。

-amimationプロパティーに指定できる様々な値
--animation-name 要素に適用するキーフレームアニメーションを指定
--animation-duration 開始から終了までの所要時間
--animation-timing-function イージングを指定( ease / linear)
--animation-delay アニメーションが開始するまでの遅延時間
--animation-iteration-count アニメーションのループ回数
--animation-direction アニメーションの再生方向
--animation-fill-mode キーフレーム指定プロパティの適用法
--animation-play-state アニメーションの再生と一時停止
--animation ショートハンド(上記をまとめて指定できます)

-@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); }
 }

~

-''animationを用いた事例1''
Hello World! がじわっと出ます。animation-name を ''fade'' にしています。
DEMO>https://koichi-inoue.github.io/CSS_Animation00/
DL: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/
DL:https://github.com/koichi-inoue/CSS_Animation02
 
既存のサイトに付け足す形で利用できるように、アニメーション要素のみのページにしています。「数秒のアニメーション、その後 [ ENTER ] で本編にジャンプ」という前提のページです。
 CSSアニメーションのイベントを取得することも可能なので、JavaScriptが扱える方であれば「特定要素のアニメーション終了と同時に自動で本編表示」という動きも可能です(参考記事>[[Quiita>http://qiita.com/omatoro/items/0388b90a104568093691]])。

~

***参考
ナビゲーション等にアニメーションを適用する事例は、Web上にたくさん紹介されています。以下、リンクをご覧ください。
-Hover.css - A collection of CSS3 powered hover effects
http://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]]
~
~