Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

"Debottonizzare" i button in HTML

I risultati di un'interessante discussione tra sviluppatori dedicata all'utilizzo alternativo dell'elemento button.
I risultati di un'interessante discussione tra sviluppatori dedicata all'utilizzo alternativo dell'elemento button.
Link copiato negli appunti

Indipendentemente dal fatto che utilizzando CSS possiamo "travestire" un elemento HTML in modo che questo sembri e si comporti (mimesi) come un altro, esistono casi specifici in cui è certamente meglio sfruttare direttamente l'elemento HTML necessario, piuttosto che forzarne un altro ad agire allo stesso modo. Tuttavia, esistono altrettanti casi in cui un elemento HTML non è abbastanza malleabile per il compito richiesto. E' questo il caso, ad esempio, dell'elemento button.

Gli elementi button possono essere stilizzati, ma sono difficilmente de-stilizzabili. Ad esempio, se hai mai utilizzato qualcosa come Normalize.css, avrai sicuramente notato il grande numero di regole utili a convertire button in una componente cross-browser: padding, borders, colori, hovering, focus, e cosi via. Inoltre, se il pulsante in questione non deve comportarsi tale è possibile trattarne il suo testo come se fosse, ad esempio, un elemento inline (come uno "span" o un "a").

Tuttavia, non è possibile utilizzare display: inline; su di un button senza contraddire le specifiche HTML standard, le quali affermano che un button deve comportarsi come un elemento "inline-block"

Un codice CSS come quello presentato su CodePen da Micah Godbolt non è quindi totalmente conforme alle specifiche:

]button {
  margin: 0;
  padding: 0;
  color: green;
  white-space: normal;
  display: inline;
  background: none;
  outline: none;
  border: none;
  text-align: left;
}

In questo caso il button si comporta come un link, senza però essere un link. Se l'utente clicca sul pulsante, un JavaScript inline azionerà un alert.

<button onClick={alert('clicked')}> I'm a button and I want to
look like normal link but i keep wrapping and breaking</button>

La soluzione presentata da Matt Mastracci consiglia di includere un elemento "span" con gli attributi HTML "role" e "tabindex" rispettivamente impostati su "button" e "0", più il gestore degli eventi specifico:

più un JavaScript aggiuntivo che permette al pulsante di essere attivato attraverso le azioni della testiera, come Space ed Enter.

Scott O'Hara ha provato a fornire un'alternativa, utilizzando sia la proprietà "display" settata al valore "contents", sia la proprietà CSS "all" settata ad "unset". In questa pagina potete vedere i risultati dei test, che utilizzano sia la proprietà "display" con ogni valore possibile, sia all:unset, testandola con svariate versioni dei browser Firefox e Chrome per Mac e Windows.

Ti consigliamo anche