No es posible usar CSS calc () con transform: translateX en IE


Todos,

Me gustaría poder usar calc() con transform:translateX en mi CSS.

Por ejemplo,

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

Si bien esto funciona perfectamente en Chrome, Safari y Firefox, no funciona en IE10 o IE11.

Puedes ver un ejemplo sencillo aquí: http://jsfiddle.net/SL2mk/9 /

Es esto imposible? ¿Es un error en IE, o se supone que calc() no funciona en este contexto?

Por lo que vale - he leído aquí que se puede " apilar" translateX lograr el mismo efecto, y mis pruebas parecen confirmar esto. Es decir,

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

Es lo mismo que:

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

Pero no se si esta es la manera mejor, más confiable y a prueba de futuro de hacer esto.

También sé que es posible usar left en lugar de translateX, pero este último es mucho más suave cuando se usa con transiciones, ya que, según lo entiendo, obliga al uso de la GPU para manejar la animación.

Gracias de antemano por su consejo y perspicacia!

Author: Mosh Feu, 2014-01-31

2 answers

Esto:

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

Se compila en tiempo de análisis, pero la expresión calc aquí:

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

Debe interpretarse cada vez que el navegador necesita ese valor. El resultado de la expresión se puede almacenar en caché, pero no confiaría en los navegadores para utilizar este tipo de optimizaciones.

Así que el primero es mejor en el sentido de que a) funciona ahora, b) es efectivo y c) funcionará en el futuro hasta que la especificación esté en efecto.

 101
Author: c-smile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-30 23:21:05

Solo los uso con el selector-ms - browser. Funciona perfectamente.

-ms-transform: translateX(100%) translateX(-50px); /* IE 11 */
transform: translateX(calc(100% - 50px));
 0
Author: Daut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-24 09:13:39