是否需要SVG参数,例如'xmlns'和'version'?

Lar*_*ars 184 xml tags svg

在互联网上看到的大约一半的svg例子中,代码都包含在简单的<svg></svg>标签中.

另一半,svg标签有很多复杂的属性,如下所示:

<svg 
  xmlns="http://www.w3.org/2000/svg" 
  version="1.1" 
  xmlns:xlink="http://www.w3.org/1999/xlink"> 
Run Code Online (Sandbox Code Playgroud)

我的问题是:使用简单的svg标签是否可以?我试过玩复杂的,如果我不包括它们,一切都很好.

nco*_*ers 210

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

  • 所需图像/ SVG + XML文件.1
  • 可选内联 <svg>.2

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

  • 带有xlink: attributes的image/svg + xml文件是必需的.1
  • 可选内联 <svg>的XLink:属性.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日

  • 不要将 xml 声明(`&lt;?xml version...`)的 `version` 属性误认为是 `&lt;svg&gt;` 元素的 `version` 属性。第一个是关于 XML 标记语言的版本,而后一个指定 SVG 的版本。这个答案的作者通过引用 XML 而不是 ³ 中的 SVG 规范犯了这个错误。我试图纠正它,但一些白痴拒绝了编辑。 (3认同)
  • 是否需要使用http或也可以使用https? (2认同)
  • @JohannesB两种协议都兼容:D (2认同)

Rob*_*son 188

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

如果您将SVG内嵌在HTML页面中并提供该页面,text/html不需要xmlns属性.在HTML文档中嵌入SVG内嵌是一项相当新的创新,是HTML5的一部分.

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

  • 我在Firefox中写了一小部分SVG代码,我这么说.那不够好吗?如果没有,我还是添加了一些链接. (58认同)
  • 请问一个消息来源的答案吗? (6认同)
  • *“所有 UA 都忽略版本属性,因此您可以随时删除它。”* - 但规范对此事有什么看法?“浏览器会让你逍遥法外”是(或在某些时候已经)适用于许多(或曾经)明确不正确的做法。 (3认同)
  • @SC_Chupacabra是的 (2认同)

jam*_*ess 6

我想同时添加两个答案,但是我没有任何意义,我要添加一个新答案。在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解析器。