在HTML5中,为什么<img/>标记需要结束斜杠或结束标记?

时间:2014-04-16 22:44:08

标签: html xml html5 standards

我有点惊讶地发现<img>最后不需要结束斜杠。例如,<img src="my_pic.jpg" alt="picture of me">是有效的HTML5。我认为在HTML4之后有一个过渡到最后有一个斜杠,或者匹配的结束标记(例如<br>变为<br />)。目前的趋势是如何使HTML尽可能符合XML标准并让<img>而不是<img />违反此规定? <img>是否符合XHTML标准?

2 个答案:

答案 0 :(得分:9)

请参阅Are (non-void) self-closing tags valid in HTML5?,尤其是第三个答案。

这在我脑海中是新鲜的,因为我被这个烧伤了。我有

<div id="SearchResults" />
<input type="hidden" id="SearchResultId" />

,因为忽略了自闭标签中的结尾斜线,在DOM中变成了这样的东西

<div id="SearchResults">
    <input type="hidden" id="SearchResultId">
</div>

我是通过AJAX检索数据,将隐藏字段设置为返回值,然后将div的内部内容设置为其他一些返回的数据。我在这个过程中覆盖了隐藏的字段,花了几个小时来弄清楚为什么隐藏的字段值没有被回发。

答案 1 :(得分:8)

不,它不符合XML标准,并不意味着它。

HTML5有两种可以使用的语法。一种是基于XHTML的XML语法。另一个叫做“html”,它源自原始的基于SGML的HTML。实际上,XML和HTML实现都不支持SGML的所有功能,因此您最终会得到两种略有不同的子语言。

HTML从SGML获取的功能之一,但XML不是省略标记的想法。例如,以下是IMG元素的SGML定义:

<!ELEMENT IMG - O EMPTY -- Embedded image -->

第一个“ - ”表示需要开始标记。以下“O”表示可以省略结束标记。而“EMPTY”意味着该元素不能包含任何内容。

但是,进入XML 而不是HTML 的SGML功能之一是空结束标记,它允许您附加斜杠以立即关闭标记。这成为了XML的自动关闭标签功能。

因此,在XML语法中,您可以使用自动关闭标记,而在html语法中,您可以省略certain specified elements上的开始或结束标记。

至于“当前的趋势是否使HTML尽可能符合XML” - 嗯,这是一种意见和背景问题,但我不这么认为。这肯定是12年前的趋势,但随后XHTML几乎停滞不前,很多人只是说,“搞砸它,它无论如何都被解析为HTML。”如果你想使用XML工具对它们进行操作,那么使你的文档格式良好仍然有一些价值,但一般来说大多数人都不需要这样做。