gpt4 book ai didi

html - 空元素和空元素是一样的吗?

转载 作者:技术小花猫 更新时间:2023-10-29 12:15:04 29 4
gpt4 key购买 nike

我从 90 年代就开始编写 HTML,但我刚刚发现 colgroupcol元素。 According to MDN , col是一个void 元素,结束标记是forbidden

Tag omission: The start tag is mandatory, but, as it is a void element, the use of an end tag is forbidden.

我以前从未听说过 void 元素。 MDN 没有关于 void 元素的页面,但是 empty element page说:

Note: In very rare cases, empty elements are referred to as void elements. This is an improper name and should be avoided.

然而,W3 spec仅指空元素,从不提及空元素:

A void element is an element whose content model never allows it to have contents under any circumstances. Void elements can have attributes.

所以我想知道:

  1. 如果它们是同一事物,是否应该将它们称为空元素而不是空元素?在那种情况下,W3 规范是否已过时且不可信?还是应该优先考虑 W3 规范,即使它已经过时?
  2. 如果它们不是同一个东西,就是<col span="2" />有效的语法还是应该是 <col span="2"> (没有斜杠)因为禁止结束标签?我可能对“结束标记”有错误的想法,但我一直想到 /> (如 <br /><img /> )作为某种结束标记。

最佳答案

术语“空元素”来自 SGML,HTML5 之前的 HTML 标准基于该标准,其中 EMPTY 关键字用于表示具有空内容模型的元素。这是 HTML 4 spec 的内容说:

The allowed content for an element is called its content model. Element types that are designed to have no content are called empty elements. The content model for such element types is declared using the keyword "EMPTY".

使用 img 的示例声明元素:

This example illustrates the declaration of an empty element type:

<!ELEMENT IMG - O EMPTY>
  • The element type being declared is IMG.
  • The hyphen and the following "O" indicate that the end tag can be omitted, but together with the content model "EMPTY", this is strengthened to the rule that the end tag must be omitted.
  • The "EMPTY" keyword means that instances of this type must not have content.

XML以完全不同的方式定义“空元素”:

[Definition: An element with no content is said to be empty.]

这里的区别在于 XML 没有说“空元素”是“内容模型为空的元素”。相反,它只是说“空元素”是没有内容的元素。这与文档类型或 XML 模式是否必要地将特定元素定义为无内容无关; XML 本身没有这样的限制。

另一个术语“空元素标记”用于描述快捷语法 />通常用于指示空元素(同样,无论它们是否根据定义为空)。这通常也称为“自关闭”语法。

术语“空元素”是 HTML5 的新术语.它与“空元素”的 pre-HTML5 定义相同:即 只有 有开始标签,没有结束标签,并且不能有任何内容的元素。尽管 W3C HTML5 规范未引用术语“空元素”,但在 related document 中使用了 XML 中描述的术语“空元素标记” :

In the HTML syntax, void elements are elements that always are empty and never have an end tag. All elements listed as void in the HTML specification or in an extension spec, MUST in polyglot markup have the syntactic form of an XML empty-element tag (<foo/>). Other elements MUST NOT use the XML empty-element tag syntax.

似乎现代 HTML 标准现在更喜欢 XML 定义并避开以前的定义。这似乎很合适,因为现代 HTML 不再是 SGML 应用程序,而是本身的标记语言。 (它也不是 XML,但这正是多语言标记发挥作用的地方。)

总结一下:

  • 空元素没有任何内容的元素,无论它一开始是否允许包含内容。
  • 空元素不能有任何内容的元素。

另外,根据定义,可以说所有void元素都是空元素,但空元素并不一定代表void元素。

回答您的问题:

  1. >

    If these are the same thing, should they be referred to as empty elements and never as void elements? In that case, is the W3 spec outdated and not to be trusted? Or should the W3 spec take precedence, even if it is outdated?

    area等元素, br , colimg更准确地称为 void 元素,如在 HTML5 中。它们也被认为是空的,但这只是因为它们不能是“非空”的。

    我不知道为什么 MDN 有一篇文章说“['Void elements'] 是一个不正确的名称,应该避免”。无论如何,当它在大多数 HTML 引用中使用该名称时。我认为没有理由不相信官方规范。

  2. >

    If they are not the same thing, is <col span="2" /> valid syntax or should it be <col span="2"> (without the slash) because the end tag is forbidden? I may have the wrong idea of "end tag" but I've always thought of the /> (as in <br /> and <img />) to be an end tag of sorts.

    <col span="2" />是唯一有效的语法,因为 HTML5 将它识别为标记 void 元素的流行方式,这要归功于 XHTML,并且禁止它会不必要地破坏与许多 XHTML 文档的验证兼容性,否则这些文档将验证为 HTML5。 HTML5 本身定义了 />毫无意义(与 one specific exception 在这里并不真正相关),所以实际上 <col span="2" />在 HTML5 中只代表一个 col只有开始标签,没有结束标签,因此等同于 <col span="2"> , 尽管 XML 友好。

关于html - 空元素和空元素是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313426/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com