css svg和vector-effect ="非缩放中风"浏览器兼容性

Sys*_*ral 9 css svg

从各种来源我收集到svg中的vector-effect ="non-scaling-stroke"应该适用于当前版本的Opera,Firefox和Chrome.(不确定IE10).

但是我只能在Opera和Firefox中使用它,然后只有当它作为图像直接嵌入时,如果它在CSS中被缩放为背景图像,那么它就不起作用.

我的问题:

为什么不镀铬?

为什么不在背景图片?

有没有一种标准方法可以在所有最新的浏览器中使用它?

一个小提琴的例子.

HTML:

<div><img src="http://dl.dropbox.com/u/60476509/close.svg" /></div>
<div><img id="one" src="http://dl.dropbox.com/u/60476509/close.svg" /></div>
<div id="two"></div>
<div id="three"></div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#one {
    width: 200px;
    height: 200px;
}

#two {
    background-image: url("http://dl.dropbox.com/u/60476509/close.svg");
    height: 100px;   /* native size */
    width: 100px;
    background-size: contain;        
}
#three {
    background-image: url("http://dl.dropbox.com/u/60476509/close.svg");
    height: 200px;
    width: 200px;
    background-size: cover;        
}    
Run Code Online (Sandbox Code Playgroud)

gal*_*dre 4

我不知道幕后发生了什么,但有一个更简单的解决方案,至少对于内联 SVG 来说(不确定背景)。改变:

<img src="svg-source.svg"/>
Run Code Online (Sandbox Code Playgroud)

到:

<object type="image/svg+xml" data="svg-source.svg"></object>
Run Code Online (Sandbox Code Playgroud)

另外,您需要确保您已经为 svg 文档进行了viewBox定义。

根据这个答案,object无论如何使用都是更好的做法。这是一篇不错的博客文章,推荐(为了跨浏览器兼容性):

<object type="image/svg+xml" data="svg-source.svg">
    <img src="png-version.png"/>
</object>
Run Code Online (Sandbox Code Playgroud)

我还没有测试后一个选项,但如果它有效,它比这个解决方案简单得多。

编辑:我发现作为嵌入对象,SVG 会干扰“悬停”和“单击”事件,所以我最终屈服并决定必须完全嵌入 SVG。但我没有兴趣粘贴每一个,所以我的 javascript 文件顶部有以下内容(我正在使用 JQuery):

$(document).ready(function()
{
    $('.deferred-load').deferredLoad();
}
$.fn.deferredLoad = function()
{
    $(this).each(function()
    {
        $(this).load($(this).attr('data-load'));
    });
}
Run Code Online (Sandbox Code Playgroud)

现在<img src="svg.svg"/>我可以写<div class="deferred-load" data-load="svg.svg"></div>.

当然,如果没有启用 Javascript,这将无法工作。但这比粘贴那些难看的 XML 好多了。