如何避免HTML1500使用嵌入式svg时,IE中的标签无法自动关闭警告?

the*_*orn 27 html5 internet-explorer svg

使用我认为非常标准的嵌入式svg:

<!DOCTYPE html>
<html>
<body style="padding:50px">

  <svg width="100" height="100">
    <circle cx="50" cy="50" r="20" />
  </svg>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

IE(11)给我一个警告"HTML1500:标签不能自动关闭.使用明确的结束标签." (DevTools,Console选项卡).

确实,如果我<circle..改为:

<circle cx="50" cy="50" r="20"></circle>
Run Code Online (Sandbox Code Playgroud)

警告消失了,但这对我来说很奇怪..

IE devtools偶尔会发现真正的非闭合标记错误,因此看到它从这种噪声中变得无用时会很难过.

有没有办法让IE变得快乐,而不是在各处添加结束标签?

更新:请注意,问题是关于"外国元素",而不是"虚空元素"(http://www.w3.org/html/wg/drafts/html/master/single-page.html#elements-2).<svg>不是自我关闭的(它被定义为属于Container元素类别:http://www.w3.org/TR/SVG/struct.html#SVGElement).

<circle..被定义为基本形状元素(http://www.w3.org/TR/SVG/shapes.html#CircleElement),这意味着它是自动关闭的.在阅读html5规范的8.1.2时:

其开始标记被标记为自闭的外来元素不能包含任何内容(因为没有结束标记,因此不能在开始标记和结束标记之间放置内容).其开始标记未标记为自闭合的外部元素可以包含文本,字符引用,CDATA部分,其他元素和注释,但文本不得包含字符U + 003C LESS-THAN SIGN(<)或不明确的&符号.

看来(我)像它说的内部标签<svg>元素(即外来元素)是自动关闭,如果SVG规格的说,他们是和定义的开始标记(8.1.2.1)时,#6说,/<tagname ... />是可选的,例如<br/>,但不是<circle ../>:

然后,如果元素是void元素之一,或者如果元素是外来元素,则可能存在单个U + 002F SOLIDUS字符(/).此字符对void元素没有影响,但在外部元素上,它将开始标记标记为自动关闭.

所以我认为该文件符合原样.我不确定使用结束</circle>标签是否符合要求.

小智 4

请参阅这个问题:( 非空)自闭合标签在 HTML5 中有效吗?

基本上,HTML5 并没有真正实现自闭合标签。相反,它具有空标签,例如<br>. 这也解释了为什么<script>当你使用外部js文件时不会自动关闭;<script>不是一个空元素。您编写的 SVG 实际上是 html,因此它必须遵循 HTML5 的规则,而不是 XML 的规则。

我认为您应该添加一个结束标签,以便您可以在控制台中获得更重要的警告/错误的好处。或者,如果您的页面是 XHTML,我相信您可以使用自闭圆标记。

  • ...再说一次,这不是一个关于 void 元素的问题,而是关于外部元素的问题——根据 8.1.2,它可以是自关闭的。第 8.1.2.1 节,项目符号 #6(同样是 html5 规范)表示,包含“/&gt;”结尾的外部元素(如 svg)将标签标记为自闭合。我看不到任何对“&lt;circle ..&gt;&lt;/circle&gt;”被允许作为外部元素的支持。如果您可以在规范中找到对该语法的支持,那么您应该将其包含在您的答案中(否则“必须遵循 HTML5 的规则”和“仅添加结束标记”似乎是矛盾的)。ps: xhtml 失败了,没有理智的人使用/d 它。 (4认同)