私が作成しているウェブサイトの単純なハンバーガーメニューSVGアイコンを作成しています。頻繁に使用されるアイコンを少し退屈にするために、私はそれに少しのアニメーションを入れていいと思った。私は3本の横棒を回転させて(それぞれ別々に)十字を作ることにしました。SVG CSSトランスフォームアニメーション、ブラウザ間の問題
私がMacで開発しているSafariは、初めてテストしたブラウザであり、すべてが意図どおりに動作していました。しかし、私はアニメーションが壊れていることを確認するために、Firefoxで同じファイルを開くことにしました。さらに問題を調査したところ、バーに適用されたCSS変換の順序を逆にすると、正反対の効果があることに気がつきました。Firefoxの結果は完璧でしたが、Safariはアイコンを正しく表示しませんでした。
ハンバーガーのアイコンのための単純化されたコード:アニメーションが次のコードでサス・ファイルに追加されました
<svg id="hamburger" viewBox="0 0 30 30" width="30" height="30">
<rect id="top" x="0" y="8px" width="30" height="2"/>
<rect id="middle" x="0" y="15px" width="30" height="2"/>
<rect id="bottom" x="0" y="22px" width="30" height="2"/>
</svg>
:
#top,
#middle,
#bottom {
transform-origin: center;
transform: none;
transition: transform .5s ease;
}
#hamburger.active {
#top {
transform: translateY(7px) rotate(45deg);
}
#middle {
transform: rotate(135deg);
}
#bottom {
transform: translateY(- 7px) rotate(45deg);
}
}
奇妙なことがあり、ときオーダーのものtranslate
とrotate
の変換が変換され、2つの異なるブラウザはまったく逆の結果を示します。私は変換の順序が最終結果に影響を与えることができることを理解しています(この場合はそうではないはずです)。しかし、順序を切り替えることによって '互換性'が反転する理由はわかりません。
私は、上記のコードで2つのほとんど同じCodepenの例を作成しました。 、Safariで壊れ http://codepen.io/Dimiter/pen/jrBqry
- ワークス:唯一の違いは、
translate
とrotate
変換の順であるhttp://codepen.io/Dimiter/pen/vKxGRY
正しいです、作業アニメーション:
ブロークン・アニメーション:
どうもありがとう事前に!
あなたの答えをありがとう!これは確かに問題を解決します。私はそれがFirefoxのこの特定のバグに起因すると思う:https://bugzilla.mozilla.org/show_bug.cgi?id=1209061#c0。そして私はマイナスを知っていましたが、幸運なことにSassはそれを正しい形式にコンパイルします:) – Dimiter
これはあなたのために働いてうれしいです - アニメーションを楽しんでください] – wick3d
少し遅れました。どちらのブラウザでもこれは壊れません。ブラウザは、 'transform-box'に対して異なるデフォルトを設定しています。これは 'transform-origin'の参照ボックスを制御するものです。 FirefoxはそれをSVGラッパーに設定します。 SafariとChromeはそれを変換される要素に設定します。現在、FFは仕様に基づいて正しいです。ただし、仕様が変更されている可能性があります。詳細はこちらをご覧ください:https://bugzilla.mozilla.org/show_bug.cgi?id=1209061#c6 –