Menu

Textarea HTML: rows, resize, maxlength e testo predefinito

Come creare un campo di testo su più righe con <textarea>: rows e cols, testo predefinito tra i tag, ridimensionamento e crescita automatica, maxlength con un contatore di caratteri, gli a capo nel testo inviato e lo stile.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Come creare una textarea

<textarea> è un campo di testo per più di una riga: messaggi, commenti, descrizioni. rows imposta la sua altezza visibile in righe. Scrivi qualche riga e premi Send:

Due cose sono diverse rispetto a <input>: una textarea ha bisogno di un tag di chiusura, e il suo testo iniziale va tra i tag invece che in un attributo value. Il suo name viene inviato con il testo come valore, a capo compresi.

Attributi della textarea

AttributoCosa fa
nameLa chiave con cui viene inviato il testo
rowsAltezza visibile in righe (predefinito 2)
colsLarghezza visibile in caratteri (predefinito 20); di solito è meglio width del CSS
placeholderUn suggerimento mostrato finché è vuota
maxlength, minlengthLimiti di lunghezza in caratteri
requiredNon può essere vuota
readonlySi può selezionare e copiare, non modificare; viene comunque inviata
disabledNon si può usare; non viene inviata
wrapsoft (predefinito) o hard, vedi più avanti
spellchecktrue o false

Il testo predefinito va tra i tag

Tutto ciò che sta tra <textarea> e </textarea> è il testo iniziale, esattamente come è scritto: spazi, tabulazioni e a capo compresi. Viene ignorato solo un a capo subito dopo il tag di apertura. Per questo il rientro è una trappola:

La seconda textarea inizia con quattro spazi e finisce con un a capo e altri due spazi, che il lettore deve cancellare. Scrivi il testo predefinito attaccato ai tag.

L'HTML dentro una textarea non viene interpretato; <b>hi</b> tra i tag compare così com'è, come testo.

Larghezza, ridimensionamento e crescita automatica

I browser permettono al lettore di trascinare l'angolo per ridimensionare una textarea. La proprietà CSS resize lo limita, e width: 100% con box-sizing: border-box le fa riempire esattamente il suo contenitore:

L'ultima azzera la sua altezza e poi la imposta a scrollHeight (l'altezza del contenuto e del padding) più i bordi, a ogni tasto premuto. Scrivici più righe: non mostra mai una barra di scorrimento. resize: vertical è il valore predefinito più comodo: le risposte lunghe hanno spazio, e nessuno può trascinare il campo oltre la larghezza del layout.

I browser basati su Chromium possono far crescere il campo con il solo CSS usando field-sizing: content. I browser che non lo supportano ignorano la riga e mantengono la dimensione normale, quindi aggiungerla è sicuro, ma tieni lo script se vuoi che ogni lettore abbia il riquadro che cresce.

maxlength e un contatore di caratteri

maxlength blocca l'input a un certo numero di caratteri. Da solo non avvisa, quindi il lettore se ne accorge solo quando la scrittura smette di funzionare. Un contatore risolve il problema:

aria-describedby fa leggere agli screen reader il contatore insieme al campo, e aria-live="polite" ne annuncia i cambiamenti tra un tasto e l'altro. maxlength viene fatto rispettare solo dal browser, quindi anche il server deve controllare la lunghezza.

Gli a capo nel testo inviato

Gli a capo del lettore vengono inviati con il testo. Nei dati inviati ognuno diventa una coppia ritorno a capo e avanzamento riga (%0D%0A in un modulo codificato come URL), ed è quello che si aspetta la maggior parte dei server. Per mostrare poi il testo in una pagina con i suoi a capo, convertili in <br> in uscita oppure dai all'elemento lo stile white-space: pre-line.

wrap="hard" (che richiede cols) va oltre: inserisce degli a capo anche dove il testo andava a capo visivamente, quindi il server riceve righe non più lunghe di cols caratteri. Il valore predefinito, wrap="soft", invia solo gli a capo scritti dal lettore.

Dare stile a una textarea

Chrome e Firefox danno alle textarea un font monospace di circa 13px, ed è per questo che spesso una textarea sembra fuori posto. font: inherit risolve il problema. Se cambi il bordo, mantieni uno stile di focus visibile:

Il testo del placeholder deve avere un contrasto leggibile; il grigio chiaro usato da molti design è difficile da leggere. E, come per ogni campo, il placeholder non è un'etichetta: sparisce appena il lettore scrive. Le etichette sono spiegate in label HTML.

Errori comuni

  • <textarea value="...">. Non esiste l'attributo value; metti il testo tra i tag.
  • Far rientrare il testo predefinito insieme all'HTML. Gli spazi diventano parte del valore.
  • Una <textarea /> autochiusa. Non è un elemento vuoto; senza </textarea>, il resto della pagina finisce dentro come testo.
  • Nessun font: inherit, così il campo usa un piccolo font monospace.
  • resize: none con un'altezza fissa ridotta. Le risposte lunghe finiscono in un minuscolo riquadro a scorrimento.
  • Affidarsi solo a maxlength. Controlla la lunghezza anche sul server.

Domande frequenti

Come si crea una textarea in HTML?

Scrivi <textarea name="message" rows="4"></textarea> dentro un modulo, con un <label>. A differenza di <input>, ha un tag di chiusura, e tutto ciò che sta tra i tag è il testo iniziale.

Come imposto il valore predefinito di una textarea?

Metti il testo tra i tag: <textarea name="bio">Hello</textarea>. In HTML una textarea non ha l'attributo value. In JavaScript, leggi e imposta textarea.value.

Come impedisco di ridimensionare una textarea?

Imposta resize: none in CSS. Di solito resize: vertical è più comodo: il lettore può comunque allungarla per un testo lungo, ma non può rompere il layout trascinandola in larghezza.

Come limito il numero di caratteri di una textarea?

Aggiungi maxlength="280". Il browser smette di accettare input a quella lunghezza. Mostra accanto un contatore, aggiornato con l'evento input, così il lettore sa quanto spazio resta, e controlla la lunghezza anche sul server.

Perché la mia textarea usa un font diverso?

Chrome e Firefox danno alle textarea un font monospace di circa 13px per impostazione predefinita. Aggiungi font: inherit per farla corrispondere al resto della pagina.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA