HTML-Formatierungstool
Was ist HTML-Formatierung?
HTML-Formatierung bringt ungeordneten oder komprimierten Markup-Code in eine lesbare Struktur mit konsistenter Einrückung, Zeilenumbrüchen und klar erkennbaren Tag-Hierarchien. Das erleichtert Review, Debugging, Unterricht, Teamübergaben und das Finden von nicht geschlossenen Tags, falsch verschachtelten Elementen oder unübersichtlichen Attributen. Für Produktionsdateien kann das Gegenteil sinnvoll sein: Minifizierung entfernt überflüssige Leerzeichen, Kommentare und Umbrüche, um die Übertragung zu verkleinern. Das Werkzeug hilft beim Wechsel zwischen Lesbarkeit und kompakter Ausgabe, verändert aber nicht die semantische Qualität des HTML. Ungültige Struktur, Accessibility-Probleme oder unsichere eingebettete Inhalte müssen weiterhin separat geprüft werden. Besonders bei produktiven Daten oder Codebasen sollte das Ergebnis anschließend mit Parser, Tests oder Projektregeln geprüft werden.
Anleitung
So wird's verwendet
- Füge HTML-Code im linken Eingabefeld ein oder gib ihn ein
- Wähle die Einrückungsgröße und die maximale Zeilenlänge
- Klicke auf ‚Formatieren‘, um den Code zu verschönern, oder auf ‚Minify‘, um die Größe zu reduzieren
- Der formatierte Code wird auf der rechten Seite angezeigt (mit Syntaxhervorhebung)
- Klicke auf ‚Kopieren‘, um den Code in die Zwischenablage zu kopieren
Beschreibung der Optionen
Tastaturkürzel
- Ctrl + EnterFormatieren
- Ctrl + Shift + CErgebnis kopieren
Tipps zur Formatierung
- Das Formatieren kann defekte Verschachtelung oder verdächtige Inline-Skripts aufdecken, bereinigt HTML jedoch nicht und macht unsicheres Markup nicht sicher.
- Nutze Minify nur für die Auslieferung. Behalte lesbares Quell-Markup für Code-Reviews, Diffs und Barrierefreiheitsprüfungen.
Anwendungsfälle
Technisches Prinzip
Ein HTML-Formatter folgt dem Baumkonstruktions-Algorithmus des WHATWG HTML Standards. Bytes werden decodiert (typischerweise UTF-8 gemäß dem Meta-Charset oder BOM), der Tokenizer durchläuft die Zustände data, RCDATA, RAWTEXT, script-data und mehrere Attributzustände gemäß §13.2.5, und die Baumkonstruktionsphase erstellt einen DOM mittels der Insertion-Mode-Zustandsmaschine (initial, before html, in head, in body, in table, in select usw.). Der Parser ist nach Entwurf fehlertolerant: nicht geschlossene <p>-Tags werden automatisch geschlossen, wenn ein Block folgt, verirrte </tr> werden ignoriert, und falsch platzierte <table>-Elemente werden per Foster Parenting umgesetzt. Parser in Browserqualität stellen dies über new DOMParser().parseFromString(src, 'text/html') bereit; Node-seitige Tools verwenden parse5 (die referenzielle WHATWG-Implementierung), htmlparser2 oder cheerio. Die Neuausgabe durchläuft den resultierenden Baum und serialisiert nach Elementkategorie. Void-Elemente – area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr – erhalten in HTML5 nie ein schließendes Tag (die XHTML-Selbstschließung /> ist erlaubt, aber optional). Blockebenen-Container (div, section, article, header, footer, nav, main, ul, ol, li, table) bekommen ihre eigene Zeile bei depth×Einrückungs-Leerzeichen; Inline-/Phrasierungsinhalt (span, a, strong, em, code) bleibt inline, da CSS white-space: normal Leerzeichenfolgen zu einem einzigen Zeichen kollabiert. Zwei Elementtypen müssen wörtlich erhalten bleiben: <pre> und <textarea> tragen white-space: pre-Semantik, und ihr führendes Newline wird vom Parser konsumiert; <script>- und <style>-Inhalte sind RAWTEXT – eine Neu-Einrückung würde das Laufzeitverhalten ändern, daher werden sie normalerweise an einen JS- oder CSS-Unterformatter delegiert und wieder eingebettet. Die Attributserialisierung normalisiert die Zitierung (einfach vs. doppelt) und kodiert eingebettete Trennzeichen über die benannten Zeichenreferenzen &, <, >, " und die numerische ' neu. Die Attributreihenfolge ist im DOM nicht signifikant, daher wenden Formatter typischerweise eine stabile Reihenfolge an (id, class, dann alphabetisch). Zeilenumbruch greift bei Überschreitung der konfigurierten printWidth: Attribute werden eines pro Zeile aufgeteilt, wobei das schließende > entweder auf einer eigenen Zeile steht (prettier-plugin-html bracketSameLine: false) oder am letzten Attribut klebt. Die Minifizierung kehrt den Prozess um – Whitespace zwischen Block-Tags wird entfernt, Kommentare werden bis auf IE-Conditionals <!--[if gelöscht, und Anführungszeichen werden bei Attributen entfernt, deren Wert [A-Za-z0-9._-]+ entspricht. Beide Operationen sind O(n) über die Eingabelänge.
- Parser: WHATWG HTML-Baumkonstruktion (§13) über DOMParser('text/html') im Browser, parse5/htmlparser2/cheerio auf Node; Insertion-Mode-Zustandsmaschine behandelt fehlende/falsch platzierte Tags und Foster Parenting.
- Void-Elemente (kein End-Tag): area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr – 14 Elemente gemäß HTML Living Standard. XHTML-Selbstschließung /> wird toleriert, ist aber redundant.
- Leerzeichenerhaltende Elemente: <pre> und <textarea> tragen CSS white-space: pre und konsumieren ein führendes Newline; deren Inhalt wird nie neu eingerückt, sonst ändert sich die sichtbare Ausgabe.
- RAWTEXT-Kontexte: <script>- und <style>-Inhalte sind kein HTML – sie werden an JS/CSS-Unterformatter delegiert (oder wörtlich belassen). Neu-Einrückung von Roh-Text innerhalb eines Regex- oder String-Literals würde die Laufzeitsemantik verändern.
- Attributnormalisierung: Zitierstil gewählt (einfach/doppelt), eingebettete Trennzeichen mit den fünf benannten Referenzen (&, <, >, ", ') neu kodiert, stabile Reihenfolge angewendet (id, class, dann alphabetisch), da die DOM-Reihenfolge nicht signifikant ist.
- Umbruch bei Überschreitung von printWidth (typisch 80/100/120): Attribute werden eines pro Zeile aufgeteilt, wobei das schließende > entweder auf einer eigenen Zeile steht oder am letzten Attribut klebt, analog zur Option bracketSameLine von prettier-plugin-html.
- Minifizierung: Kollabiert von Whitespace zwischen Tags, entfernt Kommentare (Erhalt von <!--[if IE]>-Conditionals), entfernt optionale End-Tags (</li>, </p> wenn von einem Geschwisterelement gefolgt), und entfernt Anführungszeichen bei Attributen, die [A-Za-z0-9._-]+ entsprechen; Roundtrip ist O(n).
Beispiele
Minifiziertes HTML → formatiert (2-Leerzeichen-Einrückung)
Eingabe:
<div class="card"><h2>Title</h2><p>Body text</p></div>
Formatiert:
<div class="card">
<h2>Title</h2>
<p>Body text</p>
</div>Formatieren → minifizieren (Produktions-Deployment)
Quelle (412 Bytes):
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
Minifiziert (96 Bytes, -77%):
<nav><ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li></ul></nav>Lange Attributliste auf mehrere Zeilen umgebrochen
Eingabe:
<input type="email" id="user-email" name="email" placeholder="you@example.com" required autocomplete="email">
Formatiert (Umbruch > 80 Zeichen):
<input
type="email"
id="user-email"
name="email"
placeholder="you@example.com"
required
autocomplete="email"
>Selbstschließende Tags und Inline-Inhalt erhalten
Eingabe:
<p>Click <a href="/docs">here</a> for help.<br><img src="icon.png" alt=""></p>
Formatiert (Inline-Geschwister bleiben in einer Zeile):
<p>
Click <a href="/docs">here</a> for help.
<br>
<img src="icon.png" alt="">
</p>FAQ
Was wird formatiert?
HTML-Markup: Einrückung, Attributplatzierung, Umgang mit Leerzeilen und (optional) Zeilenumbruch bei einer gewählten Spaltenbreite. Die gerenderte Ausgabe ändert sich nicht — deine Seite sieht identisch aus, nur der Quelltext ist lesbarer.
Bleiben meine <pre>-, <textarea>- und <script>-Blöcke erhalten?
Ja. Whitespace innerhalb von pre-, textarea-, code- und script-Blöcken hat Bedeutung (er erscheint im Rendering) und der Formatter lässt ihn unangetastet. Andere Elemente bekommen normalisierten Whitespace.
Warum werden meine selbstschließenden Tags umgeschrieben?
<br/>, <img/>, <hr/> in HTML5 sind äquivalent zu <br>, <img>, <hr> (HTML5 verlangt den Slash nicht). Der Formatter wählt eventuell konsequent einen Stil. Für XHTML-/JSX-/Vue-Templates konfiguriere den Formatter so, dass der Schluss-Slash erhalten bleibt.
Validiert er HTML?
Nein. Er formatiert, was du einfügst. Zur Validierung nutze den W3C-Validator oder die Entwicklertools eines Browsers. Übliche Probleme wie nicht geschlossene Tags oder nicht passende Anführungszeichen passieren die Formatierung.
Wird das HTML hochgeladen?
Nein. Die Formatierung läuft in deinem Browser. Eingefügtes HTML verlässt nie das Netzwerk.
Kann er HTML minifizieren?
Ja, sofern es einen Minify-Modus gibt. HTML-Minifizierung entfernt Whitespace zwischen Tags, fasst Leerzeichenfolgen in Texten zusammen und entfernt optionale schließende Tags. Das Ergebnis ist schwerer lesbar, aber kleiner — nützlich für Production Builds.
Was ist mit eingebettetem CSS und JS?
<style>- und <script>-Inhalte werden meist mit den eigenen (CSS-, JS-) Formattern formatiert, sofern die Seite das unterstützt. Ansonsten bleibt ihr Innenleben unverändert, um Syntax nicht zu zerstören.