CSS calc () kann mit transform: translateX im IE nicht verwendet werden

77

Alles,

Ich möchte calc () mit transform: translateX in meinem CSS verwenden können.

Z.B,

#myDiv {
  -webkit-transform: translateX(calc(100% - 50px));
  -moz-transform: translateX(calc(100% - 50px));
  transform: translateX(calc(100% - 50px));
}

Dies funktioniert zwar perfekt in Chrome, Safari und Firefox, aber nicht in IE10 oder IE11.

Ein einfaches Beispiel finden Sie hier: http://jsfiddle.net/SL2mk/9/

Ist das unmöglich Ist es ein Fehler im IE oder calc()soll es in diesem Zusammenhang nicht funktionieren?

Für das, was es wert ist - ich habe hier gelesen , dass Sie "stapeln" können translateX, um den gleichen Effekt zu erzielen, und meine Tests scheinen dies zu bestätigen. Dh

#div {
  transform: translateX(calc(100% - 50px));
}

ist das gleiche wie:

#div {
  transform: translateX(100%) translateX(-50px);
}

Aber ich weiß nicht, ob dies der beste, zuverlässigste und zukunftssicherste Weg ist, dies zu tun.

Ich weiß auch, dass es möglich ist, leftanstelle von zu verwenden translateX, aber letzteres ist viel flüssiger, wenn es mit Übergängen verwendet wird, da es nach meinem Verständnis die Verwendung der GPU erzwingt, um die Animation zu verarbeiten.

Vielen Dank im Voraus für Ihren Rat und Ihre Einsicht!

mattstuehler
quelle
5
Es ist ein Fehler , und diese Frage ist ein Betrug . Verwenden Sie einfach zwei translateXs, es ist der beste Weg
Zach Saucier
2
"Ich habe hier gelesen, dass Sie translateX" stapeln "können - Sie haben meinen Tag gerettet.
Elfayer

Antworten:

193

Dies:

transform: translateX(100%) translateX(-50px);

wird zur Analysezeit kompiliert, aber Ausdruck hier berechnen:

transform: translateX(calc(100% - 50px));

muss jedes Mal interpretiert werden, wenn der Browser diesen Wert benötigt. Das Ergebnis des Ausdrucks kann zwischengespeichert werden, aber ich würde mich nicht auf Browser verlassen, um solche Optimierungen zu verwenden.

Das erste ist also besser in dem Sinne, dass a) es jetzt funktioniert, b) effektiv ist und c) es in Zukunft funktioniert, bis die Spezifikation in Kraft tritt.

c-smile
quelle
Dies war eine großartige Problemumgehung für ein Problem, bei dem der YUI-CSS-Kompressor einen verschachtelten calc () -Ausdruck nicht korrekt behandelte. Vielen Dank!
Idungotnosn
20
Dies ist bei weitem das hilfreichste, was ich seit langem über CSS gelernt habe!
Nirazul
Wow, das ist eigenartig! Es hat wirklich gut für mich funktioniert. Vielen Dank.
Michael Giovanni Pumo
10
Es ist albern, aber die neue Information für mich hier ist, dass es möglich ist, dieselbe Art von Transformationen mehrmals für ein Element zu verwenden! Vielen Dank!
Marcias
2
Werden die 2 translateX gleichzeitig oder nacheinander ausgeführt? Denn wenn nacheinander, werden auch die Übergangseigenschaften gelöscht, was einen anderen Effekt als die Verwendung von calc () verursacht.
Luca Reghellin
10

Ich benutze sie beide einfach mit -ms- Browser Selector. Es funktioniert perfekt.

-ms-transform: translateX(100%) translateX(-50px); /* IE 11 */
transform: translateX(calc(100% - 50px));
Daut
quelle
1
Ich bestätige, dass dies anständig gut funktioniert. (Ich verwende tatsächlich so etwas wie calc(912px - 50vw), um zu verhindern, dass eine Seitenleiste auf einem Dashboard
angezeigt wird,