【问题标题】:Rotate(90deg) not being applied using .transform in Chrome 37在 Chrome 37 中未使用 .transform 应用旋转(90 度)
【发布时间】:2014-10-30 16:37:14
【问题描述】:

我有一些代码,直到最近,它都可以在所有支持 CSS 转换的浏览器上运行。它打破了最新的 Chrome (37)。我发现了这个问题。一个元素的计算样式的转换不被其他元素接受。

HTML

<div class="one">One</div>
<div class="two">Two</div>
<span></span>

CSS

div {
    width: 100px;
    height: 100px
}

.one {
    background-color: red;
    transform: rotate(90deg);
}

.two {
    background-color: blue
}

Javascript

var oneStyle = window.getComputedStyle(document.querySelector('.one'));
var oneTransform = oneStyle.transform;
document.querySelector('span').innerHTML = 'Tranform value is: ' + oneTransform;
var twoStyle = document.querySelector('.two').style;
twoStyle.transform = oneTransform;

这是一个小提琴:http://jsfiddle.net/acbabis/0v8v2xd7/

问题是第二个(蓝色)元素的旋转与第一个(红色)元素不同,即使我在 javascript 中告诉它。

这对我来说似乎是一个错误。是吗?

编辑:我的实际代码在除了最新的 Chrome 之外的所有浏览器中都可以运行,但我的示例代码似乎在所有浏览器中都出现了问题。我还是想了解一下为什么会出现上述问题。

编辑 2: 让它再次闯入 Chrome 37。我的猜测是它不喜欢科学记数法。但是为什么计算样式会有它呢?

【问题讨论】:

  • 有趣 - 使用 45deg 的值似乎有效。 90 度的值失败:example fiddle
  • 顺便说一句:上面的新代码在 Safari 版本 7.0.6 (9537.78.2) 上失败 - 您需要使用属性 webkitTransform 而不是 transform
  • chrome不也用webkit吗?
  • @WoodrowBarlow 不,Chrome 不支持require the -webkit extension。您还可以通过调整开发控制台中的元素来重现此问题。它拒绝样式,但仅限于某些值。
  • 好笑! rotate(89.999deg) 作品:jsfiddle.net/hashem/0v8v2xd7/10

标签: javascript css google-chrome transform


【解决方案1】:

这是一个相当普遍的问题,旧版本的 Chrome 和其他供应商也会发生类似的错误。

通常的解决方法是,作为 Hashem mentioned 的一部分,要么将旋转更改为 89.9deg 之类的东西,要么通过除旋转之外执行 translateZ(1px) 之类的东西来强制 GPU 渲染。 Demo。将来我们也可以通过使用will-change 属性来强制执行此操作

这是因为浏览器在渲染某些东西时遇到问题,而渲染元素正好旋转 90 度就是其中之一。有时他们需要一点帮助:)

【讨论】:

  • 你能解释一下为什么这会导致浏览器简单地放弃。根据你所说的,我本以为它会使用别名进行渲染,而不是什么都不做。
  • 这只是 Chrome 的常见问题,但他们无法修复。如果不看源代码,就没有很好的方法来解释它
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 2018-03-21
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2020-09-13
  • 2021-05-24
  • 2011-03-22
相关资源
最近更新 更多