Menu

HTML Textarea: rows, resize, maxlength und Standardtext

So erstellst du ein mehrzeiliges Textfeld mit <textarea>: rows und cols, Standardtext zwischen den Tags, Größe ändern und automatisch wachsen, maxlength mit Zeichenzähler, Zeilenumbrüche im gesendeten Text und Styling.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

So erstellst du eine Textarea

<textarea> ist ein Textfeld für mehr als eine Zeile: Nachrichten, Kommentare, Beschreibungen. rows legt die sichtbare Höhe in Zeilen fest. Tipp ein paar Zeilen ein und drück auf Send:

Zwei Dinge unterscheiden sich von <input>: Eine Textarea braucht ein schließendes Tag, und ihr Anfangstext steht zwischen den Tags statt in einem value-Attribut. Ihr name wird mit dem Text als Wert gesendet, einschließlich der Zeilenumbrüche.

Textarea-Attribute

AttributMacht
nameDer Schlüssel, unter dem der Text gesendet wird
rowsSichtbare Höhe in Zeilen (Standard 2)
colsSichtbare Breite in Zeichen (Standard 20); CSS width ist meist besser
placeholderEin Hinweis, solange sie leer ist
maxlength, minlengthLängengrenzen in Zeichen
requiredDarf nicht leer sein
readonlyKann markiert und kopiert, aber nicht bearbeitet werden; wird trotzdem gesendet
disabledNicht benutzbar; wird nicht gesendet
wrapsoft (Standard) oder hard, siehe unten
spellchecktrue oder false

Der Standardtext steht zwischen den Tags

Alles zwischen <textarea> und </textarea> ist der Anfangstext, genau so, wie er geschrieben ist: mit Leerzeichen, Tabs und Zeilenumbrüchen. Nur ein einziger Zeilenumbruch direkt nach dem öffnenden Tag wird ignoriert. Dadurch wird Einrückung zur Falle:

Die zweite Textarea beginnt mit vier Leerzeichen und endet mit einem Zeilenumbruch und zwei weiteren Leerzeichen, die der Leser alle löschen muss. Schreib den Standardtext direkt an die Tags.

HTML in einer Textarea wird nicht dargestellt; <b>hi</b> zwischen den Tags erscheint genau als dieser Text.

Breite, Größe ändern und automatisch wachsen

Browser lassen den Leser die Ecke ziehen, um die Größe einer Textarea zu ändern. CSS resize begrenzt das, und width: 100% mit box-sizing: border-box lässt sie ihren Container exakt ausfüllen:

Die letzte setzt bei jedem Tastendruck ihre Höhe zurück und dann auf scrollHeight (die Höhe ihres Inhalts und Innenabstands) plus ihre Rahmen. Tipp mehrere Zeilen hinein: Sie zeigt nie eine Scrollleiste. resize: vertical ist der freundlichste Standard: Lange Antworten bekommen Platz, und niemand kann das Feld breiter als das Layout ziehen.

Chromium-Browser schaffen das automatische Wachsen mit field-sizing: content allein in CSS. Browser, die das nicht unterstützen, ignorieren die Zeile und behalten die normale Größe. Es ist also unbedenklich, sie hinzuzufügen, aber behalte das Skript, wenn jeder Leser das wachsende Feld bekommen soll.

maxlength und ein Zeichenzähler

maxlength stoppt die Eingabe bei einer bestimmten Zeichenzahl. Allein gibt es keine Warnung, der Leser merkt es also erst, wenn das Tippen nicht mehr funktioniert. Ein Zähler behebt das:

aria-describedby lässt Screenreader den Zähler zusammen mit dem Feld vorlesen, und aria-live="polite" sagt Änderungen daran zwischen den Tastendrücken an. maxlength setzt nur der Browser durch, der Server muss die Länge also ebenfalls prüfen.

Zeilenumbrüche im gesendeten Text

Die Zeilenumbrüche des Lesers werden mit dem Text gesendet. In den gesendeten Daten wird jeder zu einem Paar aus Wagenrücklauf und Zeilenvorschub (%0D%0A in einem URL-kodierten Formular), was die meisten Server erwarten. Um den Text später mit seinen Zeilenumbrüchen auf einer Seite anzuzeigen, wandelst du sie bei der Ausgabe in <br> um oder stylst das Element mit white-space: pre-line.

wrap="hard" (braucht cols) geht weiter: Es fügt auch dort Zeilenumbrüche ein, wo der Text optisch umgebrochen ist, der Server bekommt also Zeilen, die nicht länger als cols Zeichen sind. Der Standard, wrap="soft", sendet nur die Umbrüche, die der Leser getippt hat.

Eine Textarea stylen

Chrome und Firefox geben Textareas eine Monospace-Schrift mit etwa 13px, deshalb wirkt eine Textarea oft fehl am Platz. font: inherit behebt das. Behalte einen sichtbaren Fokusstil, wenn du den Rahmen änderst:

Platzhaltertext sollte einen lesbaren Kontrast haben; das helle Grau vieler Designs ist schwer zu lesen. Und wie bei jedem Feld ist der Platzhalter kein Label: Er verschwindet, sobald der Leser tippt. Labels erklärt die Seite zum HTML Label.

Häufige Fehler

  • <textarea value="...">. Es gibt kein value-Attribut; schreib den Text zwischen die Tags.
  • Den Standardtext mit dem HTML einrücken. Die Leerzeichen werden Teil des Werts.
  • Ein selbstschließendes <textarea />. Es ist kein Void-Element; ohne </textarea> wird der Rest der Seite als Text hineingezogen.
  • Kein font: inherit, sodass das Feld eine kleine Monospace-Schrift verwendet.
  • resize: none mit kleiner fester Höhe. Lange Antworten landen in einem winzigen Kasten mit Scrollleiste.
  • Sich allein auf maxlength verlassen. Prüf die Länge auch auf dem Server.

Häufig gestellte Fragen

Wie erstelle ich eine Textarea in HTML?

Schreib <textarea name="message" rows="4"></textarea> in ein Formular, mit einem <label>. Anders als <input> hat sie ein schließendes Tag, und alles zwischen den Tags ist der Anfangstext.

Wie lege ich den Standardwert einer Textarea fest?

Schreib den Text zwischen die Tags: <textarea name="bio">Hello</textarea>. Eine Textarea hat in HTML kein value-Attribut. In JavaScript liest und setzt du textarea.value.

Wie verhindere ich, dass die Größe einer Textarea geändert wird?

Setz im CSS resize: none. resize: vertical ist meistens freundlicher: Der Leser kann sie für langen Text immer noch höher ziehen, aber dein Layout nicht kaputt machen, indem er sie breiter zieht.

Wie begrenze ich die Anzahl der Zeichen in einer Textarea?

Füg maxlength="280" hinzu. Der Browser nimmt ab dieser Länge keine Eingabe mehr an. Zeig daneben einen Zähler, der beim Event input aktualisiert wird, damit der Leser weiß, wie viel Platz noch bleibt, und prüf die Länge auch auf dem Server.

Warum hat meine Textarea eine andere Schrift?

Chrome und Firefox geben Textareas standardmäßig eine Monospace-Schrift mit etwa 13px. Füg font: inherit hinzu, damit sie zum Rest der Seite passt.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S