在 Internet Explorer 9 中使用 SVG 背景图像进行 CSS 2D 转换

Posted

技术标签:

【中文标题】在 Internet Explorer 9 中使用 SVG 背景图像进行 CSS 2D 转换【英文标题】:CSS 2D transform with SVG background-image in Internet Explorer 9 【发布时间】:2012-10-20 18:36:07 【问题描述】:

我只使用一个 SVG 背景图像创建了一个左右导航按钮,并水平翻转它以获得另一个方向。这在所有支持 CSS 2D transforms 的浏览器中都可以正常工作,除了 Internet Explorer 9。基本上 CSS 看起来像这样:

div.nav-left, div.nav-right 
    background-image: url('TriangleArrow-Right.svg');


div.nav-left 
        -webkit-transform: scaleX(-1);
            -ms-transform: scaleX(-1);
                transform: scaleX(-1);

我创建了一个jsFiddle,它在 Internet Explorer 10、Firefox、Chrome、Safari 等中看起来像这样:

但实际上在 IE9 中看起来像这样:

我添加了一个大于号来说明按钮应指向的方向。实际上您可以看到,IE9 将转换正确地应用于文本,但对 SVG 背景图像却完全相反。

如果我将 SVG 背景图像更改为 PNG,则一切都可以在 IE9 中正常运行,但请参阅jsFiddle。

我找不到这方面的任何信息。这似乎是一个错误,因为 IE9 应该正确支持 CSS 转换和SVGs as CSS background。

【问题讨论】:

【参考方案1】:

我认为你需要使用special syntax for IE:

div.nav-left 
    -webkit-transform: scaleX(-1);
    /*-ms-transform: scaleX(-1);*/
    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
    transform: scaleX(-1);
    left: -50px;

http://jsfiddle.net/g2y86/1/

虽然看起来不是很锋利,也许有更好的方法。

编辑

要翻转,试试这个(注意-ms-filterfilter 行都适用于 IE):

div.nav-left 
    -webkit-transform: scaleX(-1);
    -ms-filter: fliph;
    filter: fliph;
    transform: scaleX(-1);
    left: -50px;

http://jsfiddle.net/2cPYR/

【讨论】:

不幸的是,我的图像不可旋转。它必须保持直立,并且只能水平翻转而不能垂直翻转(旋转 180° 可以同时进行)。 正如你所说,它看起来不是很清晰,而且 IE 过滤器不支持 alpha 透明度(即使 IE9 在 SVG 和 PNG 上正确支持它,但在使用过滤器时它会中断)。你仍然得到我的支持,但这对我来说不是解决方案...... @samy-delux:也许使用两个不同的图像更简单,语义上更正确(如果可能的话)。 是的,这就是我正在做的事情,将 IE9 切换为使用我们为 IE8 准备的 PNG。【参考方案2】:

根据我的尝试,scaleX-property 确实不适用于 svg 背景图像上的负数。如果您对尝试转换的 div 应用不同颜色的边框,您可以看到,它实际上已正确转换,但背景图像不适应其容器。

如果你只是想解决眼前的问题,你可以使用-ms-transform: rotate(180deg);,svg 似乎知道它应该在这里做什么。

【讨论】:

这不起作用。我已经尝试过这种方法,请参见此处:jsfiddle.net/hj7Tg/17 或者您能否提供一个有效的 jsFiddle? 对,对不起..我忘记了我将 div 更改为静态元素而不是定位元素...也许它无论如何都有帮助 jsfiddle.net/7evDa 但是一旦我重新添加绝对定位,它就会再次中断:jsfiddle.net/7evDa/3【参考方案3】:

我用filter: FlipV;来容纳ie9

-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
filter: FlipV; // flip for ie9

【讨论】:

以上是关于在 Internet Explorer 9 中使用 SVG 背景图像进行 CSS 2D 转换的主要内容,如果未能解决你的问题,请参考以下文章

在 Internet Explorer 9 中使用 HTML5 实时流式传输 h.264

在 Internet Explorer 9 中更改域名后,Ajax 停止工作

在 Internet Explorer 9 中使用 SVG 背景图像进行 CSS 2D 转换

强制 Internet Explorer 9 使用 IE 9 模式

Internet Explorer 9 中的渐变

为啥我的表单不能在 Internet Explorer 9 中上传文件?