我是否对SVG文件使用<img>,<object>或<embed>?

我应该如何使用<img><object><embed>将SVG文件加载到页面中,方法与加载jpggifpng类似?

每种方法的代码是什么,以确保它尽可能地发挥作用? (我看到引用了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

    上一篇: Do I use <img>, <object>, or <embed> for SVG files?

    下一篇: Fast and Lean PDF Viewer for iPhone / iPad / iOs