我是否对SVG文件使用<img>,<object>或<embed>?
我应该如何使用<img>
, <object>
或<embed>
将SVG文件加载到页面中,方法与加载jpg
, gif
或png
类似?
每种方法的代码是什么,以确保它尽可能地发挥作用? (我看到引用了mimetype,或者在我的研究中指出了后备SVG渲染器,但没有看到一个很好的现状参考)。
假设我正在使用Modernizr检查SVG支持,并且对于不支持SVG的浏览器回退(可能会使用普通的<img>
标签进行替换)。
我可以推荐SVG入门(由W3C出版),其中涵盖了以下主题:http://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#SVG_in_HTML
如果您使用<object>
则可以免费获得栅格后备*:
<object data="your.svg" type="image/svg+xml">
<img src="yourfallback.jpg" />
</object>
*)好吧,不完全免费,因为有些浏览器会下载这两种资源,请参阅Larry的建议以了解如何解决这个问题。
2014年更新:
如果你想要一个非交互式的svg,使用<img>
脚本回退到png版本(对于较老的IE和android <3)。 一个干净而简单的方法来做到这一点:
<img src="your.svg" onerror="this.src='your.png'">
。
这将表现得非常像GIF图像,如果您的浏览器支持声明性动画(SMIL),那么这些将会播放。
如果您想要交互式svg,请使用<iframe>
或<object>
。
如果您需要提供旧版浏览器使用svg插件的功能,请使用<embed>
。
对于CSS background-image
和类似属性的svg,modernizr是切换到备用图像的一种选择,另一种选择取决于多个背景自动执行:
div {
background-image: url(fallback.png);
background-image: url(your.svg), none;
}
注意 :多背景策略在Android 2.3上不起作用,因为它支持多种背景,但不支持svg。
关于svg回退的这篇博文还有一个很好的解读。
<object>
和<embed>
具有一个有趣的属性:它们可以从外部文档获取对SVG文档的引用(考虑到同源策略)。 然后可以使用该参考来为SVG制作动画,更改其样式表等。
特定
<object id="svg1" data="/static/image.svg" type="image/svg+xml"></object>
然后你可以做类似的事情
document.getElementById("svg1").addEventListener("load", function() {
var doc = this.getSVGDocument();
var rect = doc.querySelector("rect"); // suppose our image contains a <rect>
rect.setAttribute("fill", "green");
});
从IE9及以上版本中,您可以在普通的IMG标签中使用SVG。
https://caniuse.com/svg-img
<img src="/static/image.svg">
链接地址: http://www.djcxy.com/p/36407.html