HTML5中的SVG - 什么时候是XML声明`<?xml version ="1.0"encoding ="UTF-8"?>`需要吗?

Vol*_* E. 18 xml html5 svg xml-declaration

在HTML5中使用SVG时:SVG是否<?xml version="1.0" encoding="UTF-8"?>需要XML声明

  • 作为图像通过<img>
  • 作为CSS background-image

这与" 是否需要'xmlns'和'版本'等SVG参数 "略有关系.两个答案和MDN Namespace崩溃课程根据需要阐明名称空间问题.

但SVG 1.1不包括XML声明的必要性声明或何时可以省略?

没有声明的示例:

<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
  <circle id="circle--red" cx="30" cy="30" r="30" fill="#f00"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

更新2016-07-04:澄清该问题是关于XML声明.谢谢@Martin Honnen! 更新2017-10-24:更改为"UTF-8"大写和SVGO优化属性顺序.

kjh*_*hes 14

对于HTML5,正确的DOCTYPE声明

<!DOCTYPE html> 
Run Code Online (Sandbox Code Playgroud)

需要为浏览器指定完整标准模式.

你所展示的,

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

是一个XML声明.这是可选的XML 1.0XML的1.1要求,但

  • XML 1.1没有得到广泛使用.
  • version="1.0"并且encoding="utf-8"无论如何都是默认值.

当您希望指定不同的编码时,请在HTML5中使用XML声明,尤其是当文件不仅可以由浏览器使用而且还可以由XML处理器使用时.

有关更多信息,请参阅HTML5:HTML和XHTML的词汇表和相关API.

关于内部SVG的注意事项(感谢@Quentin):嵌入HTML5文档中的SVG不应该有独立的XML声明.格式良好的XML中只允许一个 XML声明,如果在任何地方,它必须位于顶部.有关XML声明放置要求的更多详细信息,请参阅此答案.

关于外部SVG的注意事项(谢谢@Kaiido):通过HTML5 img或CSS 引用的SVG background-images必须有自己的XML声明,并且应该使用以下DOCTYPE声明:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
          "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
Run Code Online (Sandbox Code Playgroud)

关于外部SVG(更新)的注意事项(谢谢,@ user314159):

1.3.SVG命名空间和DTD中的可缩放矢量图形(SVG)2 W3C工作草案2015年07月09日:

本说明书中未提供DTD,因为已知使用DTD验证文档是有问题的.特别是,DTD不能优雅地处理名称空间,并且它们可以表达的约束范围是有限的.建议作者不要在SVG文档中包含DOCTYPE声明.

[重点补充.]

  • 仅供参考:SVG2工作草案/建议书建议书,对SVG文件完全没有DOCTYPE建议.但是,在XML中使用SVG确实需要xmlns,而在HTML中则不需要."本规范中未提供DTD,因为已知DTD用于验证文档是有问题的.特别是,DTD不能优雅地处理命名空间,并且它们可以表达的约束范围是有限的.建议作者做不包括SVG文档中的DOCTYPE声明." - https://www.w3.org/TR/2015/WD-SVG2-20150709/intro.html#Namespace (3认同)
  • 关于外部svg没有一个字?这就是问题的关键......"*作为内嵌图像通过`<img>`作为CSS background-images*".在这些情况下,你应该保留xml声明和doctype,它们应该是`<!DOCTYPE svg PUBLIC" - // W3C // DTD SVG 1.1 // EN""http://www.w3.org/Graphics/SVG/ 1.1/DTD/svg11.dtd">`顺便说一句. (2认同)

mik*_*kep 5

我在这里找到了信息https://oreillymedia.github.io/Using_SVG/extras/ch01-XML.html不需要 XML 和 DOCTYPE 声明...

仅当您使用非 Unicode 字符编码(从技术上讲,除了 UTF-8 或 UTF-16 以外的任何编码)时,才需要 XML 声明。

您还可以包含 SGML DOCTYPE 声明,但不再建议将其用于 SVG。