【问题标题】:Not possible to use CSS calc() with transform:translateX in IE无法在 IE 中将 CSS calc() 与 transform:translateX 一起使用
【发布时间】:2014-02-23 12:21:33
【问题描述】:

全部,

我希望能够在我的 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() 不应该在这种情况下工作?

对于它的价值 - 我读到 here 你可以“堆叠” translateX 以达到相同的效果,我的测试似乎证实了这一点。即,

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

等同于:

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

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

我也知道可以使用left 代替translateX,但后者在与过渡一起使用时更加平滑,因为据我了解,它强制使用GPU 来处理动画。

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

【问题讨论】:

  • It's a bugthis question is a dupe。只需使用两个translateXs,这是最好的方法
  • “我在这里读到你可以“堆叠” translateX” - 你拯救了我的一天。

标签: html css


【解决方案1】:

我只是将它们都与 -ms- 浏览器选择器一起使用。效果很好。

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

【讨论】:

  • 我确认这很好用。 (我实际上正在使用calc(912px - 50vw) 之类的东西来防止侧边栏显示在仪表板顶部,除非您将其悬停。
【解决方案2】:

这个:

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

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

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

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

所以第一个更好,因为 a) 现在可以工作,b) 有效,c) 在规范生效之前它将继续工作。

【讨论】:

  • 这是一个很好的解决方法,可以解决我在使用 YUI CSS 压缩器时无法正确处理嵌套的 calc() 表达式的问题。谢谢!
  • 这是迄今为止我学到的关于 CSS 的最有用的东西!
  • 哇,这很奇特!它对我来说非常有效。谢谢。
  • 这很愚蠢,但对我来说,这里的新信息是可以在一个元素上多次使用相同类型的转换!谢谢!
  • 两个 translateX 是同时执行还是一个接一个?因为,如果一个接一个,transitions 属性也会加倍,导致与 calc() 用法不同的效果。
猜你喜欢
  • 2017-12-25
  • 2014-10-20
  • 2014-03-03
  • 2020-07-01
  • 2016-02-19
  • 2014-07-11
  • 2017-07-18
  • 2013-12-27
  • 2018-05-27
相关资源
最近更新 更多