
世はまさに、SCSS + autoprefixer時代!!
現在はCSSファイルを直接編集する機会は激減し、SCSS + autoprefixerでCSSを生成するのが当たり前になってきている。
おかげでコーディングの工数は激減し、autoprefixerを使用していればベンダープレフィックスのつけ忘れもない。
JavaScriptにもベンダープレフィックス追加
しかし、autoprefixerはあくまでCSSにベンダープレフィックスを自動追加するものなので、JavaScriptには追加されない。
ゆえにベンダープレフィックスを必要とするAndroid 4系などはJavaScriptでstyleを追加された際にベンダープレフィックスが付いていないと動かなくなってしまう。
例えばこのようなCSSが適用された要素に…
/* <div id="b"></div> */
#b {
width: 200px;
height: 200px;
margin: 50px;
background: #c00;
transition: -webkit-transform 1s;
transition: transform 1s;
transition: transform 1s, -webkit-transform 1s;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
1秒ごとに0〜360degのtransformのrotateを追加するコードを書いたとする。
var b = document.getElementById('b');
setInterval(function() {
b.style.transform = 'rotate(' + Math.floor(Math.random() * 360) + 'deg)';
}, 1000);
このコードは最新のブラウザでは動くがAndroid 4系の標準ブラウザなどでは動作しない。
試しにstyle.animationが定義されているか確認するコードをalertで実行すると最新のブラウザではtrueになるが、未対応ブラウザではfalseを返してしまう。
これを防ぐにはstyle.animationが有効のときはtransform、無効のときはwebkitTransformを使用するように分岐する。
var b = document.getElementById('b');
var isAnimation = b.style.animation !== undefined;
var transform = isAnimation ? 'transform' : 'webkitTransform';
alert('isAnimation: ' + isAnimation);
setInterval(function() {
b.style[transform] = 'rotate(' + Math.floor(Math.random() * 360) + 'deg)';
}, 1000);
transformとwebkitTransformを追加したサンプル

