无法在IE中将CSS calc()与transform:translateX一起使用


77

所有,

我希望能够在我的CSS中将calc()与transform:translateX一起使用。

例如,

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

尽管此功能在Chrome,Safari和Firefox中完美运行,但在IE10或IE11中却无法运行。

您可以在此处看到一个简单的示例:http : //jsfiddle.net/SL2mk/9/

这不可能吗?这是IE中的错误,还是calc()在这种情况下不起作用?

为了它的价值-我在这里读到,您可以“堆叠”translateX以达到相同的效果,而我的测试似乎证实了这一点。即

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

是相同的:

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

但是我不知道这是否是最好,最可靠和面向未来的方法。

我也知道可以使用left代替translateX,但是当与过渡配合使用时,后者要平滑得多,因为据我所知,它会强制使用GPU来处理动画。

预先感谢您的建议和见解!


5
这是一个错误这个问题是虚假的。只需使用两个translateXs,这是最好的方法
Zach Saucier 2014年

2
“我在这里读到,您可以“堆叠” translateX”-您保存了我的一天。
Elfayer

Answers:


193

这个:

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

在解析时进行编译,但此处为calc表达式:

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

每次浏览器需要该值时都必须对其进行解释。表达式的结果可以被缓存,但是我不会依靠浏览器来使用这种优化。

因此,从以下方面来说,第一个更好:a)现在可以正常工作,b)有效,并且c)将来可以正常工作直到规范生效。


这是解决我的YUI CSS压缩器无法正确处理嵌套calc()表达式的问题的绝佳解决方法。谢谢!
idungotnosn

20
到目前为止,这是我很长时间以来对CSS所学到的最有用的东西!
nirazul

哇,这很奇怪!对我来说真的很好。谢谢。
Michael Giovanni Pumo

10
它很愚蠢,但是这里给我的新信息是可以在一个元素上多次使用相同类型的转换!谢谢!
marcias

2
2个translateX是同时执行还是一次执行?因为,如果一个接一个的过渡属性也会变倍,导致与calc()用法不同的效果。
卡·雷格尔林

10

我只是将它们与-ms-浏览器选择器一起使用。完美运作。

-ms-transform: translateX(100%) translateX(-50px); /* IE 11 */
transform: translateX(calc(100% - 50px));

1
我确认这工作得很好。(我实际上正在使用类似的方法calc(912px - 50vw)来防止边栏显示在仪表板上,除非您将其悬停
。– GottZ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.