內容類型

每個 HTML 元素都要遵從該元素可擁有何種內容規則,這些規則被歸為幾種常用的內容模型(content model)。每個 HTML 元素都屬於零個、一個、或數個內容的模型,所有元素內容的設置規則都要遵從 HTML 一致性文件。

內容類型有三種類型:

  • 主要內容類型(Main content categories)描述了許多元素共享的常見內容規則(content rule)。
  • 表單相關內容類型(Form-related content categories)描述了表單相關元素的內容規則。
  • 特別內容類型(Specific content categories) 描述了只有少數元素共享的內容規則,有時甚至只有特定上下文。
Content_categories_venn.png

主要內容類型

資訊元內容(Metadata content)

屬於元資訊內容類型的元素修飾該文件其餘部分的陳述或行為、與其他文件建立連結、或是傳達其他外來(out of band)訊息。

屬於這個類型的元素有 <base> (en-US) This is an obsolete API and is no longer guaranteed to work. <command><link> (en-US)<meta> (en-US)<noscript> (en-US)<script><style> (en-US)<title> (en-US)

流內容(Flow content)

屬於流內容的元素通常含有文字或嵌入內容。它們是:<a><abbr> (en-US)<address> (en-US)<article> (en-US)<aside> (en-US)<audio> (en-US)<b> (en-US),<bdo> (en-US)<bdi> (en-US)<blockquote><br><button><canvas><cite> (en-US)<code> This is an obsolete API and is no longer guaranteed to work. <command><data> (en-US)<datalist> (en-US)<del> (en-US)<details> (en-US)<dfn> (en-US)<div><dl> (en-US)<em> (en-US)<embed> (en-US)<fieldset> (en-US)<figure> (en-US)<footer> (en-US)<form><h1> (en-US)<h2> (en-US)<h3> (en-US)<h4> (en-US)<h5> (en-US)<h6> (en-US)<header> (en-US)<hgroup> (en-US)<hr><i> (en-US)<iframe> (en-US)<img> (en-US)<input><ins> (en-US)<kbd> (en-US) <keygen> (en-US)<label> (en-US)<main> (en-US)<map> (en-US)<mark> (en-US)<math> (en-US)<menu> (en-US)<meter><nav><noscript> (en-US)<object> (en-US)<ol> (en-US)<output> (en-US)<p> (en-US)<pre> (en-US)<progress> (en-US)<q><ruby><s> (en-US)<samp> (en-US)<script><section> (en-US)<select> (en-US)<small> (en-US)<span> (en-US)<strong> (en-US)<sub> (en-US)<sup> (en-US)<svg> (en-US)<table><template><textarea> (en-US)<time><ul> (en-US)<var> (en-US)<video> (en-US)<wbr> (en-US) 還有文字。

在滿足特定條件下,某些元素也屬這個類型:

章節型內容(Sectioning content)

屬於章節型內容模型的元素會在該大綱裡面創立章節,這個章節會定義<header> (en-US)<footer> (en-US)、還有heading content的範圍。

屬於這個類型的元素有<article> (en-US)<aside> (en-US)<nav>還有<section> (en-US)

注意:不要把這個內容模型,和把內容與常規大綱隔開的 sectioning root 類別搞混。

標題型內容(Heading content)

标题内容 定义了分节的标题,而这个分节可能由一个明确的分节内容元素直接标记,也可能由标题本身隐式地定义。

標題型內容定義了章節的標題,不論該章節由明確的章節型內容元素標記、抑或由標題本身隱式定義。

屬於這個類型的元素有<h1> (en-US)<h2> (en-US)<h3> (en-US), <h4> (en-US)<h5> (en-US)<h6> (en-US)還有<hgroup> (en-US).

注意:儘管 <header> (en-US) 可能含有某些標題型內容,但它本身並不是。

段落型內容(Phrasing content)

段落型內容定義了文字、還有它包含的標記。Runs of phrasing content make up paragraphs.

屬於這個類型的元素有<abbr> (en-US)<audio> (en-US)<b> (en-US)<bdo> (en-US)<br><button><canvas><cite> (en-US)<code> This is an obsolete API and is no longer guaranteed to work. <command><datalist> (en-US)<dfn> (en-US)<em> (en-US)<embed> (en-US)<i> (en-US)<iframe> (en-US)<img> (en-US)<input><kbd> (en-US) <keygen> (en-US)<label> (en-US)<mark> (en-US)<math> (en-US)<meter><noscript> (en-US)<object> (en-US)<output> (en-US)<progress> (en-US)<q><ruby><samp> (en-US)<script><select> (en-US)<small> (en-US)<span> (en-US)<strong> (en-US)<sub> (en-US)<sup> (en-US)<svg> (en-US)<textarea> (en-US)<time><var> (en-US)<video> (en-US)<wbr> (en-US)以及空白字符在內的純文本。

在滿足特定條件下,某些元素也屬這個類型:

嵌入型內容(Embedded content)

嵌入型內容從其他標記語言或文件命名空間,導入資源或插入內容。 屬於這個類型的元素有<audio> (en-US)<canvas><embed> (en-US)<iframe> (en-US)<img> (en-US)<math> (en-US)<object> (en-US)<svg> (en-US)<video> (en-US)

互動型內容(Interactive content)

互動型內容包含專為用戶互動設計的元素。屬於這個類型的元素有 <a><button><details> (en-US)<embed> (en-US)<iframe> (en-US) <keygen> (en-US)<label> (en-US)<select> (en-US) 還有 <textarea> (en-US)

在滿足特定條件下,某些元素也屬這個類型:

捫及內容(Palpable content)

不是空白或隱藏的內容稱為捫及。屬於流內容或是Phrasing content模型的元素最少要有一個捫及的節點。

表單相關內容(Form-associated content)

表單相關內容包含了由 form 屬性顯露的 form owner 元素。form owner 是本身包含於 <form>、或 id 由 form 屬性指定的元素。

本類型包含某些子類別:

listed
Elements that are listed in the form.elements (en-US) and fieldset.elements IDL collections. Contains <button>, <fieldset> (en-US), <input>, <keygen> (en-US), <object> (en-US), <output> (en-US), <select> (en-US), and <textarea> (en-US).
labelable
與元素 <label> (en-US) 相關的元素。包含 <button><input> <keygen> (en-US)<meter><output> (en-US)<progress> (en-US)<select> (en-US)<textarea> (en-US)
submittable
用在建構送出時,資料就設定好的表單元素。包含 <button><input> <keygen> (en-US)<object> (en-US)<select> (en-US)<textarea> (en-US)
resettable
當表單重設時會受影響的元素。包含 <button><input> <keygen> (en-US)<output> (en-US)<select> (en-US)<textarea> (en-US)

透明內容模型(Transparent content model)

如果一個元素是透明內容模型,then its contents must be structured such that they would be valid HTML 5,就算該透明元素被移除、並由子元素取代。

例如,<del> (en-US)<ins> (en-US) 元素都是透明的:

<p>我們認為下面這些真理是<del><em>神聖不可否認</em></del><ins>不言而喻的。</ins></p>

這果這些元素被刪掉的話,這個分段依然在 HTML 有效(if not correct English)

<p>我們認為下面這些真理是<em>神聖不可否認</em>不言而喻的。</p>

其他內容模型

章節根(Sectioning root)