Inhaltskategorien
Die meisten HTML-Elemente gehören zu einer oder mehreren Inhaltskategorien – diese Kategorien gruppieren Elemente, die gemeinsame Merkmale aufweisen. Dies ist eine lose Gruppierung (es schafft tatsächlich keine Beziehung zwischen den Elementen dieser Kategorien), aber sie helfen, das gemeinsame Verhalten und die zugehörigen Regeln der Kategorien zu definieren und zu beschreiben. Es ist möglich, dass Elemente nicht Mitglied einer beliebigen dieser Kategorien sind.
Die Inhaltskategorien werden verwendet, um das Inhaltsmodell von Elementen zu definieren, das heißt, was jedes Element als Nachkommen haben kann. Zum Beispiel kann das <p>-Element nur formatierten Text enthalten, während das <div>-Element Flussinhalt enthalten kann. Einige Elemente, wie <ins>, haben ein transparentes Inhaltsmodell.
Es gibt sieben Hauptinhaltskategorien, die im folgenden Venn-Diagramm zusammengefasst werden können:

Hinweis: Eine detailliertere Diskussion dieser Inhaltskategorien und ihrer vergleichbaren Funktionalitäten fällt nicht in den Geltungsbereich dieses Artikels. Für weitere Informationen sollten Sie die relevanten Abschnitte der HTML-Spezifikation lesen.
Metadaten-Inhalt
Elemente, die zur Kategorie des Metadaten-Inhalts gehören, ändern die Präsentation oder das Verhalten des restlichen Dokuments, richten Links zu anderen Dokumenten ein oder vermitteln andere außerhalb des Bandes liegende Informationen. Alles im <head>, einschließlich <title>, <link>, <script>, <style> und dem seltener genutzten <base>, sind Metadaten-Inhalte. Es gibt ein <meta>-Element für Metadaten, die nicht von diesen anderen Elementen dargestellt werden können.
Die Metadaten-Elemente sind:
Einige dieser Elemente gehören zu mehr als einer Inhaltskategorie. Zum Beispiel ist <script> ein Mitglied der Kategorien Metadaten, Fluss und formatierten Text und ist ein skriptunterstützendes Element; <script> kann verwendet werden, wo Metadaten-Inhalte, formatierten Inhalte 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 Überschriftenelemente, Abschnittselemente, formatierten Elemente, einbettenden Elemente, interaktive Elemente und formularbezogene Elemente. Dazu gehören auch Textknoten (aber nicht diejenigen, 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
- Einfacher Text
Einige andere Elemente gehören nur dann zu dieser Kategorie, wenn eine bestimmte Bedingung erfüllt ist:
Abschnittsinhalt
Abschnittsinhalt, ein Teil von Flussinhalt, erstellt einen Abschnitt im aktuellen Umriss, der den Geltungsbereich von <header>- und <footer>-Elementen definiert.
Die Abschnittselemente sind:
Überschrifteninhalt
Überschrifteninhalt, ein Teil des Flussinhalts, definiert den Titel eines Abschnitts. Diese Definition gilt sowohl für Abschnitte, die durch explizite Abschnittsinhalts-Elemente markiert sind, als auch für solche, die implizit durch den Überschrifteninhalt selbst definiert sind.
Die Überschriftenelemente sind:
Hinweis:
Obwohl sie wahrscheinlich Überschrifteninhalt enthalten, ist das <header> selbst kein Überschrifteninhalt.
Formatierten Inhalt
Formatierten Inhalt, ein Teil des Flussinhalts, bezieht sich auf den Text und das Markup innerhalb eines Dokuments. Sequenzen von formatierten Inhalten bilden Absätze.
Die formatierten Elemente 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
- Einfacher Text
Einige andere Elemente gehören nur zu dieser Kategorie, wenn eine spezifische Bedingung erfüllt ist:
<a>, wenn es nur formatierten Inhalt enthält<area>, wenn es ein Nachkomme eines<map>-Elements ist<del>, wenn es nur formatierten Inhalt enthält<ins>, wenn es nur formatierten Inhalt enthält<link>, wenn dasitemprop-Attribut vorhanden ist<map>, wenn es nur formatierten Inhalt enthält<meta>, wenn dasitemprop-Attribut vorhanden ist
Eingebetteter Inhalt
Eingebetteter Inhalt, ein Teil des Flussinhalts, importiert eine andere Ressource oder fügt Inhalt aus einer anderen Auszeichnungssprache oder einem anderen Namensraum in das Dokument ein.
Die eingebetteten Inhaltselemente sind:
Interaktiver Inhalt
Interaktiver Inhalt, ein Teil des Flussinhalts, umfasst Elemente, die speziell für die Benutzerinteraktion konzipiert sind.
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
Greifbarer Inhalt
Greifbarer Inhalt ist Inhalt, der weder leer noch verborgen ist; es ist Inhalt, der gerendert und substanziell ist. Greifbarer Inhalt wird nicht zur Definition von Inhaltsmodellen verwendet, sondern um eine allgemeine Regel zu definieren: Elemente, deren Inhaltsmodell jeglichen Flussinhalt oder formatierten Inhalt erlaubt, sollten mindestens einen Knoten in ihren Inhalten haben, der greifbaren Inhalt darstellt und nicht das hidden-Attribut angegeben hat.
Die greifbaren 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
- Einfacher Text, der kein Zwischenraum zwischen den Elementen ist weißraum
Einige Elemente gehören nur unter spezifischen Bedingungen zu dieser Kategorie:
<audio>, wenn dascontrols-Attribut vorhanden ist<dl>, wenn die Kinder des Elements mindestens eine Namen-Wert-Gruppe enthalten<input>, wenn das type-Attribut nicht im versteckten Zustand ist<ol>, wenn ihre Kinder mindestens ein<li>-Element enthalten<ul>, wenn ihre Kinder mindestens ein<li>-Element enthalten
Elemente ohne Kategorie
Einige Elemente sind kein Mitglied irgendeiner Inhaltskategorie. Diese schließen ein:
Skriptunterstützende Elemente
Skriptunterstützende Elemente sind Elemente, die nicht direkt zum gerenderten Output eines Dokuments beitragen. Stattdessen dienen sie der Unterstützung von Skripten, entweder durch direkte Angabe oder Spezifizierung von Skriptcode oder durch Spezifizierung von Daten, die von Skripten genutzt werden. Fast alle Elemente, einschließlich derer, die nur spezifische Elemente zulassen (wie <ul>, das <li>-Elemente akzeptiert), können skriptunterstützende Elemente enthalten.
Die skriptunterstützenden Elemente sind:
Formularbezogener Inhalt
Formularbezogener Inhalt ist ein Teil des Flussinhalts und umfasst Elemente, die einen Formularbesitzer haben und überall dort verwendet werden können, wo Flussinhalt erwartet wird. Ein Formularbesitzer ist entweder das enthaltende <form>-Element oder das <form>, dessen id im form-Attribut des Elements angegeben ist.
Die formularbezogenen Elemente sind:
Diese Kategorie enthält mehrere Unterkategorien:
- aufgelistet
-
Elemente, die in den
HTMLFormElement.elementsundHTMLFieldSetElement.elements-Sammlungen aufgelistet sind. Beinhaltet<button>,<fieldset>,<input>,<object>,<output>,<select>und<textarea>. - einreichbar
-
Elemente, die zur Erstellung des Formulardatensatzes bei der Übermittlung des Formulars verwendet werden können. Beinhaltet
<button>,<input>,<select>und<textarea>. - zurücksetzbar
-
Elemente, die beim Zurücksetzen eines Formulars betroffen sein können. Beinhaltet
<input>,<output>,<select>und<textarea>. - Autokapitalisierungs- und Autokorrektur-vererbend
-
Elemente, die die
autocapitalize- undautocorrect-Attribute von ihrem Formularbesitzer erben. Beinhaltet<button>,<fieldset>,<input>,<output>,<select>und<textarea>. - etikettiert
-
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 gelisteten Inhaltskategorien kann das Inhaltsmodell eines Elements auch als "transparent" definiert werden. Wenn der erlaubte Inhalt eines Elements X "transparent" ist, dann betrachten Sie das übergeordnete Element von X. Wir schneiden den erlaubten Inhalt des Elternteils von X mit den Inhaltskategorien von X, und das Ergebnis ist das, was "transparent" in diesem Zusammenhang bedeutet. Wenn das übergeordnete Element von X ebenfalls ein transparentes Inhaltsmodell hat, gehen wir im Baum nach oben, bis wir ein nicht-transparentes Inhaltsmodell finden. Gibt es keinen solchen Elternteil, bedeutet "transparent" "Flussinhalt".
Beispielsweise akzeptiert ein <ruby>-Element formatierten Inhalt. Das <ins>-Element gehört zu der Kategorie des formatierten Inhalts, wenn es nur formatierten Inhalt 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, "formatierter Inhalt" bedeutet. Allerdings sind <rt>-Elemente kein formatierter Inhalt. Deshalb kann ein <rt>-Element nicht in dieses <ins>-Element verschachtelt werden, auch wenn sowohl <rt> als auch <ins> in <ruby> enthalten 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, daher definiert es nur, was ein Element enthalten kann, nicht, wo das Element platziert werden kann. Das heißt, bei der Bestimmung der Zulässigkeit der Kinder eines Elements können Sie nicht "durch" transparente Kinder sehen. Zum Beispiel akzeptiert ein <ul>-Element nur <li>-Elemente und skriptunterstützende Elemente und erlaubt nicht <del> oder <ins>, selbst wenn das <del> nur <li>-Elemente enthält.
<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>