W3docs

Tag HTML <button>

Il tag HTML <button> crea pulsanti cliccabili. Scopri l'attributo type, lo stile, lo stato disabilitato e l'accessibilità con esempi.

Il tag <button> crea un pulsante cliccabile nella pagina web. A differenza di un pulsante costruito con il tag <input>, un <button> può contenere contenuto ricco — testo, immagini o altro HTML inline — tra i suoi tag di apertura e chiusura. Questo lo rende l'elemento preferito per la maggior parte dei pulsanti oggi, perché è più facile da stilizzare e permette di combinare un'icona con un'etichetta.

Questa pagina tratta la sintassi di <button>, il fondamentale attributo type (e il bug che deriva dal dimenticarlo all'interno di un form), lo stile, lo stato disabled, l'accessibilità e il confronto tra <button> e <input>.

Informazione

In passato, alcuni sviluppatori usavano <input type="button"> al posto di <button> perché versioni molto vecchie di Internet Explorer renderizzavano <button> in modo incoerente. Quel problema è ormai scomparso — nei browser moderni <button> è la scelta raccomandata.

Sintassi

Il tag <button> viene usato in coppia. Il contenuto viene scritto tra il tag di apertura (<button>) e quello di chiusura (</button>).

Esempio del tag HTML <button>:

Esempio del tag HTML <button>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Here will be our button</h1>
    <button type="button">Click</button>
  </body>
</html>

L'attributo type

L'attributo type determina cosa fa un pulsante. Esistono tre valori:

  • submit — invia il form genitore.
  • reset — reimposta tutti i controlli del form ai loro valori iniziali.
  • button — non fa nulla da solo; il comportamento viene collegato tramite JavaScript.

L'errore più comune: all'interno di un <form>, un <button> senza type ha come valore predefinito type="submit". Quindi un pulsante pensato come semplice azione invierà il form (spesso ricaricando la pagina) nel momento in cui viene cliccato. Impostare sempre type="button" esplicitamente per i pulsanti non-submit all'interno di un form.

Esempio di submit, reset e button:

Esempio dei tre tipi di pulsante

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/submit">
      <label>Name: <input type="text" name="name"></label>
      <button type="submit">Submit</button>
      <button type="reset">Reset</button>
      <button type="button" onclick="alert('Just a button!')">Say hi</button>
    </form>
  </body>
</html>

Submit invia il form, Reset svuota il campo di testo, mentre Say hi esegue solo il suo JavaScript senza toccare il form.

Utilizzo degli stili CSS

Puoi applicare stili CSS al tag <button> per modificarne l'aspetto, le dimensioni, il colore, il font del testo e così via.

Esempio del tag <button> con stili CSS:

Esempio del tag HTML <button> con proprietà CSS di colore e font

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .red-text {
        color: red;
      }
      .big-text {
        font: bold 14px Arial;
      }
    </style>
  </head>
  <body>
    Ordinary button
    <button type="button">Add to the recycle bin</button>
    <hr />
    Button with red text
    <button type="button" class="red-text"><b>HTML Book</b></button>
    <hr />
    Button with increased font size
    <button type="button" class="big-text">Download the book</button>
  </body>
</html>

Risultato

html button styles

Lo stato disabled

Un pulsante con l'attributo disabled non può essere cliccato né ricevere il focus, e non attiverà i propri gestori di eventi né invierà un form. I browser lo mostrano in grigio per indicare agli utenti che è inattivo. Questo è utile quando un'azione non è disponibile — ad esempio, fino a quando un form non è compilato correttamente.

Esempio di pulsante disabilitato

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <button type="button">Active button</button>
    <button type="button" disabled>Disabled button</button>
  </body>
</html>

Attributi

Suggerimento

Il tag <button> non ha attributi obbligatori; tuttavia, raccomandiamo di impostare sempre type="button" quando il tag viene usato come pulsante ordinario (non-submit), perché all'interno di un form un type non impostato ha come valore predefinito submit.

AttributiValoreDescrizione
autofocusautofocusSpecifica che il pulsante deve ricevere il focus dopo il caricamento della pagina.
disableddisabledDisattiva il pulsante. (Usato quando il pulsante deve diventare attivo dopo aver eseguito un'azione.)
formform_idSpecifica uno o più form a cui appartiene il pulsante. Se il pulsante appartiene a più form, i loro identificatori (form_id) devono essere separati da spazi.
formactionURLDefinisce l'indirizzo a cui verranno inviati i dati del form dopo aver cliccato sul pulsante. (Usato solo per i pulsanti con l'attributo type="submit").
formenctypeapplication/x-www-form-urlencodedDefinisce come i dati del form devono essere codificati quando viene inviato. (Usato solo per type="submit"). Tutti i simboli vengono codificati prima dell'invio del form (valore predefinito).
multipart/form-dataCodifica i dati come MIME multipart.
text/plainGli spazi vengono sostituiti dal segno "+", ma i simboli non vengono codificati.
formmethodgetDefinisce il metodo della richiesta HTTP che verrà utilizzato quando un form viene inviato (solo per type="submit"). Passa i dati del form nella barra degli indirizzi ("nome = valore"), che vengono aggiunti all'URL della pagina dopo il punto interrogativo e separati da una e commerciale (&).
postIl browser comunica con il server e invia i dati per l'elaborazione.
formnovalidateformnovalidateSpecifica che i dati del form non devono essere validati all'invio (solo per type="submit").
formtarget_blankSpecifica dove verrà mostrata la risposta dopo l'invio del form (solo per type="submit"). Apre la risposta in una nuova finestra.
_selfApre la risposta nella finestra corrente.
_parentApre la risposta nel frame genitore.
_topApre la risposta nella finestra a larghezza intera.
namenameDefinisce il nome del pulsante.
typebuttonDefinisce un pulsante ordinario.
resetPulsante che cancella i dati inseriti nel form.
submitPulsante per l'invio dei dati del form.
valuetextDefinisce il valore del pulsante.

Il tag <button> supporta anche gli Attributi Globali e gli Attributi Evento.

Accessibilità: assegnare un nome accessibile a un pulsante

Ogni pulsante necessita di un nome accessibile — il testo che uno screen reader annuncia. Per un normale pulsante di testo, il nome è semplicemente il testo tra i tag. Il problema si presenta con i pulsanti con sola icona, dove non è presente testo visibile.

Se l'unico contenuto del pulsante è un'immagine, fornisci all'<img> un attributo alt che descriva l'azione, non l'immagine. Il pulsante utilizza quindi quel testo come nome:

<button type="button">
  <img src="search.png" alt="Search">
</button>

Qui alt="Search" descrive cosa fa il pulsante, quindi uno screen reader annuncia "Search, button".

Se il pulsante non ha testo né un'immagine con alt — ad esempio un'icona disegnata con un icon font o un SVG inline — aggiungi un aria-label affinché il pulsante abbia comunque un nome:

<button type="button" aria-label="Close menu">
  <span class="icon-close" aria-hidden="true"></span>
</button>

L'aria-label è il nome accessibile del pulsante; aria-hidden="true" impedisce che l'icona decorativa venga annunciata. Da notare che aria-label e un <img alt> interno sono meccanismi separati — usa quello più adatto al markup, e non lasciare mai un pulsante con sola icona privo di uno dei due.

Per creare un link cliccabile con l'aspetto di un pulsante, usa un elemento <a> stilizzato con CSS. Racchiudere un <button> all'interno di un <a> non è valido in HTML5. Ecco l'approccio corretto:

Come aggiungere un link a un pulsante?

<a href="https://example.com" class="button-link">
  Button Label
</a>

In questo esempio, l'elemento <a> è stilizzato per assomigliare a un pulsante. Quando l'utente ci clicca sopra, verrà portato all'URL collegato.

<button> vs. <input type="button">

È possibile creare un pulsante con <button> o con il tag <input> (type="button", type="submit" o type="reset"). Si comportano in modo simile, ma differiscono in ciò che possono contenere:

<button><input type="button"> / <input type="submit">
Fonte dell'etichettaContenuto tra i tagL'attributo value (solo testo semplice)
Contenuto riccoSì — testo, immagini, icone, altro HTML inlineNo — solo testo
StilizzazionePiù semplice (pseudo-elementi, elementi annidati)Più limitata
Tag di chiusuraObbligatorio (</button>)Nessuno — è un elemento void
<!-- Rich content is possible -->
<button type="submit"><img src="check.png" alt=""> Save</button>

<!-- Text-only, set through value -->
<input type="submit" value="Save">

Usa <button> quando vuoi un'icona, testo formattato o un controllo di stile più preciso; ricorri a <input> quando è sufficiente una semplice etichetta di testo.

Pratica

Pratica
All'interno di un form, quale tipo ha un elemento button per impostazione predefinita quando l'attributo type è omesso?
All'interno di un form, quale tipo ha un elemento button per impostazione predefinita quando l'attributo type è omesso?
Was this page helpful?