如何在 HTML 中使用外部 SVG?

Posted

技术标签:

【中文标题】如何在 HTML 中使用外部 SVG?【英文标题】:How to use external SVG in HTML? 【发布时间】:2015-04-23 12:41:53 【问题描述】:

我尝试制作一个引用 SVG 文件的 html,该 SVG 文件是交互式的(CSS 悬停):

    如果我使用<img src="algerie.svg">,我会失去交互性。

    如果我使用开发工具在新选项卡中打开此图片,它会变成交互式的。

    如果我使用:

    <svg viewBox="0 0 512 512">
      <use xlink:href="algerie.svg"></use>
    </svg>
    

然后什么都没有显示,更糟糕的是,Chrome 或 Firefox 没有在网络开发工具中检测到该文件。

【问题讨论】:

这能回答你的问题吗? Do I use <img>, <object>, or <embed> for SVG files? 【参考方案1】:

你应该使用&lt;object&gt;标签嵌入图片:

<object data="algerie.svg" type="image/svg+xml"></object>

详情请参考这个问题:Do I use <img>, <object>, or <embed> for SVG files?

【讨论】:

不用type="image/svg+xml",最好配合widthheight属性使用! 假设SVG有&lt;path&gt;&lt;polygon&gt;&lt;line&gt;等元素。是否可以通过&lt;object&gt; 方法为这些元素设置fillstroke 属性? @HemantArora 是的,你可以!您可以选择元素以更改其属性,就像普通的 html 元素一样。此外,您还可以将类绑定到要更改的元素。你可以查看这篇文章了解更多详情https://benfrain.com/selecting-svg-inside-tags-with-javascript/ 当使用 CSS 加载到 OBJECT 标记中时,您实际上无法操作任何 SVG 元素,因为对象将 SVG 加载到它自己的文档中,因此 CSS 无法访问它。但是,您可以使用 JS 操作它们,这不是一个非常干净的解决方案,而且您必须执行其他操作,例如等待图像加载然后使用 JS 操作它。我认为这不是一个好的解决方案。

以上是关于如何在 HTML 中使用外部 SVG?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 的 css 部分中加载外部 svg

您如何使用 CSS 设置外部 svg 的样式

在 HTML 中嵌入外部 SVG 以进行 JavaScript 操作

SVG:为啥外部 css 会覆盖文本的内联样式?

如何在HTML5中使用SVG

如何在SVG中使用对话框