是虚元素和空元素相同吗?
是虚元素和空元素相同吗?
我自从90年代开始写HTML,但我刚刚发现了colgroup
和col
元素。根据MDN的介绍,col
是一个无内容元素,禁止使用结束标签。\n
\n标签省略:开始标签是必需的,但由于它是一个无内容元素,禁止使用结束标签。\n
\n我以前从未听说过无内容元素。MDN没有关于无内容元素的页面,但空元素页面上提到:\n
\n注意:在极少数情况下,空元素被称为无内容元素。这是一个不正确的名称,应该避免使用。\n
\n然而,W3规范只提到了无内容元素,从未提到空元素:\n
\n无内容元素是指其内容模型在任何情况下都不允许其具有内容的元素。无内容元素可以具有属性。\n
\n所以我想知道:\n
- \n
- 如果它们是同一种元素,是否应该把它们称为空元素而不是无内容元素?在这种情况下,W3规范是否已过时,不值得信任?或者即使过时,W3规范是否应该优先考虑?
- 如果它们不是同一种元素,
是有效的语法还是应该是
/>
(如
和中的斜杠)是一种结束标签。
\n
\n
空元素(empty element)一词来自于SGML,这是HTML5之前的HTML标准所基于的标记语言。在SGML中,使用EMPTY关键字来表示内容模型为空的元素。HTML 4规范中对此进行了解释:
“元素的允许内容称为其内容模型。设计为没有内容的元素类型称为空元素。使用关键字“EMPTY”声明这种元素类型的内容模型。”
并举了img元素的例子来进行说明。
XML对“空元素”进行了不同的定义:
“[定义:没有内容的元素被称为空元素。”
这里的区别在于XML并没有说“空元素”是“其内容模型为空的元素”。相反,它只是说“空元素”是没有内容的元素。这不管文档类型或XML模式是否定义该特定元素必须为空都是如此;XML本身并没有这种限制。
另一个术语“空元素标签”用于描述常用的表示空元素的快捷语法“/>”。这种语法通常被称为“自闭合”语法。
“无效元素”是HTML5中的新术语。它与HTML5之前的“空元素”的定义相同,即一个元素只有一个开始标签,没有结束标签,并且不能有任何内容。虽然W3C的HTML5规范中没有提到“空元素”这个术语,但在一个相关文档中,使用了XML中描述的“空元素标签”这个术语:
“在HTML语法中,无效元素是始终为空且没有结束标签的元素。在HTML规范或扩展规范中列出的所有元素,必须在多语言标记中具有XML空元素标记的语法形式(
现代HTML标准似乎更倾向于XML的定义,并避免了以前的定义。这似乎很合适,因为现代HTML不再是SGML应用程序,而是一种独立的标记语言。所以总结一下:
空元素是指没有内容的元素,不管它们是否允许有内容。
无效元素是指不能有任何内容的元素。
此外,可以说所有的无效元素根据定义都是空元素,但空元素不一定代表无效元素。
至于你的问题的回答:
1. 如果它们是同一件事,是否应该将它们称为空元素而不是无效元素?在这种情况下,W3规范是否已过时,不可信赖?还是说即使过时,W3规范应该具有优先权?
像area、br、col和img等元素更准确地被称为无效元素,就像在HTML5中一样。它们也被认为是空的,但只是因为它们不能是“非空的”。我不知道为什么MDN上有一篇文章说“['无效元素']是一个不正确的名称,应该避免使用。”但它在大多数HTML参考中仍然使用这个名字。我认为没有理由不相信官方规范。
2. 如果它们不是同一件事,
和)是一种结束标签。