我从90年代开始就一直在写HTML,但我刚刚发现了这些colgroup和col元素.根据MDN,col是一个空元素,禁止结束标记.
标记省略:开始标记是必需的,但由于它是一个void元素,因此禁止使用结束标记.
我之前从未听说过虚空元素.MDN没有关于void元素的页面,但空元素页面显示:
注意:在极少数情况下,空元素称为void元素.这是一个不正确的名称,应该避免.
但是,W3规范仅涉及void元素,并且从不提及空元素:
void元素是一个元素,其内容模型在任何情况下都不允许它拥有内容.Void元素可以具有属性.
所以我想知道:
<col span="2" />有效的语法还是应该是<col span="2">(没有斜杠)因为结束标记是被禁止的?我可能错误地认为"结束标记",但我一直认为/>(在<br />和中<img />)是一种结束标记.Bol*_*ock 13
术语"空元素"来自SGML,HTML5之前的HTML标准基于SGML,其中EMPTY关键字用于表示具有空内容模型的元素.以下是HTML 4规范所说的内容:
元素的允许内容称为其内容模型.设计为没有内容的元素类型称为空元素.使用关键字"EMPTY"声明此类元素类型的内容模型.
使用img元素的示例声明:
此示例说明了空元素类型的声明:
Run Code Online (Sandbox Code Playgroud)<!ELEMENT IMG - O EMPTY>
- 声明的元素类型是IMG.
- 连字符和后面的"O"表示可以省略结束标记,但是与内容模型"EMPTY"一起,这被加强到必须省略结束标记的规则.
- "EMPTY"关键字表示此类型的实例不得包含内容.
XML以不同的方式定义"空元素":
[定义:没有内容的元素被认为是空的.]
这里的区别在于XML并没有说"空元素"是"内容模型为空的元素".相反,它只是说"空元素"是没有内容的元素.这与文档类型或XML模式是否定义该特定元素是否必须没有内容无关; XML本身就没有这样的限制.
附加术语"空元素标记"用于描述/>通常用于指示空元素的快捷语法(同样,无论它们是否为空,根据定义).这通常也称为"自闭合"语法.
术语"void element"是HTML5的新增内容.它具有与"空元素"的HTML5前定义相同的定义:即,仅具有开始标记,没有结束标记且不能具有任何内容的元素.虽然W3C HTML5规范没有引用术语"空元素",但XML中描述的术语"空元素标记"用于相关文档:
在HTML语法中,void元素是始终为空且永远不具有结束标记的元素.在HTML规范或扩展规范中列为void的所有元素,必须在多语言标记中具有XML 空元素标记(
<foo/>)的语法形式.其他元素绝不能使用XML空元素标记语法.
似乎现代HTML标准现在更喜欢XML定义并避开以前的定义.这似乎是恰当的,因为现代的HTML不再是SGML应用程序,而是一个标记语言在自己的权利.(它也不是XML,但这就是多语言标记发挥作用的地方.)
所以,总结一下:
另外,可以说根据定义,所有void元素都是空元素,但是空元素不一定表示void元素.
在回答你的问题时:
如果这些是相同的东西,它们应该被称为空元素而不是空元素吗?在这种情况下,W3规格是否过时且不值得信任?或者W3规格是否优先,即使它已经过时了?
元件,例如area,br,col和img更精确地称为空隙元件,如在HTML5.它们也被认为是空的,但仅仅因为它们不能"非空".
我不知道为什么MDN有一篇文章说"['Void elements']是一个不正确的名字,应该避免." 当它在大多数HTML引用中使用该名称时.我认为没有理由不相信官方规格.
如果它们不是同一个东西,是
<col span="2" />有效的语法还是应该是<col span="2">(没有斜杠)因为结束标记是被禁止的?我可能错误地认为"结束标记",但我一直认为/>(在<br />和中<img />)是一种结束标记.
<col span="2" />这只是有效的语法,因为HTML5认为它是一种通过XHTML标记void元素的流行方式,并且不允许它会不必要地破坏与许多XHTML文档的验证兼容性,否则这些文档将验证为HTML5.HTML5本身定义/>为没有意义(有一个特定的例外,这里没有真正相关),所以实际上<col span="2" />HTML5只代表一个col只有一个开始标记而没有结束标记,因此<col span="2">尽管是XML友好的.
| 归档时间: |
|
| 查看次数: |
2930 次 |
| 最近记录: |