是虚元素和空元素相同吗?

7 浏览
0 Comments

是虚元素和空元素相同吗?

我自从90年代开始写HTML,但我刚刚发现了colgroupcol元素。根据MDN的介绍col是一个无内容元素,禁止使用结束标签。\n

\n标签省略:开始标签是必需的,但由于它是一个无内容元素,禁止使用结束标签。\n

\n我以前从未听说过无内容元素。MDN没有关于无内容元素的页面,但空元素页面上提到:\n

\n注意:在极少数情况下,空元素被称为无内容元素。这是一个不正确的名称,应该避免使用。\n

\n然而,W3规范只提到了无内容元素,从未提到空元素:\n

\n无内容元素是指其内容模型在任何情况下都不允许其具有内容的元素。无内容元素可以具有属性。\n

\n所以我想知道:\n

    \n

  1. 如果它们是同一种元素,是否应该把它们称为空元素而不是无内容元素?在这种情况下,W3规范是否已过时,不值得信任?或者即使过时,W3规范是否应该优先考虑?
  2. \n

  3. 如果它们不是同一种元素,
    是有效的语法还是应该是

    (没有斜杠),因为结束标签是禁止的?我可能对“结束标签”有误解,但我一直认为/>(如
    中的斜杠)是一种结束标签。
  4. \n

0
0 Comments

空元素和空元素不是同一个概念。在HTML 4.01中,空元素是指没有任何内容的元素,它们的内容声明为EMPTY。而HTML5草案中,对于空元素并没有明确的定义,只是提到了无内容的元素,称为“void elements”,并指出它们“不能有任何内容”。

因此,HTML5草案中的混淆导致了这个问题的出现。独立于此,重要的是要区分规范和解析规则实际应用中永远不能有任何内容的空/无内容元素和只是偶然具有空内容的元素,例如空的<p>元素(不良实践)和空的<td>元素(通常是不良实践,但有效且有时足够)。

作者并没有意识到有这么多文档,所以他以为自己看的是“规范”。感谢您指出这一点。

0
0 Comments

空元素(empty element)一词来自于SGML,这是HTML5之前的HTML标准所基于的标记语言。在SGML中,使用EMPTY关键字来表示内容模型为空的元素。HTML 4规范中对此进行了解释:

“元素的允许内容称为其内容模型。设计为没有内容的元素类型称为空元素。使用关键字“EMPTY”声明这种元素类型的内容模型。”

并举了img元素的例子来进行说明。

XML对“空元素”进行了不同的定义:

“[定义:没有内容的元素被称为空元素。”

这里的区别在于XML并没有说“空元素”是“其内容模型为空的元素”。相反,它只是说“空元素”是没有内容的元素。这不管文档类型或XML模式是否定义该特定元素必须为空都是如此;XML本身并没有这种限制。

另一个术语“空元素标签”用于描述常用的表示空元素的快捷语法“/>”。这种语法通常被称为“自闭合”语法。

“无效元素”是HTML5中的新术语。它与HTML5之前的“空元素”的定义相同,即一个元素只有一个开始标签,没有结束标签,并且不能有任何内容。虽然W3C的HTML5规范中没有提到“空元素”这个术语,但在一个相关文档中,使用了XML中描述的“空元素标签”这个术语:

“在HTML语法中,无效元素是始终为空且没有结束标签的元素。在HTML规范或扩展规范中列出的所有元素,必须在多语言标记中具有XML空元素标记的语法形式()。其他元素不能使用XML空元素标记语法。”

现代HTML标准似乎更倾向于XML的定义,并避免了以前的定义。这似乎很合适,因为现代HTML不再是SGML应用程序,而是一种独立的标记语言。所以总结一下:

空元素是指没有内容的元素,不管它们是否允许有内容。

无效元素是指不能有任何内容的元素。

此外,可以说所有的无效元素根据定义都是空元素,但空元素不一定代表无效元素。

至于你的问题的回答:

1. 如果它们是同一件事,是否应该将它们称为空元素而不是无效元素?在这种情况下,W3规范是否已过时,不可信赖?还是说即使过时,W3规范应该具有优先权?

像area、br、col和img等元素更准确地被称为无效元素,就像在HTML5中一样。它们也被认为是空的,但只是因为它们不能是“非空的”。我不知道为什么MDN上有一篇文章说“['无效元素']是一个不正确的名称,应该避免使用。”但它在大多数HTML参考中仍然使用这个名字。我认为没有理由不相信官方规范。

2. 如果它们不是同一件事,

是有效的语法还是应该是

(没有斜杠),因为结束标签是禁止的?也许我对“结束标签”的理解有错误,但我一直认为

(就像
)是一种结束标签。

之所以是有效的语法,是因为HTML5将其视为一种常用的标记无效元素的方式,这要归功于XHTML,并且禁止它将不必要地破坏许多可以作为HTML5验证的XHTML文档的兼容性。HTML5本身将

定义为没有意义(有一个特定的例外情况,这里不太相关),因此在实际上,HTML5中的

表示只有一个开始标签而没有结束标签的

,因此与

完全相同,尽管对XML友好。

0