なお、複数の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.