AndroidブラウザでCSS3する時の注意点など
前回からだいぶ間が空いたけど続きをば。
そういえば思っていたよりスマホでのHTML5開発の記事が増えない。
もはやそこまで最先端って感じでもなくなってきたし、
興味ある人が少ないのか、それとも情報を公開したくないのか。
半年ほど今の仕事をやってきて、
いろいろと慣れてきたので、
キーフレームアニメーションする時の注意点を
書きたいと思う。
まずキーフレーム定義において、
最初と最後の要素は0%またはfromおよび100%またはto
としてフレームを指定するのだが、
(以下は透明にフェードアウトする)
@-webkit-keyframes kf1 { from{ opacity:1; } to{ opacity:0; } }
実はtoの部分にバグがあるため
これでは一部のバージョンでは動かない。
なのでそれを防ぐためには以下のように書く必要がある。
@-webkit-keyframes kf1 { from{ opacity:1; } 99.9%,to{ opacity:0; } }
toとともに99.9%の指定を追加した。
99.99%でももちろん構わないが、100%ではtoと同義なのでダメである。
これでは厳密にいうと時間軸が綺麗ではなくなるため
少々気持ちが悪いが、仕方がない。
もう一つ。
前半は透明度を変え、後半はtransformしたいといった場合、
@-webkit-keyframes kf1 { from{ opacity:0; } 50%{ opacity:1; -webkit-transform:scale(1); } 99.9%,to{ -webkit-transform:scale(2); } }
と書きたくなるがこれもダメである。
少々面倒だしキーフレームごとにどんな動きがあるのかわかりにくくなるが、
@-webkit-keyframes kf1 { from{ opacity:0; -webkit-transform:scale(1); } 50%{ opacity:1; -webkit-transform:scale(1); } 99.9%,to{ opacity:1; -webkit-transform:scale(2); } }
としなければならない。
また、transformはあくまでもひとつのプロパティなので、
その中で指定できる関数「translate()」や「scale()」を
組み合わせて使いたい場合、
どれかのキーフレームで指定したい関数がある場合は
上記のopacityとtranslateと同じように、
全てのキーフレームに記述しなければならない。
例えば、全体を通して2倍に拡大しながら移動して戻る場合
@-webkit-keyframes kf1 { from{ -webkit-transform:translate(0px,0px) scale(1); } 50%{ -webkit-transform:translate(10px,10px); } 99.9%,to{ -webkit-transform:translate(0px,0px) scale(2); } }
これでは期待通りに動かない。
面倒でも以下のようにする必要がある。
@-webkit-keyframes kf1 { from{ -webkit-transform:translate(0px,0px) scale(1); } 50%{ -webkit-transform:translate(10px,10px) scale(1.5); } 99.9%,to{ -webkit-transform:translate(0px,0px) scale(2); } }
つまり、最終的にscale(2)することは分かっていても、
50%の折り返し地点がキーフレームになっていれば
わざわざ計算してscale(1.5)を記述しなければならないのだ。
- webkit-transformプロパティ内で
scale()を指定しない=scale(1)と同義になるためだ。
前述のopacityとの組み合わせの場合とは意味合いが異なるが、
実機でなかなか動かなくて「?」とならないためにも
律儀に綺麗に記述する習慣を身に着けよう。
誰かCSS3をグラフィカルに定義できるIDEを開発したら売れるんじゃなかろうか。
Android4.0についてはまだ研究段階だが、
既存のCSSはそのままでは動かないこともある模様。
把握できたらまた記事にしたいと思う。