我正在研究响应式设计,并考虑将导航图标创建为.svg文件。当前浏览器的支持情况如何,是否有适用于旧版浏览器的解决方法/插件?
我正在研究响应式设计,并考虑将导航图标创建为.svg文件。当前浏览器的支持情况如何,是否有适用于旧版浏览器的解决方法/插件?
除了IE8及以下版本外,所有主要的浏览器多年来一直有支持,可以使用RaphaelJS等技术进行解决。
来源:
对于旧版浏览器的另一个选择是使用canvg JavaScript库。它是一个纯JavaScript SVG解析器,可以将结果渲染到画布上,但这可能有些过度。
...或者您可以让Apache服务器处理它:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} MSIE\s[5-8]\.
RewriteCond %{REQUEST_FILENAME} ^.+?\.svg$
RewriteRule ^(.+?)\.(?:svg)$ $1\.png [L]
你只需要为每个.svg文件创建.png版本,无论该文件是用于CSS背景还是img标记都没有关系。
编辑:我曾经链接到一张非常好的SVG比较表,但它自2011年以来就没有更新过了,所以现在已经不再相关了。
使用 object 元素!
<object data="example.svg" type="image/svg+xml">
<!-- If browser don't soport / don't find SVG -->
<img src="example.png" alt="Logotype" />
</object>
如果我正在处理<img>
元素(而不是CSS背景图片),我会使用一个方便的解决方法,结合Modernizr(一种JavaScript库,检测浏览器是否支持某些功能,例如.svg支持)和几行jQuery代码:
$(".no-svg img").each(function() {
var $this = $(this);
if ($this.attr("src").indexOf(".svg") > -1) {
var isSvg = $this.attr("src").toString();
var isPng = isSvg.replace(".svg", ".png");
$this.attr("src", isPng);
}
});
1)我会为每个.svg文件创建.png版本。
2)如果Modernizr检测到没有.svg支持,它会给html元素赋予类.no-svg
。
3)jQuery会交换文件扩展名。 .indexOf(".svg")
检查字符串".svg"
是否包含在src
的值中,如果找不到则返回-1
,如果找到,则返回正整数。如果发现".svg"
,则将整个src
字符串提取到isSvg
中,并使用.replace()
将.svg
替换为.png
并将结果保存为isPng
,然后将其设置为src
的值。
src
URI的末尾查找“.svg”呢? - iconoclast