DOM 中的 Svg 无法在旧版浏览器(IE9、IE10、Safari 6)上缩放

Svg in DOM does not scale on older browsers (IE9, IE10, Safari 6)

我正在使用 snap.svg(来自 snapsvg.io 的 jQuery 插件)将 .svg 图像加载到我的网站中,这只会在图像中加载我的备用位置并使在我的 html.

中,某些元素可以设置动画而不会丢失结构

我面临的问题是图像无法在旧版浏览器(例如 IE9、IE10、Safari 6)上缩放

svg 属性:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 viewBox="0 0 2100 1174.2" style="enable-background:new 0 0 2100 1174.2;" xml:space="preserve">

在 BrowserStack 中使用 firebug 时,我可以看到外部 svg 元素的宽度为 100%,比例丢失。

这是我尝试过的一小部分(有些绝望和荒谬):

值得注意:

提前致谢

已找到解决方案!

在旧版浏览器中(存在这些问题),需要声明高度 宽度。没有其中之一会导致默认设置(例如 IE9 150px 高度)

我通过写一些 JavaScript (jQuery):

解决了这个问题
function setSvgHeight() {
    $('svg').each(function() {
        var viewBox = $(this).attr('viewBox').split(" ");
        $(this).css("height", (( $(this).parent().width() / viewBox[2] ) * viewBox[3] ));
    });
}

此函数遍历所有 <svg> 元素,请求 viewBox 并将 svg 的高度设置为计算出的高度(记住比率)。 之所以有效,是因为宽度已经在 css 中定义。

$(window).on("resize", function() {
    setSvgHeight();
});

$(window).on("load", function() {
    setSvgHeight();
});

上面显示的触发器确保纵横比在调整大小时保持不变。并给出设置高度的初始触发器。

var interval = setInterval(function(){
    if($('.source').length == 0){
        setSvgHeight();
        clearInterval(interval);
    }
}, 50);

我写了上面显示的间隔来计算我的后备图像,我使用了一个插件来用内联 SVG 替换这些后备图像(具有 class "fallback")。一旦后备图像数量达到0,则意味着所有图像都已加载并触发设置高度的功能。