IE9+上如何在SVG元素中使用CSS transform

23

拥有SVG路径:

<path class='st8' d='M73.4,11.3c-6.3,0-6.4,3.6-6.4,3.6v18c0,0,0.6,3.3,6.4,3.3c5.8,0,6.6-3.3,6.6-3.3v-18 C80,14.9,79.7,11.3,73.4,11.3z M75,31.3c0,0-0.3,1.2-1.6,1.2c-1.3,0-1.4-1.2-1.4-1.2V16.6c0,0,0.3-1.3,1.5-1.3s1.5,1.3,1.5,1.3V31.3 z'/>

我尝试使用CSS来转换它,而不是从元素标签中声明transform属性。

这个过程在webkit和firefox上运行得很好,但是在测试IE9或10时没有任何反应

<svg>
    <style>
        .st8 {
            -webkit-transform: rotate(45deg); /* works on chrome and Safari */
            -moz-transform: rotate(45deg); /* works on firefox */
            -ms-transform: rotate(45deg); /* doesn't work on IE */
            transform: rotate(45deg);
        }
    <style>
    <path class='st8' d='M73.4,11.3c-6.3,0-6.4,3.6-6.4,3.6v18c0,0,0.6,3.3,6.4,3.3c5.8,0,6.6-3.3,6.6-3.3v-18 C80,14.9,79.7,11.3,73.4,11.3z M75,31.3c0,0-0.3,1.2-1.6,1.2c-1.3,0-1.4-1.2-1.4-1.2V16.6c0,0,0.3-1.3,1.5-1.3s1.5,1.3,1.5,1.3V31.3 z'/>
</svg>

我试图搜索网络上是否有任何地方提到CSS变换确实不能在IE中工作,但我没有找到。因此,我的问题是,确实无法在IE中使用CSS变换吗?除了必须严格使用元素标记中的transform属性之外,还有什么解决方法吗?

2个回答

22

即使IE11不认识CSS样式,它仍然支持SVG中的transform属性。

幸运的是,您可以使用JavaScript将属性设置为与样式匹配:

var g = document.querySelector('.st8'),
    transform = getComputedStyle(g).getPropertyValue('transform');
    
g.setAttribute('transform', transform);
.st8 {
    -ms-transform: rotate(45deg); /* doesn't work on IE */
    transform: rotate(45deg);
}
<svg>
  <path class='st8' d='M73.4,11.3c-6.3,0-6.4,3.6-6.4,3.6v18c0,0,0.6,3.3,6.4,3.3c5.8,0,6.6-3.3,6.6-3.3v-18 C80,14.9,79.7,11.3,73.4,11.3z M75,31.3c0,0-0.3,1.2-1.6,1.2c-1.3,0-1.4-1.2-1.4-1.2V16.6c0,0,0.3-1.3,1.5-1.3s1.5,1.3,1.5,1.3V31.3 z'/>
</svg>


1
嗯,在我的IE9仿真器中可以运行,但我没有IE9电脑进行测试。谢谢你告诉我。 - Rick Hitchcock

17
尽管IE9+支持CSS3变换,但它们不支持在SVG上进行变换,据我所知,这无法通过CSS实现。
来源: caniuse关于CSS3变换的已知问题 http://caniuse.com/#feat=transforms2d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接