为什么<img>标签未在HTML中关闭?

ѺȐe*_*llү 43 html xhtml html5 image

为了好奇,为什么< img >标签没有在HTML中关闭?

<img src="smiley.gif" alt="Smiley face" height="42" width="42">
Run Code Online (Sandbox Code Playgroud)

我还注意到< img >标签在XHTML中明确关闭...

<img src="smiley.gif" alt="Smiley face" height="42" width="42"/>
Run Code Online (Sandbox Code Playgroud)

W3Schools: 图片标签

Que*_*tin 41

从历史上看,HTML一直基于SGML,允许在某些条件下省略标签.

由于该<img>元素不能包含任何子节点,因此它被定义为EMPTY并且禁止结束标记(因为它没有用处).

XHTML是用XML表示的HTML,XML不支持可选或禁用标记(虽然它允许自闭标记替换开始+结束标记对),因此必须在那里明确地关闭它.

HTML 5向后兼容基于SGML的HTML版本.

  • @TinaChen - 浏览器在格式错误的HTML上执行错误恢复**.使用验证程序测试HTML错误.不要依赖浏览器来报告它们. (4认同)
  • 从历史上看,`<img>`标签最初是以快速而肮脏的方式定义和实现的,后来正式(并且只是正式)改进为SGML语法.没有真正的HTML实现是基于SGML的. (2认同)

kmo*_*moe 17

<img>标签代表什么被称为一个空元素(见HTML5规范),所谓的,因为它不能有任何内容(不像,说<a><div>).因此,没有语法上的理由为什么它需要在HTML中关闭.

但是,XHTML基于XML,每个标记都需要关闭.


Jos*_*ort 5

这就是所谓的 void 元素,意思是该元素不能有任何内容(但可以有属性)。 HTML5 规范对 void 元素有这样的说法:

如果元素是空元素之一,或者元素是外来元素,则可能有一个“/”(U+002F)字符。这个字符对空元素没有影响

所以没有真正的理由拥有单个“/”(U+002F)字符,但如果包含它,它不会破坏任何东西。