xmlns="http://www.w3.org/2000/svg"
属性是:
图像/svg+xml 文件需要。 1
对于内联
xmlns:xlink="http://www.w3.org/1999/xlink"
属性是:
对于具有 xlink: 属性的图像/svg+xml 文件是必需的。 1
对于带有 xlink: 属性的内联
version="1.1"
属性是:
建议符合 image/svg+xml 文件标准。 3
显然被每个用户代理忽略。 4
在 SVG 2. 5 中移除
1 Internationalized Resource Identifiers (RFC3987)
2 Since HTML5
3 Extensible Markup Language (XML) 1.0
4可能要等到其他主要版本的发布。
5 SVG 2, W3C Candidate Recommendation, 07 August 2018
所有用户代理(浏览器)都会忽略版本属性,因此您可以随时删除它。
如果您将 SVG 内联嵌入 HTML 页面并将该页面作为 text/html
提供,那么 xmlns attributes are not required。在 HTML 文档中嵌入 SVG 是一项相当新的创新,它是作为 HTML5 的一部分出现的。
但是,如果您将页面作为 image/svg+xml 或 application/xhtml+xml 或任何其他导致用户代理使用 XML 解析器的 MIME 类型,那么 the xmlns attributes are required。直到最近,这是唯一的做事方式,所以有很多这样的内容。
<!DOCTYPE svg xmlns="www.w3.org/2000/svg">
它可以工作,但如果我删除 xmlns 或将其更改为 <!DOCTYPE svg xmlns="www.example.com">
它就不起作用。这是为什么?
我想添加两个答案,但我没有积分,我正在添加一个新答案。在最近对 Chrome(版本 63.0.3239.132(官方构建)(64 位 Windows))的测试中,我发现:
对于通过文本编辑器或javascript和elm.innerHTML直接输入HTML文件的内联SVG,xmlns属性不是必需的,如其他两个答案中所述。但是对于通过 javascript 和 AJAX 加载的内联 SVG,有两个选项:使用 xhr.responseText 和 elm.innerHTML。这不需要 xmlns。使用 xhr.responseXML.documentElement 和 elm.appendChild() 或 elm.insertBefore()。这种创建内联 SVG 的方法在没有声明基本 SVG 命名空间的情况下产生半生不熟的结果,如 xmlns="http://www.w3.org/2000/svg" 中。
关于 SVG 版本属性,MDN WebDoc 说
自 SVG 2 起已弃用此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已经从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并尽可能更新现有代码;请参阅本页底部的兼容性表以指导您的决定。请注意,此功能可能随时停止工作。 version 属性用于指示 SVG 文档符合什么规范。它只允许在根元素上。它纯粹是建议性的,对渲染或处理没有影响。
PS:SVG 2 远未成为标准。
<?xml version...
) 的version
属性误认为<svg>
元素的version
属性。第一个是关于 XML 标记语言的版本,而后一个是指定 SVG 的版本。这个答案的作者通过引用 XML 而不是 ³ 中的 SVG 规范犯了这个错误。我试图纠正它,但一些白痴拒绝了编辑。