2016-06-27 8 views
1

私が作成しているウェブサイトの単純なハンバーガーメニュー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); 
    } 
} 

奇妙なことがあり、ときオーダーのものtranslaterotateの変換が変換され、2つの異なるブラウザはまったく逆の結果を示します。私は変換の順序が最終結果に影響を与えることができることを理解しています(この場合はそうではないはずです)。しかし、順序を切り替えることによって '互換性'が反転する理由はわかりません。

私は、上記のコードで2つのほとんど同じCodepenの例を作成しました。 、Safariで壊れ http://codepen.io/Dimiter/pen/jrBqry

  • Firefoxで動作します:Firefoxで壊れSafariで

    正しいです、作業アニメーション:

    ブロークン・アニメーション:

    どうもありがとう事前に!

  • 答えて

    1

    ご質問ありがとうございます。 これはFirefoxにとって本当に興味深い問題です。 私は両方のケースをテストしましたが、実際にはWebkitはコードに問題はなく、Firefoxは要素を間違って配置しています。

    これは、ブラウザ間の変換元の違いによるものだと思います。

    いずれにしても、あなたのハンバーガーがfirefoxのクロスになるのを助けることができました。addind a -moz-transitionプロパティーで、トランスフォームの値が少し異なります。

    はこれにあなたのコードを更新してみて、それはあなたの問題を解決するかどうかを教えてください:)

    #hamburger.active { 
        #top { 
        transform: translateY(7px) rotate(45deg); 
        -moz-transform: translate(-5px,3px) rotate(45deg); 
        } 
        #middle { 
        transform: rotate(135deg); 
        } 
        #bottom { 
        transform: translateY(-7px) rotate(45deg); 
        -moz-transform: translate(5px,-7px) rotate(45deg); 
        } 
    } 
    

    もスペースなしで負の値を書くことを覚えておいてください。だから、この「-7px」ではなく、このが好きなように「 - 7px」

    +0

    あなたの答えをありがとう!これは確かに問題を解決します。私はそれがFirefoxのこの特定のバグに起因すると思う:https://bugzilla.mozilla.org/show_bug.cgi?id=1209061#c0。そして私はマイナスを知っていましたが、幸運なことにSassはそれを正しい形式にコンパイルします:) – Dimiter

    +0

    これはあなたのために働いてうれしいです - アニメーションを楽しんでください] – wick3d

    +0

    少し遅れました。どちらのブラウザでもこれは壊れません。ブラウザは、 'transform-b​​ox'に対して異なるデフォルトを設定しています。これは 'transform-origin'の参照ボックスを制御するものです。 FirefoxはそれをSVGラッパーに設定します。 SafariとChromeはそれを変換される要素に設定します。現在、FFは仕様に基づいて正しいです。ただし、仕様が変更されている可能性があります。詳細はこちらをご覧ください:https://bugzilla.mozilla.org/show_bug.cgi?id=1209061#c6 –

    0

    それは少し遅れて、別の答えのためだが、トランスフォームでKUTE.js Pluginを試してみて、あなたはがっかりされません。

    関連する問題