268

In about half of the svg examples I see on the internet, the code is wrapped in plain simple <svg></svg> tags.

In the other half, the svg tags have lots of complicated attributes like this:

<svg 
  xmlns="http://www.w3.org/2000/svg" 
  version="1.1" 
  xmlns:xlink="http://www.w3.org/1999/xlink"> 

My question is: is it ok to use the simple svg tags? I've tried playing around with the complicated ones, and everything works fine at my end if I don't include them.

4

4 回答 4

280

xmlns="http://www.w3.org/2000/svg"属性是:

  • 图像/svg+xml文件需要1
  • 联的 可选<svg>2

xmlns:xlink="http://www.w3.org/1999/xlink"属性是:

  • 对于具有xlink:属性的图像/svg+xml文件是必需的。1
  • 对于内联 xlink:属性<svg>可选的。2

version="1.1"属性是:

  • 建议符合image/svg+xml文件标准。3
  • 显然被每个用户代理忽略。4
  • 在 SVG 2. 5中移除

1 国际化资源标识符 (RFC3987)
2 自 HTML5
3 可扩展标记语言 (XML) 1.0
4可能直到发布更多主要版本。
5 SVG 2,W3C 候选推荐,2018 年 8 月 7 日

于 2015-12-13T09:49:50.283 回答
259

所有用户代理(浏览器)都会忽略版本属性,因此您可以随时删除它。

如果您将 SVG 内联嵌入 HTML 页面并按原样提供该页面,text/html不需要 xmlns 属性。在 HTML 文档中嵌入 SVG 是一项相当新的创新,它是作为 HTML5 的一部分出现的。

但是,如果您将页面作为 image/svg+xml 或 application/xhtml+xml 或任何其他导致用户代理使用 XML 解析器的 MIME 类型,需要xmlns 属性。直到最近,这是唯一的做事方式,所以有很多这样的内容。

于 2013-08-27T14:32:35.140 回答
10

我想添加两个答案,但我没有积分,我正在添加一个新答案。在最近对 Chrome(版本 63.0.3239.132(官方构建)(64 位 Windows))的测试中,我发现:

  1. 对于通过文本编辑器或javascript和elm.innerHTML直接输入HTML文件的内联SVG,xmlns属性不是必需的,如其他两个答案中所述。
  2. 但是对于通过 javascript 和 AJAX 加载的内联 SVG,有两种选择:
    • 使用xhr.responseTextelm.innerHTML。这不需要 xmlns。
    • 使用xhr.responseXML.documentElementelm.appendChild()elm.insertBefore()。这种创建内联 SVG 的方法在没有声明基本 SVG 命名空间的情况下产生半生不熟的结果,如xmlns="http://www.w3.org/2000/svg". <svg> 加载到 HTML 中,但文档级功能,例如getElementById()在 <svg> 元素上无法识别。我认为这是因为它在 HTML 之外使用 XMLHttpRequest XML 解析器。
于 2018-02-07T15:09:52.800 回答
3

关于 SVG 版本属性 MDN WebDoc

自 SVG 2 起已弃用
此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已经从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并尽可能更新现有代码;请参阅本页底部的兼容性表以指导您的决定。请注意,此功能可能随时停止工作。

version 属性用于指示 SVG 文档符合什么规范。它只允许在根元素上。它纯粹是建议性的,对渲染或处理没有影响。

PS:SVG 2 远未成为标准。

于 2019-09-27T15:45:52.867 回答