Formulaires✨ Premium

Checkbox Animated

Case à cocher en CSS seul : le carré à bord indigo se remplit et une coche blanche grandit en 0,2 s, sur une vraie case native utilisable au clavier.

CSSTransformCheckbox

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Formulaires comprend 20 effets, dont 2 gratuits. Découvrir la catégorie →

3 exemples d'usage

Liste de contrôle d'un chantier sur tablette — Checkbox Animated exemple 1

① Liste de contrôle d'un chantier sur tablette

QuandLe chef de chantier fait le tour du logement avant la réception. Il touche chaque ligne vérifiée : la case se remplit d'orange, la coche apparaît, le point est barré et le compteur « 3 / 5 » avance.
PourquoiSur une tablette tenue d'une main, la ligne entière est la cible du doigt ; la coche qui grandit confirme le geste même en plein soleil, sans fenêtre de validation.
RéglagesCinq labels pleine largeur dans une seule racine (fond et hauteur de la racine retirés). Bord et fond de .cbx-box passés en orange #ea580c. Le texte barré et le compteur sont ajoutés par la scène, qui écoute l'événement change.
Filtres d'un annuaire de restaurants — Checkbox Animated exemple 2

② Filtres d'un annuaire de restaurants

QuandDans la colonne de gauche, le visiteur coche « Ouvert dimanche » : la liste passe de 4 à 2 restaurants. Chaque filtre se coche ou se décoche d'un clic.
PourquoiDes filtres combinables sont exactement le rôle d'une case à cocher : plusieurs choix à la fois, chacun réversible. La petite animation montre quel filtre vient de s'appliquer.
RéglagesCarré réduit à 20 px (avec left:5px; top:1px pour recentrer la coche), couleur bordeaux #8c2f1f. Le tri des cartes est fait par la scène à partir des valeurs cochées.
Consentement avant l'inscription à un club de randonnée — Checkbox Animated exemple 3

③ Consentement avant l'inscription à un club de randonnée

QuandEn bas du formulaire, une seule case : « J'accepte le règlement du club et la charte de sécurité en montagne ». Tant qu'elle n'est pas cochée, « S'inscrire » reste grisé ; au clavier, Tab puis Espace suffit.
PourquoiC'est la case qu'on ne peut pas rater : la coche franche et l'anneau de focus montrent clairement qu'elle est cochée, au doigt comme au clavier.
RéglagesCouleur verte #3f7d4e, texte sur deux lignes aligné au carré. Le bouton est activé par la scène à l'événement change ; en production, mettez aussi required sur la case.

Comment ça marche

Le bloc est un <label class="cbx-check"> qui contient trois choses : la vraie case <input type="checkbox">, le carré dessiné .cbx-box et le texte. La vraie case est rendue invisible (opacity: 0) mais reste posée exactement sous le carré, à sa taille : elle reçoit les clics, le focus et l'état coché, et le formulaire l'envoie avec son name et sa value. Un clic n'importe où sur le texte coche aussi, puisque tout est dans le label.

Le dessin suit l'état natif par le sélecteur input:checked + .cbx-box. Le carré de 24 px, bord de 2 px #6366f1, prend un fond indigo (transition de 0,3 s). La coche est le pseudo-élément ::after : un rectangle de 6 × 12 px dont seules les bordures droite et basse sont tracées, tourné de 45°. Au repos il est à scale(0) ; coché, il passe à scale(1) en 0,2 s : la coche grandit depuis son centre.

Aucun JavaScript. Les classes sont préfixées cbx- et la racine .fx-0294-root (fond sombre, 300 px de haut) n'est qu'un cadre de présentation : dans un vrai formulaire, retirez son min-height et son fond, le texte prend alors la couleur de votre page.

Accessibilité

  • Vraie case : l'élément natif reste dans la page (ni display:none ni visibility:hidden) : Tab l'atteint, Espace la coche, un lecteur d'écran annonce « case à cocher, Accepter les conditions, non cochée ».
  • Focus visible : au focus clavier, un anneau clair #a5b4fc se dessine autour du carré (input:focus-visible + .cbx-box).
  • Zone de clic : toute la ligne (carré + texte) est cliquable et touchable, pas seulement les 24 px du carré.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, le remplissage et la coche apparaissent sans transition.
  • Obligatoire : pour une case à accepter avant envoi, ajoutez required sur l'input : le navigateur bloque l'envoi et affiche son propre message.

Compatibilité navigateur

CSS seul : :checked, sélecteur d'adjacence, pseudo-élément et transform. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux copies indépendantes, Tab puis Espace, toucher à 390 px, mouvement réduit. L'anneau de focus demande :focus-visible (Chrome 86, Firefox 85, Safari 15.4).

Chrome 86+✓ Complet (mesuré)
Firefox 85+✓ Complet (mesuré)
Safari 15.4+✓ Complet (mesuré dans WebKit)
Edge 86+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 86+✓ Complet (toucher mesuré à 390 px)

Navigateurs plus anciens : la case se coche et s'anime, seul l'anneau de focus clavier manque.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0294-root">
  <label class="cbx-check">
    <input type="checkbox" name="conditions" value="oui">
    <span class="cbx-box" aria-hidden="true"></span>
    <span class="cbx-text">Accepter les conditions</span>
  </label>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Couleur (CSS — border de .cbx-box et fond de input:checked + .cbx-box) #6366f1 Changez les deux pour garder un carré cohérent coché et non coché.
Taille du carré (CSS — width / height de .cbx-box et de l'input) 24px Pour 20 px, décalez aussi la coche (left / top de ::after) et donnez la même taille à l'input invisible.
Vitesse de la coche (CSS — transition de .cbx-box::after) transform .2s Allongez à .35s pour une coche plus visible.
Forme (CSS — border-radius de .cbx-box) 6px 50% donne une case ronde, 2px un carré plus strict.
Cadre de démo (CSS — .fx-0294-root) min-height 300px, fond #0a0a0f, texte blanc Retirez ces trois réglages pour poser la case dans votre formulaire : le texte prend la couleur de la page.
Nom envoyé (HTML — name et value) conditions = oui Ce que reçoit votre serveur quand la case est cochée ; rien n'est envoyé si elle ne l'est pas.

FAQ

Oui. Elle est seulement transparente : son état coché, son name et sa value partent avec le formulaire comme une case normale.
Le code ne le gère pas. Mettez input.indeterminate = true en JavaScript et ajoutez une règle input:indeterminate + .cbx-box qui dessine un trait au lieu de la coche.
Oui : répétez le <label class="cbx-check"> autant de fois que nécessaire dans la racine ; chaque case a son propre état.