内容类别

大多数 HTML 元素属于一个或多个 **内容类别** - 这些类别对共享共同特征的元素进行分组。这是一个松散的分组(它实际上并没有在这些类别的元素之间创建关系),但它们有助于定义和描述类别的共享行为及其关联规则,尤其是在您遇到其复杂细节时。元素也可能不属于这些类别中的 *任何* 一个。

内容类别有三种

  • 主要内容类别,描述许多元素共享的通用规则。
  • 表单相关内容类别,描述表单相关元素共有的规则。
  • 特定内容类别,描述一些元素(有时仅在特定上下文中)共享的罕见类别。

注意:本文档不包含对这些内容类别及其比较功能的详细讨论;如需了解详细信息,您可以阅读HTML 规范的相关部分

A Venn diagram showing how the various content categories interrelate. The following sections explain these relationships in text.

主要内容类别

元数据内容

属于元数据内容类别的元素会修改文档其余部分的呈现方式或行为,设置到其他文档的链接,或传达其他带外信息。所有位于<head> 中的内容,包括<title><link><script><style>以及较少使用的<base>,都是元数据内容。对于无法通过这些其他元素表示的元数据,可以使用<meta>元素。

元数据元素包括:

某些元素属于多个内容类别。例如,<script>是元数据、流和短语内容类别的成员,并且是一个支持脚本的元素;在期望元数据内容、短语内容或支持脚本的元素的地方,都可以使用<script>

流内容

流内容是一个广泛的类别,包含大多数可以放在<body>元素内部的元素,包括标题元素、分段元素、短语元素、嵌入元素、交互式元素和表单相关元素。它还包括文本节点(但不包括仅由空白字符组成的文本节点)。

流元素包括:

其他一些元素也属于此类别,但前提是必须满足特定条件

分段内容

分段内容是流内容的一个子集,用于在当前大纲中创建一个部分,定义<header><footer>元素的作用域。

分段元素包括:

标题内容

标题内容是流内容的一个子集,用于定义某个部分的标题。此定义既适用于由显式分段内容元素标记的部分,也适用于由标题内容本身隐式定义的部分。

标题元素包括:

注意:尽管<header>很可能包含标题内容,但它本身并不是标题内容。

短语内容

短语内容是流内容的一个子集,指的是文档中的文本和标记。短语内容的序列构成段落。

短语元素包括:

其他一些元素也属于此类别,但前提是必须满足特定条件

嵌入内容

嵌入内容是流内容的一个子集,用于将另一个资源导入或将来自另一种标记语言或命名空间的内容插入文档中。

嵌入内容元素包括:

交互式内容

交互式内容是流内容的一个子集,包含专门为用户交互而设计的元素。

交互式内容元素包括:

某些元素仅在特定条件下属于此类别

可感知内容

当内容既不为空也不隐藏时,它就是可感知的;它是呈现且具有实质内容的内容。模型为流内容的元素应至少具有一个可感知的节点。

可感知元素包括:

某些元素仅在特定条件下属于此类别

  • <audio>,如果存在controls属性
  • <dl>,如果元素的子元素包含至少一个名称-值组
  • <input>,如果type属性未处于隐藏状态
  • <ol>,如果其子元素包含至少一个<li>元素
  • <ul>,如果其子元素包含至少一个<li>元素

表单关联内容

表单关联内容是流内容的一个子集,包含具有表单所有者(由form属性公开)的元素,并且可以在期望流内容的任何地方使用。表单所有者要么是包含的<form>元素,要么是其id在form属性中指定的元素。

表单关联元素包括:

此类别包含多个子类别

已列出

form.elementsfieldset.elements集合中列出的元素。包含<button><fieldset><input><object><output><select><textarea>

可标记的

可以与<label>元素关联的元素。包含<button><input><meter><output><progress><select><textarea>

可提交的

在提交表单时,可用于构建表单数据集的元素。包含<button><input><object><select><textarea>

可重置的

重置表单时可能受到影响的元素。包含<input><output><select><textarea>

次要内容类别

还有一些元素的次要分类,了解这些分类也很有用。

支持脚本的元素

支持脚本的元素是指不直接影响文档呈现输出的元素。相反,它们用于支持脚本,方法是直接包含或指定脚本代码,或指定脚本将使用的数据。

支持脚本的元素包括:

透明内容模型

如果元素具有透明内容模型,则其内容必须以结构化的方式组织,即使删除透明元素并将其替换为子元素,也应是有效的 HTML。

例如,<del><ins>元素是透明的

html
<p><del>Shopping</del> <ins>Returns</ins> list</p>
<ul>
  <del>
    <li>Oranges</li>
    <li>Toilet paper</li>
  </del>
  <li>Toothpaste</li>
</ul>

如果删除了这些元素,则此片段仍然是有效的 HTML(即使不是正确的英语)。

html
<p>Shopping Returns list</p>
<ul>
  <li>Oranges</li>
  <li>Toilet paper</li>
  <li>Toothpaste</li>
</ul>