W3docs

HTML <pre> Tag

Das <pre>-Tag definiert vorformatierten Text, der genau so angezeigt wird, wie er in der HTML-Datei geschrieben ist.

Das HTML-<pre>-Tag definiert vorformatierten Text — Text, der genau so dargestellt wird, wie er im Quellcode steht, mit allen Leerzeichen und Zeilenumbrüchen. Browser zeigen den Inhalt eines <pre>-Elements in einer Schrift mit fester Zeichenbreite (Monospace) an. Am häufigsten wird es verwendet, um Quellcode anzuzeigen (meist zusammen mit dem <code>-Tag) oder beliebigen Text, bei dem der Autor das genaue Layout der Zeilen bestimmt, wie etwa ein Gedicht oder ASCII-Art.

Warum <pre> Leerzeichen bewahrt

Standardmäßig reduzieren Browser Leerzeichen: Eine Folge von Leerzeichen, Tabulatoren und Zeilenumbrüchen wird als einzelnes Leerzeichen dargestellt, und Zeilenumbrüche im HTML haben keine sichtbare Wirkung. Deshalb verändert das Einfügen mehrerer Leerzeichen oder das Drücken der Eingabetaste innerhalb eines normalen Absatzes nicht das Erscheinungsbild des Textes.

Das <pre>-Element deaktiviert dieses Verhalten. Innerhalb von <pre> ist jedes Leerzeichen, jeder Tabulator und jeder Zeilenumbruch bedeutsam und wird buchstäblich angezeigt — es sind keine &nbsp; oder <br> nötig, um den Abstand zu steuern. Intern entspricht dies der CSS-Deklaration white-space: pre, die Browser <pre> standardmäßig zuweisen.

Tipp

Verwende <pre> immer dann, wenn die genaue Anordnung der Zeichen wichtig ist: Codeauflistungen, Befehlszeilenausgaben, tabellarischer Klartext oder aus Zeichen zusammengesetzte Grafiken.

Syntax

Das <pre>-Tag wird paarweise verwendet. Der Inhalt steht zwischen dem öffnenden (<pre>) und schließenden (</pre>) Tag. Beachte, dass Text typischerweise in der Zeile nach dem öffnenden Tag beginnt und jede Einrückung im Quellcode in der Ausgabe erscheint.

Inline-Elemente werden typischerweise innerhalb des <pre>-Tags platziert. Obwohl Block-Level-Elemente in HTML5 erlaubt sind, können sie unerwartete Leerzeichen oder Einrückungen erzeugen, weshalb Inline-Elemente generell bevorzugt werden.

Beispiel des HTML-<pre>-Tags

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
  </head>
  <body>
    <pre>Spaces
               and line breaks
               within this element 
        are shown as typed.           
    </pre>
  </body>
</html>

Ergebnis

pre tag example

Das <pre><code>-Muster für Codeblöcke

Die kanonische, barrierefreie Methode zur Anzeige eines Quellcodeblocks besteht darin, ein <code>-Element in ein <pre>-Element einzubetten:

  • <pre> sorgt für das Block-Layout und bewahrt Leerzeichen und Zeilenumbrüche.
  • <code> ergänzt die Semantik: Es markiert den Inhalt als Computercode und nicht als gewöhnlichen Text.

Zusammen teilen sie Suchmaschinen und Hilfstechnologien genau mit, worum es sich bei dem Inhalt handelt. Screenreader können ihn als Codebereich ankündigen, und Syntax-Highlighting-Bibliotheken (Prism, highlight.js usw.) nutzen den pre > code-Selektor, um das Markup einzufärben. <pre> allein würde die Formatierung erhalten, aber diese Bedeutung verlieren — daher ist die Kombination das empfohlene Muster.

Beispiel des HTML-<pre>-Tags mit dem <code>-Element

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <pre><code>body {
  color: orange;
}</code></pre>
  </body>
</html>
Warnung

Leerzeichen innerhalb von <pre> sind literal, daher setze das schließende </pre> direkt an den Code (wie oben). Führende Zeilenumbrüche und Einrückungen zwischen <pre> und <code> werden gerendert — weshalb tief eingerückter Quellcode unerwünschte Leerzeilen und führende Leerzeichen erzeugen kann.

Escaping von <, > und & innerhalb von <pre>

<pre> bewahrt Leerzeichen, schaltet aber das HTML-Parsing nicht ab. Der Browser liest den Inhalt weiterhin als Markup. Wenn du also wörtliches HTML oder beliebigen Text mit den Zeichen <, > oder & anzeigen möchtest, musst du diese mit HTML-Entities escapen — andernfalls versucht der Browser, sie als Tags zu interpretieren:

ZeichenEntity
<&lt;
>&gt;
&&amp;

Um beispielsweise den Text <p>Hello & welcome</p> anzuzeigen, muss man schreiben:

<pre><code>&lt;p&gt;Hello &amp; welcome&lt;/p&gt;</code></pre>

Die Seite zeigt dann die spitzen Klammern an, anstatt einen Absatz zu rendern. Siehe die HTML-Unicode-Referenz für die vollständige Liste benannter Entities.

Styling von <pre> und die white-space-Eigenschaft

Browser gestalten <pre> standardmäßig mit white-space: pre. Du kannst mit der CSS-Eigenschaft white-space steuern, wie vorformatierter Text umbrochen wird:

WertZeilenumbrücheLeerzeichen / TabulatorenUmbruch
preerhaltenerhaltenkein Umbruch (Standard für <pre>)
pre-wraperhaltenerhaltenUmbruch bei zu langen Zeilen
pre-lineerhaltenreduziertUmbruch bei zu langen Zeilen

Da pre nie umbricht, läuft eine lange Codezeile aus ihrem Container heraus. Die übliche Lösung ist, mit overflow-x: auto eine horizontale Scrollleiste hinzuzufügen, die die ursprüngliche Formatierung beibehält und dem Leser das seitliche Scrollen ermöglicht:

pre {
  background-color: #f4f4f4;
  padding: 10px;
  overflow-x: auto;     /* horizontal scroll for long lines */
}

Wenn der Text lieber in die nächste Zeile umbrechen soll, anstatt zu scrollen, verwende stattdessen white-space: pre-wrap.

Attribute

Das <pre>-Element hat keine Pflichtattribute. Die alten Attribute width, cols und wrap sind veraltet und wurden aus HTML5 entfernt — verwende stattdessen CSS:

Veraltetes AttributFunktionAlternative
widthempfohlene ZeichenbreiteCSS max-width
colsempfohlene SpaltenanzahlCSS width / max-width
wrapZeilenumbruch gesteuertCSS white-space: pre-wrap

Das <pre>-Tag unterstützt die Global Attributes und die Event Attributes.

Verwandte Tags

Übungen

Übung
Was trifft auf das HTML-'pre'-Tag zu?
Was trifft auf das HTML-'pre'-Tag zu?
Was this page helpful?