Glassmorphism✨ Premium

Neu Toggle

Deux interrupteurs taillés dans la matière : une piste creusée de 64 × 34 px et un grand modèle de 80 × 40 px à icône, dont le bouton en relief glisse de 40 px avec un rebond de 3,7 px de chaque côté et vire au violet ou à l'orange. Vrais boutons role="switch", utilisables au clavier.

CSSToggleInteractive

Mis à jour le

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

3 exemples d'usage

Circuits d'éclairage de la maison — tableau domotique mural — Neu Toggle exemple 1

① Circuits d'éclairage de la maison — tableau domotique mural

QuandÉcran mural de l'entrée : cuisine, garage et terrasse ont chacun leur interrupteur, et un grand modèle commande l'éclairage extérieur au crépuscule.
PourquoiLe bouton qui glisse dans sa piste imite un vrai interrupteur ; le rebond confirme l'action alors que la lampe est souvent dans une autre pièce. Le grand modèle à ampoule qui vire à l'orange se distingue des circuits simples.
RéglagesTailles, ombres et courbe d'origine. Trois .neu-toggle et un .neu-toggle-big à icône d'ampoule ; libellés en #374151 (8,1:1). Un compteur « 1 circuit allumé sur 3 » en role="status" se met à jour au clic. L'écran a la teinte de la matière, cadre noir sur un mur peint.
Mode éco et programmation d'un poêle à granulés — appli du poêle — Neu Toggle exemple 2

② Mode éco et programmation d'un poêle à granulés — appli du poêle

QuandLe soir, depuis le canapé, l'utilisateur passe son poêle en mode éco sur son téléphone ; la programmation du lendemain reste active.
PourquoiLe grand modèle à flamme qui passe à l'orange parle de chauffage sans légende ; un matériau doux pour un objet du foyer, et l'interrupteur simple violet pour un réglage secondaire.
Réglages.neu-toggle-big avec une flamme à la place de la lune ; la ligne d'état passe de « Puissance normale · 7 kW » à « Éco · 4 kW, flamme réduite » (texte en #92400e, 5,6:1). Programmation en .neu-toggle activé. Téléphone posé devant le poêle allumé.
Réverbération et chorus — pédalier d'effets pour guitare — Neu Toggle exemple 3

③ Réverbération et chorus — pédalier d'effets pour guitare

QuandLe guitariste active ses effets sur l'écran de son pédalier numérique : réverbération déjà en route, chorus à ajouter, délai et boost en interrupteurs simples.
PourquoiLe relief reprend les commutateurs des pédales physiques ; la position du bouton se lit de loin, sur scène, sans dépendre de la couleur sous les projecteurs.
RéglagesDeux .neu-toggle-big à icônes d'onde (réverbération allumée, chorus éteint) et deux .neu-toggle. Libellé élargi à 72 px pour aligner les colonnes ; boutons rotatifs décoratifs en relief dans la même matière.

Comment ça marche

Chaque interrupteur est un <button type="button" role="switch" aria-checked> placé dans un <label class="neu-toggle-wrap"> avec son libellé : cliquer le texte bascule aussi l'interrupteur, et un lecteur d'écran annonce « Wi-Fi, interrupteur, activé ». La piste .neu-toggle (64 × 34 px, border-radius: 17px) est creusée par deux ombres internes #b8bec7 4px 4px 8px inset et #fff -4px -4px 8px inset ; le bouton .neu-toggle-knob (26 px, rond) est en relief par deux ombres portées de 3 px / 6 px. Activé (classe .active), il passe de left: 4px à left: 34px et se remplit du dégradé #8b5cf6 → #a78bfa. Le grand modèle .neu-toggle-big (80 × 40 px, bouton de 32 px avec icône SVG) va de 4 à 44 px et vire à l'orange #f59e0b → #f97316, icône en blanc.

Le rebond vient de la courbe cubic-bezier(.68, -.55, .27, 1.55) sur 0,3 s : ses deux valeurs hors de 0–1 font reculer le bouton avant de partir puis dépasser sa cible. Mesuré dans Chromium sur le grand modèle : le bouton descend à 0,3 px (3,7 px en arrière), monte à 47,7 px (3,7 px au-delà de 44) et se pose à 44 px — le même aller-retour à l'extinction. Le JavaScript tient en six lignes : un écouteur par interrupteur bascule .active et aria-checked. Il agit sur tous les .neu-toggle et .neu-toggle-big de la page, sans identifiant : autant d'interrupteurs que voulu.

Le code ne contient que l'effet : aucune règle ni variable du site (pas de --primary), aucun script d'un autre effet, rien qui puisse entrer en collision avec votre feuille de style. Chaque interrupteur est un vrai <button type="button" role="switch"> enveloppé par son <label> : Tab l'atteint, Espace et Entrée le basculent, un clic sur le libellé aussi, et le script tient en une boucle qui met à jour aria-checked. Comme toute la famille, la surface est déclarée par .neu-toggle-scene (background: #e0e5ec, padding: 28px, border-radius: 24px) : le relief ne dépend pas du fond de votre page.

