不可能在IE中使用带有transform:translateX的CSS calc()

mat*_*ler 60 html css css3

所有,

我希望能够在我的CSS中使用calc()和transform:translateX.

例如,

#myDiv {
  -webkit-transform: translateX(calc(100% - 50px));
  -moz-transform: translateX(calc(100% - 50px));
  transform: translateX(calc(100% - 50px));
}
Run Code Online (Sandbox Code Playgroud)

虽然这在Chrome,Safari和Firefox中完美运行 - 但它在IE10或IE11中不起作用.

你可以在这里看到一个简单的例子:http://jsfiddle.net/SL2mk/9/

这不可能吗?它是IE中的错误,还是calc()不应该在这种情况下工作?

对于它的价值 - 我在这里读到你可以"堆叠" translateX以实现相同的效果,我的测试似乎证实了这一点.也就是说,

#div {
  transform: translateX(calc(100% - 50px));
}
Run Code Online (Sandbox Code Playgroud)

是相同的:

#div {
  transform: translateX(100%) translateX(-50px);
}
Run Code Online (Sandbox Code Playgroud)

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

我也知道可以使用left而不是translateX,但后者在使用过渡时更加平滑,因为据我所知,它强制使用GPU来处理动画.

提前感谢您的建议和见解!

c-s*_*ile 160

这个:

transform: translateX(100%) translateX(-50px);
Run Code Online (Sandbox Code Playgroud)

在解析时编译,但在这里计算表达式:

transform: translateX(calc(100% - 50px));
Run Code Online (Sandbox Code Playgroud)

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

所以第一个是更好的,因为a)它现在有效,b)有效,c)它将在未来生效,直到规范生效.

  • 这是迄今为止我在CSS中学到的最有用的东西! (15认同)
  • 它很愚蠢,但这里的新信息是可以在元素上多次使用相同类型的变换!谢谢! (9认同)
  • 2个translateX是同时执行还是一个接一个执行?因为,如果一个接一个,transitions 属性也会重复,导致与 calc() 用法不同的效果。 (2认同)

Dau*_*aut 8

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

-ms-transform: translateX(100%) translateX(-50px); /* IE 11 */
transform: translateX(calc(100% - 50px));
Run Code Online (Sandbox Code Playgroud)