SVG参数是'xmlns'和& # 39;版本# 39;需要吗?

在我在互联网上看到的大约一半的svg示例中,代码都包装在简单的<svg></svg>标记中。

另一方面,svg标签有很多复杂的属性,比如:

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

我的问题是:是否可以使用简单的svg标记?我已经尝试过一些复杂的,如果我不包括它们,在我这边一切都很好。

73409 次浏览

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

如果您将SVG内联嵌入到HTML页面中,并将该页面作为text/html提供,则XMLNS属性不是必需的. HTML页面中包含XMLNS属性不是必需的. HTML。在HTML文档中嵌入SVG是最近才出现的创新,是HTML5的一部分。

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

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"属性是:

  • 推荐符合图像/ svg + xml文件标准。3.
  • 显然忽视了由每个用户代理。4
  • 删除在SVG 2。5
< p > 1 国际化资源标识符(RFC3987) < br > 2 HTML5自 < br > 3. 扩展标记语言(XML) 1.0 < br > 4可能直到更多主要版本的发布 5 > < /晚餐SVG 2, W3C候选推荐,2018年8月7日 < br >

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

  1. 对于内联SVG直接输入到HTML文件,通过文本编辑器或javascript和elm。在innerHTML中,xmlns属性是不必要的,正如在其他两个答案中所述。
  2. 但是对于通过javascript和AJAX加载的内联SVG,有两个选项:
    • 使用xhr.responseTextelm.innerHTML。这并不需要xmlns。
    • 使用xhr.responseXML.documentElementelm.appendChild()elm.insertBefore()。这种创建内联SVG的方法会产生不成熟的结果,没有声明基本的SVG名称空间,如xmlns="http://www.w3.org/2000/svg"。& lt; svg>加载到HTML中,但是文档级函数,如getElementById()在<svg>元素。我假设这是因为它在HTML之外使用XMLHttpRequest XML解析器。
    • 李< / ul > < / >

关于SVG的版本属性MDN WebDoc

SVG 2后已弃用
该特性不再推荐。虽然 一些浏览器可能仍然支持它,它可能已经被删除了 从相关的网页标准来看,可能正在进行中 已删除,或仅为兼容性目的保留。避免使用 如果可能的话,更新现有的代码;参见兼容性表 在本页底部,以指导您的决定。注意这一点 功能可能在任何时候停止工作。

版本属性用于指示SVG的规格 文件符合。它只允许在根元素上使用。它

PS: SVG 2还远没有成为标准。