2014-01-15 13 views
41

CSSトランジションを使用して、マウスオーバー時に右から左にコンテナをアニメーション化しています。これは、Internet Explorerを除くすべてのブラウザで正常に動作します。理由は、私のCSS左のプロパティでcalc()を使用している(そして使用する必要がある)ためです。 Live DemoIE 10 + 11:calc()を使用したCSSトランジションが機能しない

CSSは次のようになります:

div { 
    background: red; 
    width: 100px; 
    height: 100px; 
    position: absolute; 
    top: 100px; 
    left: 90%; 
    -webkit-transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1); 
    -moz-transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1); 
    -o-transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1); 
    transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1); 
} 
div.translate-less { 
    left: calc(90% - 4rem) 
} 

私はjQueryを使ってマウスオーバーでクラス.translateレス追加してい:

$(document) 
.on('mouseenter', 'div', function(){ 
    $(this).addClass('translate-less') 
}) 
.on('mouseleave', 'div', function(){ 
    $('div').removeClass('translate-less'); 
}) 

は、私はここでライブデモを作成しました

今、Internet Explorerでスムーズに移行したいと考えています。そのためには、これらの特定のブラウザのcalc()を削除し、left: 85%;のようなルールを追加します。しかし、IE 10と11にはdropped support for conditional commentsがあり、これらのブラウザを特にターゲットにする方法はないようです。 IE 10は-ms-high-contrast-hackでターゲティングできますが、IE 11ではターゲティングできません。私はuse JavaScriptにブラウザを検出したくないので、これはCSSのハックを使用するよりもハッキリと思われるからです。

助けが必要ですか?前もって感謝します!

+0

leftを使用するだけで問題はありますか?それはすべてのブラウザで機能するため85%でしょうか?また、単にマウスオーバーでクラスを追加する代わりに、.translate-less:hoverを使用するだけではありません。 – Charles380

+0

Charles380、左:85%と左:90%-4remの間に有意差があります。前者の摺動距離は相対的です(広いビューポートで大きく、狭いビューポートで小さい)。後者は絶対的です。これは私のデザインにおいて重要な違いになります。 (ホバーのおかげでありがたいですが、他の理由からjQueryを使う必要があります。基本的には、これ以上の要素を変更して、ホバーをターゲットにすることはできません) – bootsmaat

答えて

94

transform: translateX()は、回避策を提供できます。 、状況に応じた変換を使用して、右のプロパティが良いかもしれない:http://jsfiddle.net/xV84Z/1/

right: 10%; 
transform: translateX(-4rem); 

ここでは、スクリプトの修正版です。

また、あなたが(理由a bugの)IEでtranslateX()calc()を使用することはできませんが、あなたは、変換に複数のtranslateX() Sを適用することができます。

/* This */ 
transform: translateX(90%) translateX(-4rem); 
/* is equivalent to this */ 
transform: translateX(calc(90% - 4rem)); 

(ただし、この場合は90%が意味

+7

うわー...これは素晴らしい答えです!私は関連する問題がありました。私はcalc()を 'translateX'で使いたかったのですが、Chrome、Safari、Firefoxで動作していましたが、IEでは動作しません。ですから、** multiple ** ** translateX'sを1つのトランスフォームで使うというあなたのソリューションはとても便利です!好奇心の外に - あなたが知っているのはなぜ** IEで動作しないのですか?それは仕様の一部ではないのですか? – mattstuehler

+4

@mattstuehler [これはバグです](http://connect.microsoft.com/IE/feedback/details/762719/css3-calc-bug-inside-transition-or-transform) –

+2

この回答ありがとうございます!これでちょうど私の努力の束を救った。 – LandonSchropp

関連する問題