N'importe quel élément peut être transformé visuellement en bouton, par exemple un lien peut être transformé en bouton, d'ailleurs c'est le cas le plus courant. Je vous montrerais les bases de ce "skinnage" dans cet article.
Cependant certains boutons visuels ont et doivent vraiment avoir un rôle de bouton au sens "application", ce qui est très important au niveau de l'accessibilité (WAI et ARIA). La balise button par exemple est un "bouton applicatif", elle est donc à utiliser en premier pour ce genre de bouton. Cependant dans certain cas, vous ne pourrez ou ne voudrez pas mettre de balise button, dans ce cas là, il est nécessaire d'intervenir à divers niveaux pour en faire un "bouton applicatif", c'est ce que nous verront en même temps dans cet article en utilisant une balise span et non button, mais le "skinnage" reste quasi identique.
Qu'est-ce qu'un bouton en Html
Les divers états d'un bouton
Avant de créer votre bouton Css, il faut avant tout savoir qu'un bouton HTML est constitué de plusieurs états qu'il faudra charter :
l'état normal : c'est l'affichage initial du bouton Css quand ce dernier est affiché au chargement de la page.
l'état survolé : c'est l'affichage du bouton Css quand le curseur le survole. Utilisez la pseudo-classe Css :hover.
l'état de focus : c'est l'affichage du bouton Css quand ce dernier est sélectionné via la tabulation ou enfoncé avec la souris. Utilisez la pseudo-classe Css :focus. Sachez que les éléments n'acceptent pas tous le focus. Les solutions sont données plus bas.
l'état enfoncé : c'est l'affichage du bouton Css quand l'internaute enfonce ce dernier avec le curseur. Utilisez la pseudo-classe Css :active. Sachez que les éléments n'acceptent pas tous l'état enfoncé. Les solutions sont données plus bas.
Déclenchement et héritage des états activés
Si vous déclenchez l'action du bouton Css via le clavier, l'état :activen'est pas déclenché. Si vous cliquez avec le curseur sur le bouton Css, l'état :activeest déclenché aussi que l'état :focus et :hover.
Si vous prenez le focus du bouton Css via la tabulation et que vous passez ensuite le curseur sur le bouton Css alors :focus et :hoversont déclenchés en même temps. Cela veut dire que le résultat de l'affichage du bouton Css sera un mixte de l'ensemble des propriétés déclarées dans les divers états activés. C'est ce que je vais vous monter dans les deux exemples de boutons qui suivent.
Si vous cliquez sur le bouton Css ci-dessous, vous pouvez constater que les propriétés des trois états sont bien affichées. Mon bouton Css
Si vous cliquez sur le bouton Css ci-dessous, vous pouvez constater que c'est le fond de couleur rouge qui est hérité. Mon bouton Css
L'ordre de déclarations des états du bouton dans la Css
Cette partie n'est là que vous monter que l'ordre de déclarations des états dans la Css, influence l'affichage mais, vous devez conserver l'ordre conseillé par le W3c. Si j'inverse les deux lignes.button:active et .button:hover.
Cliquez sur le bouton Css ci-dessous, vous pouvez constater que c'est le fond de couleur gris qui est maintenant hérité. Mon bouton Css
Sachez que vous pouvez augmenter le poids en additionnant les états .button:hover:active.
Cliquez sur le bouton Css ci-dessous, vous pouvez constater que c'est le fond de couleur gris qui est hérité. Mon bouton Css
Problème de focus et d'active
Vous devez aussi faire en sorte que le comportement soit identique à une balise button, pour devenir un bouton "applicatif". Le bouton Css doit pouvoir prendre le focus ce qui n'est pas forcement le cas de tous les éléments HTML. Si la balise faisant office de bouton CSS n'accepte pas le focus par défaut, il faut lui ajouter un attribut tabindex="0". Le bouton Css doit pouvoir prendre l'active ce qui n'est pas forcement le cas de tous les éléments HTML. Si la balise faisant office de bouton CSS n'accepte pas l'état actif par défaut, il faut lui ajouter une classe ou autre élément permettant de déclencher le "style actif". Voir Accessibilité et le bouton Css.
Les divers événements d'un bouton Css
Vous devez aussi faire en sorte que le comportement soit identique à une balise button, pour devenir un bouton "applicatif". Le bouton Css doit déclencher une action 'A' lorsqu'il est cliqué par le curseur de la sourisou quand le bouton a le focus et que l'on actionne la barre d'espace ou la touche "entrée".
Donc vous devez surveiller les événements JavaScript suivant du bouton Css :
onclick, pour la souris. Peut être nécessaire sur une balise button, notamment si elle est le type égal button.
onkeydown, pour le clavier. Surveillez le keyCode de valeurs 13 pour la touche "entrée" et 32 pour la touche "espace".
Si vous cliquez sur le bouton Css ci-dessous ou que vous utilisez la touche "espace" ou "entrée" en ayant le focus, une alerte est déclenchée. Mon bouton Css
Accessibilité et le bouton Css
Pour spécifier que votre bouton est un bouton "applicatif", vous devez ajouter des éléments d'accessibilité à votre balise (X)HTML. L'élément (X)HTML doit avoir comme attribut HTML role="button".
Si votre bouton Css est un bouton à bascule, c'est-à-dire que son état "initial" peut être enfoncé ou normal, vous devez ajouter l'attribut HTML aria-pressed="true" s'il est enfoncé, aria-pressed="false" s'il n'est pas enfoncé. Cela est valable aussi pour les boutons de formulaires button et input.
Exemple de code de bouton Css simple
Voici le code complet HTML, CSS et Javascript pour un bouton Css simple.
Résultat du code du bouton Css : bouton Css
Exemple de code de bouton Css à bascule
Voici le code complet HTML, CSS et Javascript pour un bouton Css à bascule.
Résultat du code du bouton Css : bouton Css
Avant de passer aux exemples de boutons Css
Quelques informations avant de commencer
Dans cette partie nous n'étudions que la partie CSS.
Pour tester le focus du bouton Css : Sélectionner une portion de texte située avant le bouton Css et faites ensuite une tabulation. A ce moment-là, le bouton CSS prend seulement le focus.
Pour éviter de faire trop de répétitions de code CSS, tous les boutons Css auront la classe button-cours :
Comment faire un bouton de couleur?
Créer un bouton Css avec couleur de fond
Création d'un bouton Css de couleur grâce à la propriété Css background-color . Bouton Css d'exemple : Span bouton Css
Création en Css d'un bouton avec dégradé de couleur grâce à la propriété Css background-image . Bouton Css d'exemple : Span bouton Css
Comment faire un bouton Css arrondi?
Créer un bouton Css avec coins arrondis
Créer en Css un bouton avec des coins arrondis grâce à la propriété Css border-radius. Bouton Css d'exemple : Span bouton Css
Créer un bouton en Css avec des bordures horizontales rondes grâce à la propriété Css border-radius. Bouton Css d'exemple : Span bouton Css
Comment faire un bouton Css avec une ombre?
Créer un bouton Css ombré
Créer un bouton Css avec une ombre portée grâce à la propriété Css box-shadow. Bouton Css d'exemple : Span bouton Css
Cas particuliers de boutons Css
Transformer une balise A en bouton css
Une balise A qui correspond à un lien accepte le focus par tabulation par défaut.
Si le bouton sur le lien a un role de lien, il ne s'agit pas dans ce cas d'un bouton au sens HTML, mais d'un lien "reskinner" pas besoin de faire d'ajout Javascript ou d'accessibilité.
Dans le cas contraire ( si le bouton sur le lien ouvre par exemple une pop-up ), il fait bien office de bouton, vous devez y ajouter les attributs d'accessibilité et ajouter un écouteur Javascript pour la touche "espace".
Quand vous chartez un lien HTML en bouton Css, vous devrez en plus spécifier les pseudo-classes Css :visited et :link qui doivent être identiques à version initiale d'affiche (ou pas). Vous devrez en plus supprimer le soulignement en mettant la propriété text-decoration à :none sur toutes les pseudo-classes utilisées pour le bouton Css.
Bouton de formulaire HTML
Pour les boutons de formulaire de type button ou input sous Firefox quand le bouton HTML a le focus, le texte du bouton est entouré d'une bordure pointillée pour des questions d'accessibilité. Si vous désirez l'enlever, vous devez utiliser la propriété préfixée -moz-focus-inner.
Autres concepts de styles de boutons en Css
Suite dans le "Labo"
Les suites des exemples sera mise dans Le laboratoire.