是否需要SVG参数(例如“ xmlns”和“版本”)?


203

在网上看到的svg例子中,大约有一半是用简单的代码包装的 <svg></svg>标签中。

在另一半中,svg标记具有许多复杂的属性,如下所示:

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

我的问题是:可以使用简单的svg标签吗?我尝试过处理那些复杂的对象,如果不包含它们的话,一切都会正常进行。

Answers:


206

所有用户代理(浏览器)都忽略版本属性,因此您始终可以删除该属性。

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

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


5
“所有UA都会忽略版本属性,因此您可以随时删除它。” -但是规范对此要说些什么?“浏览器会让您逃脱它”在(或曾经)明确地(或曾经)明确地错误的许多实践中都是如此。
Mark Amery 2014年

在IE11中,如果我说<!DOCTYPE svg xmlns="www.w3.org/2000/svg">可以用,但是如果我拿走xmlns或将其更改为<!DOCTYPE svg xmlns="www.example.com">不可用。这是为什么?
唐老鸭2015年

8
请为这个答案引用消息来源吗?
2540625

69
我在Firefox中编写了SVG代码的重要部分,我这么说。那还不够吗?如果没有,我还是添加了一些链接。
罗伯特·朗森

1
@Marcel不是,如果这些数据uri是image / svg + xml(通常是这种情况),那么答案的最后一部分成立。
罗伯特·朗森,

228

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

  • 所需图像/ SVG + XML文件。1个
  • 对于内联是 可选<svg>2

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

  • 具有xlink:属性的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日


2
它需要是http还是https?
JohannesB

2
@JohannesB两种协议都兼容:D
ncomputers '17

1
@JohannesB是的,这里有一个内联示例HTTP HTTPS和带有xlink属性的内联 svg的image / svg + xml文件示例HTTP HTTPS
ncomputers,2015年

1
谢谢,猜想尼克·克拉弗(Nick Craver)也会犯错;)
JohannesB

2
请勿version将xml声明(<?xml version...)的version属性误认为<svg>元素的属性。第一个是关于XML标记语言的版本,而第二个是SVG的版本。这个答案的作者通过引用XML而不是³中的SVG规范犯了这个错误。我试图更正它,但是一些白痴拒绝了修改。
巴绍(Bachsau)

7

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

0

关于SVG版本属性的MDN WebDoc

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

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

PS:SVG 2尚未成为标准。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.