ToolActToolAct

HTML-Formatierungstool

HTML Eingabe
Ausgabeergebnis
Zeilen: 1Zeichen: 0Bytes: 0
Zeilen: 1Zeichen: 0

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

  1. Füge HTML-Code im linken Eingabefeld ein oder gib ihn ein
  2. Wähle die Einrückungsgröße und die maximale Zeilenlänge
  3. Klicke auf ‚Formatieren‘, um den Code zu verschönern, oder auf ‚Minify‘, um die Größe zu reduzieren
  4. Der formatierte Code wird auf der rechten Seite angezeigt (mit Syntaxhervorhebung)
  5. Klicke auf ‚Kopieren‘, um den Code in die Zwischenablage zu kopieren

Beschreibung der Optionen

EinrückungsgrößeWähle 2 Leerzeichen, 4 Leerzeichen oder Tabulator-Einrückung
Maximale ZeilenlängeAutomatischer Zeilenumbruch bei Überschreitung der angegebenen Zeichenanzahl; wähle ‚Keine Begrenzung‘, um das Original beizubehalten

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

Eingefügten HTML-Code mit eingebetteten Style- und Script-Blöcken formatierenFüge Markup ein und wähle 2 Leerzeichen, 4 Leerzeichen oder Tabulatoren. Der Formatter entfernt Kommentare, erhält den Inhalt von pre-Elementen und formatiert extrahierte Style- und Script-Blöcke, bevor sie wieder in die HTML-Struktur eingesetzt werden.
Einen kleinen HTML-Ausschnitt für die Einbettung komprimierenWechsle in den Minify-Modus, um Leerzeichen zwischen Tags zu entfernen und Kommentare zu löschen, bevor du ein kompaktes HTML-Fragment kopierst oder herunterlädst. Analysefehler enthalten nach Möglichkeit Zeilen- und Spaltenhinweise, sodass ein fehlendes schließendes Tag aus einem CMS-Export behoben werden kann, ohne den ursprünglichen Editor erneut zu öffnen. Führe das Ergebnis vor dem Einbetten in die Produktion durch einen Projekt-Linter oder eine html-validate-Pipeline, da die Formatierung keine Attribute, Inline-Skripts oder unsicheren href-Werte bereinigt.
Für überprüfbare Ausschnitte verwenden, nicht für vollständige Build-ValidierungDie Implementierung ist bewusst leichtgewichtig und tokenbasiert, sodass sie sich am besten für kopierte Ausschnitte, E-Mail-Fragmente und CMS-Exporte eignet. Komplexe Templates, insbesondere solche mit Vue, Angular oder serverseitig gerenderten Partials mit benutzerdefinierten Elementen, sollten weiterhin über den eigenen Formatter oder Parser des Projekts laufen, und Barrierefreiheitsprüfungen sollten separat auf dem gerenderten DOM mit axe-core oder Lighthouse durchgeführt werden.
Generierten HTML-Code aus CMS-Export oder E-Mail-Builder formatierenFüge exportiertes Markup aus einem CMS, Newsletter-Tool oder E-Mail-Builder ein und rücke es neu ein, um nicht geschlossene divs, falsch verschachtelte Tables oder irrende Script-Tags vor dem Versand oder der Veröffentlichung zu finden. Kombiniere die formatierte Ausgabe mit einer separaten Barrierefreiheitsprüfung des gerenderten DOMs, da der Formatter nur neu einrückt – fehlende Alt-Texte, Kontrastprobleme oder ARIA-Rollen werden nicht behoben.
Zwischen formatierter und komprimierter Ausgabe für Diff-Vergleich wechselnWechsle dasselbe Fragment zwischen Format- und Minify-Modus, um einen menschenlesbaren Diff-Vergleich mit der produktionskomprimierten Version zu erstellen, wenn ein Layout- oder Attribut-Regression untersucht wird. Beide Ausgaben stammen vom selben Parser, sodass jede Differenz auf Leerzeichen, Kommentare oder Attributreihenfolge zurückzuführen ist und nicht auf unterschiedliche Formatter, die sich nicht über den DOM einig sind.

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 &amp;, &lt;, &gt;, &quot; und die numerische &#39; 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 (&amp;, &lt;, &gt;, &quot;, &#39;) 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.