Accessibilité

  • Clavier et lecteurs d'écran : mesuré dans Chromium et Firefox, Tab atteint les deux interrupteurs, Espace et Entrée les basculent, aria-checked suit (« true » / « false »). Le nom accessible vient du label englobant (« Wi-Fi », « Mode sombre »). Le focus est marqué par outline: 2px solid #8b5cf6 à 3 px du bord (3,3:1 sur la matière, au-dessus des 3:1 demandés).
  • Contraste : les libellés #6b7280 sur #e0e5ec mesurent 3,8:1 pour 13,6 px en graisse 600, sous le seuil de 4,5:1 — passez-les en #374151 (8,1:1), comme dans les scènes. La piste n'existe que par ses ombres internes (#b8bec7, 1,5:1) : éteint, l'interrupteur est une forme très pâle. Allumé, le bouton violet (dégradé #8b5cf6 → #a78bfa) contraste de 3,3:1 à 2,2:1 selon le point du dégradé ; l'orange #f59e0b du grand modèle seulement à 1,7:1 sur la matière — l'état reste lisible par la position du bouton, pas par sa couleur.
  • Position plutôt que couleur : l'état se lit d'abord par le côté où se trouve le bouton (gauche éteint, droite allumé), ce qui ne dépend pas de la vision des couleurs. Pour un réglage important, ajoutez un texte d'état (« 2 circuits allumés »).
  • prefers-reduced-motion absent du code : le rebond (recul et dépassement de 3,7 px) joue même quand le système demande moins d'animation. Il est bref et déclenché par l'utilisateur ; pour le supprimer : @media (prefers-reduced-motion: reduce) { .neu-toggle-knob, .neu-toggle-big-knob { transition: none } }.

Compatibilité navigateur

CSS : box-shadow internes et portées, transition avec cubic-bezier hors de 0–1, linear-gradient, flexbox avec gap. JavaScript : querySelectorAll, classList.toggle, setAttribute, sans dépendance. Mesuré dans Chromium, Firefox et WebKit (Playwright) : bascule à la souris, au clavier et par clic sur le libellé, rebond identique. Le gap des conteneurs flex demande Chrome 84, Firefox 63, Safari 14.1.

Chrome 84+✓ Complet
Firefox 63+✓ Complet
Safari 14.1+✓ Complet
Edge 84+✓ Complet
Mobile iOS 14.5+✓ Complet (toucher le libellé bascule aussi)
Android Chrome✓ Complet

Sans JavaScript, les interrupteurs s'affichent dans leur état initial et ne basculent pas : gardez l'état réel côté serveur ou doublez-les d'une case à cocher si l'action est critique. Avant le gap des conteneurs flex, le libellé touche l'interrupteur.

Le code

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

index.html — structure
<div class="neu-toggle-scene">
  <label class="neu-toggle-wrap">
    <span class="neu-toggle-label">Wi-Fi</span>
    <button type="button" class="neu-toggle active" role="switch" aria-checked="true">
      <span class="neu-toggle-knob"></span>
    </button>
  </label>
  <label class="neu-toggle-wrap">
    <span class="neu-toggle-label">Mode sombre</span>
    <button type="button" class="neu-toggle-big" role="switch" aria-checked="false">
      <span class="neu-toggle-big-knob"><svg viewBox="0 0 24 24" aria-hidden="true">…</svg></span>
    </button>
  </label>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Neu Toggle, prêt à coller — et les 840 effets. Ou 299 € TTC une fois, accès à vie.

Personnaliser

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

Option / propriétéDéfautEffet
Rebond (CSS — transition: .3s cubic-bezier(.68, -.55, .27, 1.55)) 0,3 s, recul et dépassement de 3,7 px cubic-bezier(.34, 1.56, .64, 1) garde le dépassement à l'arrivée sans le recul au départ. ease supprime le rebond. Au-delà de 0,4 s, l'interrupteur paraît mou.
Couleur allumée (CSS — .neu-toggle.active .neu-toggle-knob, .neu-toggle-big.active .neu-toggle-big-knob) violet #8b5cf6 → #a78bfa ; orange #f59e0b → #f97316 Changez le dégradé et l'ombre colorée rgba(…, .4) 0 2px 8px ensemble. Vert « en marche » : #16a34a → #22c55e.
Icône du grand modèle (HTML — <svg> dans .neu-toggle-big-knob) lune (Mode sombre) N'importe quel SVG 24 × 24 en trait, affiché à 16 px : stroke gris éteint, blanc allumé. Gardez aria-hidden="true" : le nom vient du libellé.
État initial (HTML — classe active + aria-checked) Wi-Fi allumé, Mode sombre éteint Posez les deux ensemble : class="neu-toggle active" aria-checked="true". Pour réagir au changement, écoutez click sur le bouton et lisez aria-checked.
Teinte de la matière (CSS — #e0e5ec, ombres #b8bec7 / #fff) gris bleuté clair Piste, bouton éteint et surface .neu-toggle-scene doivent partager la même teinte ; changez les trois avec une paire d'ombres de la même famille.

FAQ

Un <button role="switch"> s'annonce comme un interrupteur (« activé / désactivé ») et se bascule à Espace comme à Entrée. Dans un formulaire envoyé au serveur, une <input type="checkbox" role="switch"> cachée visuellement sous la piste transmettrait la valeur toute seule ; ici, lisez aria-checked en JavaScript.
Ajoutez votre propre écouteur après le script de l'effet : btn.addEventListener('click', () => console.log(btn.getAttribute('aria-checked'))). Les écouteurs s'exécutent dans l'ordre d'ajout : le vôtre lit l'état déjà basculé.
Neu Button lance une action et s'enfonce ; Neu Toggle mémorise un état à deux positions, visible par le côté où se trouve le bouton, avec un rebond au changement. Pour « allumer la terrasse », le toggle ; pour « lancer un café », le bouton.