Bis HTML 4.01 wurden HTML-Elemente grundsätzlich den beiden Gruppen Block- und Inline-Elemente zugeordnet.
Block-Elemente (engl. block-level elements) sind dadurch gekennzeichnet, dass sie standardmäßig einen Zeilenumbruch vor und nach sich erzwingen. Sie stehen dann sozusagen als einzelner Block in einer Zeile und nehmen die gesamte Breite des Viewports ein.. Block-Elemente können nur Nachfahre des body-Elements oder eines anderen Block-Elements sein. Sie entsprechen in HTML5 in weiten Teilen der Kategorie flow content.
Inline-Elemente (engl. inline elements) sind dadurch gekennzeichnet, dass sie standardmäßig keinen Zeilenumbruch erzwingen. Sie befinden sich somit innerhalb des Text-Flusses. Inline-Elemente können Nachfahre eines Block-Elements oder eines anderen Inline-Elements sein. Sie entsprechen in HTML5 in weiten Teilen der Kategorie phrasing content.
HTML-Elemente können hinsichtlich des Inhalts, den sie enthalten dürfen, kategorisiert werden:
siehe Auflistung mittels interaktive Kategorien
Die Kategorie-Einteilung der Elemente erfolgt so, dass man die Kategorie so genau wie möglich angibt. Wenn es für ein Element nur heißt, dass es zum flow content gehört, dann bedeutet das, dass eine genauere Angabe nicht möglich ist und dass es damit nicht in einer der Teilmengen zu finden ist. Zum Beispiel heißt es bei fieldset: Darf vorkommen in allen Elementen, die flow content als Inhalt erlauben. Diese Formulierung schließt Elemente wie p als Elternelement für fieldset aus, die nur eine Teilmenge von flow content, nämlich phrasing content, als Inhalt gestatten.
Metadaten (engl. metadata) beeinflussen das gesamte Dokument („die gesamte HTML-Seite“). Dazu zählt beispielsweise das Einbinden externer CSS-Dateien.
Elemente dieser Kategorie: base, link, meta, noscript, script, style, template und title
flow content (engl. flow) enthält in der Regel Text oder phrasing content.
Elemente dieser Kategorie: a, abbr, address, article, aside, audio, b, bdo, bdi, blockquote, br, button, canvas, cite, code, command, data, datalist, del, details, dfn, div, dl, em, embed, fieldset, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hr, i, iframe, img, input, ins, kbd, keygen, label, main, map, mark, math, menu, meter, nav, noscript, object, ol, output, p, pre, progress, q, ruby, s, samp, script, section, select, small, span, strong, sub, sup, svg, table, template, textarea, time, ul, var, video, wbr und einfacher Text.
Überschriften-Elemente (engl. headings) beschreiben einen Abschnitt. Der Abschnitt kann entweder explizit über Elemente zur Aufteilung beschrieben oder durch die Überschrift selbst begonnen werden.
Elemente dieser Kategorie: h1, h2, h3, h4, h5 und h6
Elemente zur Aufteilung (engl. sectioning):
Elemente dieser Kategorie: article, aside, nav und section
phrasing content differenziert Formulierung und Darstellungsebene ihres Inhalts.
Elemente dieser Kategorie: abbr, audio, b, bdo, br, button, canvas, cite, code, command, datalist, dfn, em, embed, i, iframe, img, input, kbd, keygen, label, mark, math, meter, noscript, object, output, progress, q, ruby, samp, script, select, small, span, strong, sub, sup, svg, textarea, time, var, video, wbr und einfacher Text, wobei der Text nicht ausschließlich aus Whitespace bestehen sollte
embedded content (engl. für eingebette Inhalte) sind Multimedia-Dateien, die nicht direkt Teil der Webseite sind. So können Inhalte aus anderen Quellen in das aktuelle Dokument geladen werden.
Elemente dieser Kategorie: audio, canvas, embed, iframe, img, math, object, svg und video
nteraktive Elemente (engl. interactive) dienen der Nutzerinteraktion und haben ein browsereigenes Standardverhalten, das eine bestimmte Funktionalität zur Verfügung stellt.
Elemente dieser Kategorie: a (mit href-Attribut), button, details, embed, iframe, keygen, label, select und textarea