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

Cel*_*tas 5 html xml standards html5

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

Pau*_*ott 9

请参阅HTML5中的Are(非空)自动关闭标签是否有效?,尤其是第三个答案.

这在我脑海里是新鲜的,因为我被这个烧了.我有

<div id="SearchResults" />
<input type="hidden" id="SearchResultId" />
Run Code Online (Sandbox Code Playgroud)

因为自闭项标签中的结尾斜杠被忽略,所以在DOM中变成了这样的东西

<div id="SearchResults">
    <input type="hidden" id="SearchResultId">
</div>
Run Code Online (Sandbox Code Playgroud)

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


Chu*_*uck 7

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

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

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

<!ELEMENT IMG - O EMPTY -- Embedded image -->
Run Code Online (Sandbox Code Playgroud)

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

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

因此,在XML语法中,您可以使用自闭合标记,而在html语法中,您可以省略某些指定元素上的开始或结束标记.

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