【问题标题】:Are SVG parameters such as 'xmlns' and 'version' needed?是否需要 'xmlns' 和 'version' 等 SVG 参数?
【发布时间】:2013-08-30 08:25:16
【问题描述】:

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

另外一半,svg 标签有很多复杂的属性,像这样:

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

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

【问题讨论】:

    标签: xml svg tags


    【解决方案1】:

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

    • 必需用于 image/svg+xml 文件。 1
    • 可选 内联 &lt;svg&gt;2

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

    • 必需用于具有 xlink: 属性的 image/svg+xml 文件。 1
    • 可选,用于 inlined &lt;svg&gt;xlink: 属性。 2

    version="1.1" 属性是:

    • 推荐遵守 image/svg+xml 文件标准。 3
    • 显然被每个用户代理忽略4
    • 已在 SVG 2 中删除5

    1Internationalized Resource Identifiers (RFC3987)
    2Since HTML5
    3Extensible Markup Language (XML) 1.0
    4 可能要等到其他主要版本的发布。
    5SVG 2, W3C Candidate Recommendation, 07 August 2018

    【讨论】:

    • 必须是http还是也可以是https?
    • @JohannesB 两种协议都兼容:D
    • @JohannesB 是的,这里有一个 inlined 示例 HTTP HTTPSimage/svg+xml 文件与 inlined 带有 xlink 属性的 svg 示例 HTTP HTTPS
    • 谢谢,你猜尼克·克拉弗也会犯错;)
    • 不要将 xml 声明 (&lt;?xml version...) 的 version 属性误认为 &lt;svg&gt; 元素的 version 属性。第一个是关于 XML 标记语言的版本,而后一个是指定 SVG 的版本。这个答案的作者通过引用 XML 而不是 ³ 中的 SVG 规范犯了这个错误。我试图纠正它,但一些白痴拒绝了编辑。
    【解决方案2】:

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

    如果您将 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。直到最近,这是唯一的做事方式,所以有很多这样的内容。

    【讨论】:

    • “所有 UA 都会忽略版本属性,因此您可以随时删除它。” - 但是规范对此有什么要说的呢? “浏览器会让你侥幸逃脱”是(或曾经是)许多明显不正确(或曾经)不正确的做法。
    • 在 IE11 中,如果我输入 &lt;!DOCTYPE svg xmlns="www.w3.org/2000/svg"&gt; 它可以工作,但如果我拿走 xmlns 或将其更改为 &lt;!DOCTYPE svg xmlns="www.example.com"&gt; 它不起作用。这是为什么呢?
    • @RobertLongson:当您说“xmlns 属性”时,是否包括 xmlns:xlink?
    • 在使用 data-uri 时,“在 HTML 文档中嵌入 SVG”部分是否也适用于 css 文件?
    • @Marcel not 如果那些数据uri是image/svg+xml,通常是这样,那么答案的最后部分成立。
    【解决方案3】:

    我想添加两个答案,但我没有积分,我正在添加一个新答案。 在最近对 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" 加载到 HTML 中,但在 元素上无法识别文档级函数,例如 getElementById()。我认为这是因为它使用了 HTML 之外的 XMLHttpRequest XML 解析器。

    【讨论】:

      【解决方案4】:

      关于 SVG 版本属性 MDN WebDoc

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

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

      PS:SVG 2 远未成为标准。

      【讨论】:

      • 注意:以上仅适用于“version”属性,而不适用于“xmlns” xmlns 是 XML(不是 SVG)功能,因此在 HTML5 中(当不用作 XML/XHTML 时)它是不相关或不需要,但出于任何原因嵌入在 XML 中的 SVG 中
      猜你喜欢
      • 2021-09-07
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多