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.
Se vuoi aggiornamenti su User Interface Design inserisci la tua email nel box qui sotto: