@keyframesとAndroid
CSS3の@keyframesでアニメーションを作成しているんですがAndroidでかなりバグがあるようです。
transformに複数の値を指定すると動かない
@-webkit-keyframes hogeName{
0% {-webkit-transform:scale(1,2)}
50% {-webkit-transform:scale(2,2) translateY(10px)}
100% {-webkit-transform:scale(1,1) translateY(0)}
}
というようにtransformに複数の値が不規則に入る場合Androidでは動作しなくなることがあります。(このサンプルだとscaleの指定が無視される)
@-webkit-keyframes hogeName{
0% {-webkit-transform:scale(1,2) translateY(0)}
50% {-webkit-transform:scale(2,2) translateY(10px)}
100% {-webkit-transform:scale(1,1) translateY(0)}
}
という具合に初期値も省略せずに指定するとちゃんと表示されるようになります。
0%の省略がうまく動かない
@-webkit-keyframes hogeName{
50% {-webkit-transform:scale(2,2) translateY(10px)}
100% {-webkit-transform:scale(1,1) translateY(0)}
}
という具合に0%の指定を省略するとAndroidでまったく動かなくなります。
@-webkit-keyframes hogeName{
0% {-webkit-transform:scale(1,1) translateY(0)}
50% {-webkit-transform:scale(2,2) translateY(10px)}
100% {-webkit-transform:scale(1,1) translateY(0)}
}
ちゃんと0%の際の値(初期値)も指定しておきましょう。
@keyframes以外の指定とバッティングする
@-webkit-keyframes main01card01 {
0% {-webkit-transform:translateY(0) scale(1,1) rotate(0) }
50% {-webkit-transform1:translateY(50px) scale(1,1) rotate(6deg) }
100% {-webkit-transform:translateY(8px) scale(5,5) rotate(0) }
}
は一見動きそうだけどアニメーション要素に0%と異なる指定がある場合Androidだけ動かなくなる。(今回はscaleの指定が)
#main01main{
-webkit-animation:hogeName 5s;
-webkit-transform:translateY(0px) rotate(35deg);
}
#main01main{
-webkit-animation:hogeName 5s;
}
という具合にアニメーション要素の指定は取ってしまいましょう。
-webkit-animation-fill-mode : both;の指定が効かない
-webkit-animation-fill-mode : both;を指定するとアニメーション終了時も100%のスタイルを維持するのですが、Androidでは動作しません。
-webkit-animation:hogeName 5s;
-webkit-animation-fill-mode : both;
-webkit-transform:scale(5,5);
といった具合に100%時のスタイルをアニメーション要素にあらかじめ指定しておくことで回避できます。
関連エントリー
続:Androidブラウザでviewportのwidth指定
Android2.2 とtransformのバグ
スマートフォンとposition:fixedのバグ
AndroidとjQueryのスライドアニメーションの不具合
Androidのposition:absoluteとフォームの問題