Inhaltskategorien
Die meisten HTML-Elemente gehören zu einer oder mehreren Inhaltskategorien – diese Kategorien gruppieren Elemente, die gemeinsame Merkmale teilen. Dies ist eine lose Gruppierung (sie schafft tatsächlich keine Beziehung zwischen den Elementen dieser Kategorien), aber sie helfen, das Verhalten der Kategorien und ihre zugehörigen Regeln zu definieren und zu beschreiben. Es ist möglich, dass Elemente zu keiner dieser Kategorien gehören.
Die Inhaltskategorien werden verwendet, um das Inhaltsmodell von Elementen zu definieren, mit anderen Worten, welche Nachkommen jedes Element haben kann. Zum Beispiel kann das <p>-Element nur Textinhalt enthalten, während das <div>-Element Flussinhalt enthalten kann. Einige Elemente wie <ins> haben ein transparentes Inhaltsmodell.
Es gibt sieben Hauptinhaltskategorien, die mit dem Venn-Diagramm unten zusammengefasst werden können:

Hinweis: Eine detailliertere Diskussion dieser Inhaltskategorien und ihrer vergleichenden Funktionalitäten liegt außerhalb des Umfangs dieses Artikels; dafür können Sie die relevanten Teile der HTML-Spezifikation lesen.
Metadateninhalt
Elemente, die zur Kategorie des Metadateninhalts gehören, modifizieren die Darstellung oder das Verhalten des restlichen Dokuments, richten Links zu anderen Dokumenten ein oder vermitteln andere außerband Informationen. Alles im <head>, einschließlich <title>, <link>, <script>, <style> und dem weniger genutzten <base>, ist Metadateninhalt. Es gibt ein <meta>-Element für Metadaten, die nicht durch diese anderen Elemente dargestellt werden können.
Die Metadatenelemente sind:
Einige dieser Elemente gehören zu mehr als einer Inhaltskategorie. Zum Beispiel ist <script> ein Mitglied der Metadaten-, Fluss- und Textinhaltskategorien und ist ein skriptunterstützendes Element; <script> kann verwendet werden, wo Metadateninhalt, Textinhalt oder skriptunterstützende Elemente erwartet werden.
Flussinhalt
Flussinhalt ist eine breite Kategorie, die die meisten Elemente umfasst, die innerhalb des <body>-Elements stehen können, einschließlich der Überschriftselemente, Abschnittselemente, Textelelemente, Einbettungselemente, interaktiven Elemente und formularelevanten Elemente. Es schließt auch Textknoten ein (aber nicht solche, die nur aus Leerzeichen bestehen).
Die Flusselemente sind:
<a><abbr><address><article><aside><audio><b><bdi><bdo><blockquote><br><button><canvas><cite><code><data><datalist><del><details><dfn><dialog><div><dl><em><embed><fieldset><figure><footer><form><geolocation><h1>-<h6><header><hgroup><hr><i><iframe><img><input><ins><kbd><label><main><map><mark><math><menu><meter><nav><noscript><object><ol><output><p><picture><pre><progress><q><ruby><s><samp><script><search><section><select><slot><small><span><strong><sub><sup><svg><table><template><textarea><time><u><ul><var><video><wbr>- Autonome benutzerdefinierte Elemente
- Reiner Text
Einige andere Elemente gehören zu dieser Kategorie, aber nur, wenn eine bestimmte Bedingung erfüllt ist:
Abschnittsinhalt
Der Abschnittsinhalt, eine Teilmenge des Flussinhalts, erzeugt einen Abschnitt in der aktuellen Gliederung, der den Umfang der <header>- und <footer>-Elemente definiert.
Die Abschnittselemente sind:
Überschrifteninhalt
Der Überschrifteninhalt, eine Teilmenge der Flussinhalte, definiert den Titel eines Abschnitts. Diese Definition gilt sowohl für Abschnitte, die durch ein explizites Abschnittsinhaltelement markiert sind, als auch für solche, die implizit durch den Überschrifteninhalt selbst definiert sind.
Die Überschriftselemente sind:
Hinweis:
Obwohl es wahrscheinlich ist, dass Überschrifteninhalt enthalten ist, ist das <header> selbst kein Überschrifteninhalt.
Textinhalt
Der Textinhalt, eine Teilmenge des Flussinhalts, bezieht sich auf den Text und die Markierungen innerhalb eines Dokuments. Folgen von Textinhalt bilden Absätze.
Die Textelemente sind:
<abbr><audio><b><bdi><bdo><br><button><canvas><cite><code><data><datalist><dfn><em><embed><i><iframe><img><input><kbd><label><mark><math><meter><noscript><object><output><picture><progress><q><ruby><s><samp><script><select><slot><small><span><strong><sub><sup><svg><template><textarea><time><u><var><video><wbr>- Autonome benutzerdefinierte Elemente
- Reiner Text
Einige andere Elemente gehören zu dieser Kategorie, aber nur, wenn eine bestimmte Bedingung erfüllt ist:
<a>, wenn es nur Textinhalt enthält<area>, wenn es ein Nachfahre eines<map>-Elements ist<del>, wenn es nur Textinhalt enthält<ins>, wenn es nur Textinhalt enthält<link>, wenn dasitemprop-Attribut vorhanden ist<map>, wenn es nur Textinhalt enthält<meta>, wenn dasitemprop-Attribut vorhanden ist
Eingebetteter Inhalt
Eingebetteter Inhalt, eine Teilmenge des Flussinhalts, importiert eine andere Ressource oder fügt Inhalt aus einer anderen Markupsprache oder einem anderen Namensraum in das Dokument ein.
Die eingebetteten Inhaltslemente sind:
Interaktiver Inhalt
Interaktiver Inhalt, eine Teilmenge des Flussinhalts, umfasst Elemente, die speziell für die Benutzerinteraktion entwickelt wurden.
Die interaktiven Inhaltselemente sind:
Einige Elemente gehören nur unter bestimmten Bedingungen zu dieser Kategorie:
<a>, wenn dashref-Attribut vorhanden ist<audio>, wenn dascontrols-Attribut vorhanden ist<img>, wenn dasusemap-Attribut vorhanden ist<input>, wenn dastype-Attribut nicht im versteckten Zustand ist<object>, wenn dasusemap-Attribut vorhanden ist<video>, wenn dascontrols-Attribut vorhanden ist
Fassbarer Inhalt
Fassbarer Inhalt ist Inhalt, der weder leer noch verborgen ist; er ist Inhalt, der gerendert und substanziell ist. Fassbarer Inhalt wird nicht zur Definition von Inhaltsmodellen verwendet, sondern zur Definition einer allgemeinen Regel: Elemente, deren Inhaltsmodell beliebigen Flussinhalt oder Textinhalt erlaubt, sollten mindestens einen Knoten in ihrem Inhalt haben, der fassbarer Inhalt ist und nicht das hidden-Attribut spezifiziert hat.
Die fassbaren Elemente sind:
<a><abbr><address><article><aside><b><bdi><bdo><blockquote><button><canvas><cite><code><data><del><details><dfn><div><em><embed><fieldset><footer><figure><form><iframe><img><ins><kbd><label><main><map><mark><math><meter><nav><object><p><picture><pre><progress><q><ruby><s><samp><search><section><select><small><span><strong><sub><sup><svg><table><textarea><time><u><var><video>- Autonome benutzerdefinierte Elemente
- Reiner Text, der nicht inter-element whitespace ist
Einige Elemente gehören nur unter bestimmten Bedingungen zu dieser Kategorie:
<audio>, wenn dascontrols-Attribut vorhanden ist<dl>, wenn die Kinder des Elements mindestens eine Name-Wert-Gruppe enthalten<input>, wenn das type-Attribut nicht im versteckten Zustand ist<ol>, wenn seine Kinder mindestens ein<li>-Element enthalten<ul>, wenn seine Kinder mindestens ein<li>-Element enthalten
Elemente ohne Kategorie
Mehrere Elemente gehören zu keiner Inhaltskategorie. Dazu gehören:
Skriptunterstützende Elemente
Skriptunterstützende Elemente sind Elemente, die nicht direkt zur gerenderten Ausgabe eines Dokuments beitragen. Stattdessen dienen sie dazu, Skripte zu unterstützen, entweder durch das direkte Enthalten oder Spezifizieren von Skriptcode oder durch das Spezifizieren von Daten, die von Skripten verwendet werden. Fast alle Elemente, einschließlich derjenigen, die nur spezifische Elemente aufnehmen (wie <ul>, das <li>-Elemente enthält), können skriptunterstützende Elemente enthalten.
Die skriptunterstützenden Elemente sind:
Formularassoziierter Inhalt
Der formularassoziierte Inhalt ist eine Teilmenge des Flussinhalts, die aus Elementen besteht, die einen Formularbesitzer haben und überall dort verwendet werden können, wo Flussinhalte erwartet werden. Ein Formularbesitzer ist entweder das umgebende <form>-Element oder das <form>, dessen id im form-Attribut des Elements angegeben ist.
Die formularassoziierten Elemente sind:
Diese Kategorie enthält mehrere Unterkategorien:
- aufgelistet
-
Elemente, die in den Sammlungen
HTMLFormElement.elementsundHTMLFieldSetElement.elementsaufgeführt sind. Beinhaltet<button>,<fieldset>,<input>,<object>,<output>,<select>, und<textarea>. - einreichbar
-
Elemente, die zur Konstruktion des Formulardatensatzes verwendet werden können, wenn das Formular übermittelt wird. Beinhaltet
<button>,<input>,<select>, und<textarea>. - zurücksetzbar
-
Elemente, die betroffen sein können, wenn ein Formular zurückgesetzt wird. Beinhaltet
<input>,<output>,<select>, und<textarea>. - autocapitalize-and-autocorrect-erbend
-
Elemente, die die Attribute
autocapitalizeundautocorrectvon ihrem Formularbesitzer übernehmen. Beinhaltet<button>,<fieldset>,<input>,<output>,<select>, und<textarea>. - beschriftbar
-
Elemente, die mit
<label>-Elementen assoziiert werden können. Beinhaltet<button>,<input>(alle Typen außerhidden),<meter>,<output>,<progress>,<select>, und<textarea>.
Transparentes Inhaltsmodell
Zusätzlich zu den aufgelisteten Inhaltskategorien kann auch das Inhaltsmodell eines Elements als "transparent" definiert sein. Wenn der zulässige Inhalt eines Elements X "transparent" ist, schauen wir auf das Elternelement von X. Wir schneiden den zulässigen Inhalt des Elternelements von X mit den Inhaltskategorien von X, und das Ergebnis ist, was "transparent" in diesem Kontext bedeutet. Wenn das Elternelement von X ebenfalls ein transparentes Inhaltsmodell hat, gehen wir den Baum weiter hinauf, bis wir ein nicht-transparentes Inhaltsmodell finden. Wenn es kein solches Elternelement gibt, bedeutet "transparent" "Flussinhalt".
Zum Beispiel akzeptiert ein <ruby>-Element Textinhalt. Das <ins>-Element gehört zur Kategorie des Textinhalts, wenn es nur Textinhalt enthält. Daher kann ein <ins>-Element innerhalb eines <ruby>-Elements platziert werden. Der erlaubte Inhalt des <ins>-Elements ist "transparent", was, wenn es in <ruby> verschachtelt ist, "Textinhalt" bedeutet. <rt>-Elemente sind jedoch kein Textinhalt. Daher kann ein <rt>-Element nicht innerhalb dieses <ins>-Elements verschachtelt werden, auch wenn sowohl <rt> als auch <ins> innerhalb von <ruby> sein können und <ins> "transparent" ist.
<ruby>
Text before
<ins>
<!-- Invalid: rt cannot be placed inside ins here -->
<rt>Pronunciation</rt>
</ins>
</ruby>
<ruby>
Text before
<!-- Valid: ins can be inside ruby, and rt can be inside ruby -->
<ins>Inserted text</ins>
<rt>Pronunciation</rt>
</ruby>
<ruby>
Text before
<!-- Valid: rt can be inside ruby, and ins can be inside rt -->
<rt><ins>Pronunciation</ins></rt>
</ruby>
Transparent ist ein Inhaltsmodell, keine Inhaltskategorie, es definiert also nur, was ein Element enthalten kann, nicht, wo das Element platziert werden kann. Das heißt, wenn man die Zulässigkeit der Kinder eines Elements bestimmt, kann man nicht "durch" transparente Kinder hindurchsehen. Zum Beispiel akzeptiert ein <ul>-Element nur <li>-Elemente und skriptunterstützende Elemente und erlaubt keine <del> oder <ins>, selbst wenn die <del> nur <li>-Elemente enthalten.
<ul>
<del>
<li>Oranges</li>
<li>Toilet paper</li>
</del>
<li>Toothpaste</li>
</ul>
<ul>
<li><del>Oranges</del></li>
<li><del>Toilet paper</del></li>
<li>Toothpaste</li>
</ul>