Comment faire des cases à cocher HTML en images ?

Réponses rédigées par Antoine
Dernière mise à jour : 2021-01-14 14:14:09
Thèmes : webmaster - html - css - checkbox - image
Question

Bonjour, je cherche à utiliser des images cen tant que cases à cocher HTML, c'est à dire afficher plusieurs images sur lesquelles il faut cliquer pour les sélectionner.

Réponse

Que vous utilisiez des cases à cocher du type radio ou checkbox, vous pouvez utiliser l'élément HTML <label>, et un peu de code CSS, pour ne pas afficher les cases à cocher <input>, et les représenter sous la forme d'images cliquables.

Pour cela on intègre la case à cocher et l'image dans la balise <label></label>. On identifie par ailleurs les cases à cocher <input> via la propriété name="cases" .

<label>
<input type="radio" name="cases" value="0">
<img src="http://placehold.it/100x100" alt="">
</label>

Ensuite on crée trois règles CSS. La première rend les balises <input> non visibles :

input[name="cases"] { 
position: absolute;
opacity: 0;
width: 0;
height: 0;
}

La seconde permet d'afficher un pointeur du type lien lorsqu'on survole une image :

input[name="cases"] + img {
cursor: pointer;
}

La troisième colorise les contours de l'image sur laquelle on a cliqué pour la mettre en exergue :

input[name="cases"]:checked + img {
outline: 4px solid #F79517;
}

Voici le code complet :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Comment créer des cases à cocher HTML sous forme d'images ?</title>
<style>
input[name="cases"] { 
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
input[name="cases"] + img {
cursor: pointer;
}
input[name="cases"]:checked + img {
outline: 4px solid #F79517;
}
</style>
</head>
<body>
<label>
<input type="radio" name="cases" value="0">
<img src="http://placehold.it/100x100" alt="">
</label>

<label>
<input type="radio" name="cases" value="1">
<img src="http://placehold.it/100x100" alt="">
</label>

<label>
<input type="radio" name="cases" value="2">
<img src="http://placehold.it/100x100" alt="">
</label>
</body>
</html>

Vous trouverez une démonstration dans le Bac à codes.