なお、複数のCSSプロパティを変化させることも可能です。通常のAの状態では幅100pxなのを、マウスオーバしたBの状態のときに幅200pxに広げるようにします。a:hoverのセレクタに「width:200px;」を加え、「transition-property: background」の後ろにカンマを打って、「width」を追加します。
- /*ボタンに対して何もしていない状態(A)*/
- a{
- display:inline-block;
- color:#fff;
- width:100px;
- padding:10px;
- text-align:center;
- background:blue;
- text-decoration:none;
- /*アニメーション指定*/
- transition-property: background, width;
- transition-duration:1s;
- transition-timing-function:ease-out;
- transition-delay:0.5s;
- }
- /*ボタンに対してマウスオーバした状態(B)*/
- a:hover{
- background:red;
- width:200px;
- }
非常に簡単ですね。
しかし、このままでは、ブラウザの種類やバージョンによってはアニメーションが実行されません。なるべく多くのブラウザで動作するよう、transitionプロパティ全てに、ベンダプレフィックスを付けたものを追加します。
- /*ボタンに対して何もしていない状態(A)*/
- a{
- display:inline-block;
- color:#fff;
- width:100px;
- padding:10px;
- text-align:center;
- background:blue;
- text-decoration:none;
- /*アニメーション指定*/
- /*Firefox向け*/
- -moz-transition-property: background, width;
- -moz-transition-duration:1s;
- -moz-transition-timing-function:ease-out;
- -moz-transition-delay:0.5s;
- /*Chrome、Safari向け*/
- -webkit-transition-property: background, width;
- -webkit-transition-duration:1s;
- -webkit-transition-timing-function:ease-out;
- -webkit-transition-delay:0.5s;
- /*Opera向け*/
- -o-transition-property: background, width;
- -o-transition-duration:1s;
- -o-transition-timing-function:ease-out;
- -o-transition-delay:0.5s;
- transition-property: background, width;
- transition-duration:1s;
- transition-timing-function:ease-out;
- transition-delay:0.5s;
- }
- /*ボタンに対してマウスオーバした状態(B)*/
- a:hover{
- background:red;
- width:200px;
- }
次に、animationの設定方法を学びます。もう一度、AとBの状態を指定しただけのものにスタイルシートを戻します。
- /*ボタンに対して何もしていない状態(A)*/
- a{
- display:inline-block;
- color:#fff;
- width:100px;
- padding:10px;
- text-align:center;
- background:blue;
- text-decoration:none;
- }
- /*ボタンに対してマウスオーバした状態(B)*/
- a:hover{
- background:red;
- }
animationで指定できるのは、以下の6つです。
なお、これらは1つにまとめて指定できます。
(例)animation:btn 2s ease-out 0s 1 normal;
余談ですが、transitionでも同様にまとめて指定できる……はずなのですが、Firefoxで動作しないため、transitionでは個別にCSSプロパティを記載するようにしています。
さて、これを先ほどのtransitionとは逆に、Bの状態の方に記述します。
- /*ボタンに対して何もしていない状態(A)*/
- a{
- display:inline-block;
- color:#fff;
- width:100px;
- padding:10px;
- text-align:center;
- background:blue;
- text-decoration:none;
- }
- /*ボタンに対してマウスオーバした状態(B)*/
- a:hover{
- /*アニメーション指定*/
- animation:btn 2s ease-out 0s 1 normal;
- background:red;
- }
しかし、これだけでは動きません。
どのタイミングで何をアニメーションさせるかをまとめた「キーフレーム」というものも、スタイルシートの中に追加して設定する必要があります。次のように設定します。
- @keyframes アニメーション名 {
- 0% { アニメーションさせたいCSSプロパティの初期状態 }
- 100% { アニメーションさせたいCSSプロパティ最終状態 }
- }
今回、背景色を青から赤に変化させたいので、以下のように記述します。
- @keyframes btn {
- 0% {background:blue;}
- 100% {background:red;}
- }
また、A→Bの状態変化の間に、別の変化を差し挟むこともできます。青から赤に背景色が変化する途中で、黄色になるようにします。
- @keyframes btn {
- 0% {background:blue;}
- 50% {background:yellow;}
- 100% {background:red;}
- }
「50%」としている数字を小さくすれば、早く黄色になり、大きくすれば遅いタイミングで黄色になります。
Copyright © ITmedia, Inc. All Rights Reserved.
HTML5�偽X 險倅コ九Λ繝ウ繧ュ繝ウ繧ー