Glassmorphism✨ Premium

Neu Card

Une carte de 280 px en relief (ombres 10 px / 20 px), un avatar de 56 px creusé dans la même matière et une jauge de 8 px en creux remplie d'un dégradé violet qui respire toutes les 2 s : relief et creux réunis dans un seul bloc, pur CSS.

CSSCardNeumorphism

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

Fiche de l'aspirateur robot — appli de maison connectée — Neu Card exemple 1

① Fiche de l'aspirateur robot — appli de maison connectée

QuandL'utilisateur ouvre la fiche de son robot : icône dans son creux, état du dernier passage, jauge de batterie pendant la recharge.
PourquoiLe relief donne à la fiche l'aspect d'un objet, comme l'appareil qu'elle représente ; la jauge en creux qui respire dit que la charge est en cours, sans pourcentage qui défile ni animation de chargement.
RéglagesCarte, avatar et jauge d'origine (280 px, 72 %). Icône remplacée par un robot vu de dessus, texte d'état en deux phrases, ligne « Batterie · pleine dans 25 min — 72 % » ajoutée sous la jauge, qui reçoit role="progressbar". Dalle de tablette en #e0e5ec : la surface de .neu-card-scene s'y fond, colonne de tuiles en creux à droite.
Instrument loué à un élève — appli d'une école de musique — Neu Card exemple 2

② Instrument loué à un élève — appli d'une école de musique

QuandLe parent consulte la fiche du violon 3/4 loué à son enfant : prochaine révision, état des cordes, avancement de la location sur l'année scolaire.
PourquoiUne carte palpable convient à un objet physique prêté, et la jauge dit où en est la location sur dix mois. Le rendu doux reste lisible pour des parents qui ne vivent pas dans les applis.
RéglagesRemplissage passé de 72 % à 20 % (width sur .neu-card-bar-fill) : mois 2 sur 10. Icône violon, numéro d'inventaire dans le titre ; mensualité, taille et frise des mois à côté. Valeur écrite en clair en #6d28d9 (5,6:1).
Fiche d'un cheval en pension — appli d'une écurie — Neu Card exemple 3

③ Fiche d'un cheval en pension — appli d'une écurie

QuandLe propriétaire consulte la fiche de son cheval : ration, prochaine ferrure, sorties au pré de la semaine.
PourquoiUn rendu sobre et doux pour un public peu technophile ; la jauge suit l'objectif de sorties (4 sur 6) et la pulsation rappelle que la semaine n'est pas finie.
RéglagesRemplissage à 67 %, icône fer à cheval, texte de ration sur deux lignes. Les jours de sortie sont doublés par des pastilles vertes dans la tuile voisine, pour ne pas confier l'information à la seule jauge.

Comment ça marche

Trois niveaux de profondeur, tous dans la teinte #e0e5ec. La carte .neu-card (280 px de large, padding: 28px, border-radius: 20px, colonne flex avec 16 px d'écart) sort de la surface par deux ombres opposées : #b8bec7 10px 10px 20px et #fff -10px -10px 20px. Au survol, elles s'élargissent à 14 px / 28 px en 0,3 s : la carte monte vers le doigt. L'avatar .neu-card-avatar (56 px, rond) fait l'inverse : ombres internes inset 4px 4px 8px, il est creusé dans la carte, et son icône SVG est tracée en violet #8b5cf6 à 1,5 px. Le titre h3 (16 px, 700, #374151) et le texte (13,1 px, #6b7280, interligne 1,5) n'ont pas d'effet propre.

La jauge .neu-card-bar est une rigole de 8 px (ombres internes 2 px / 4 px, overflow: hidden). Son remplissage .neu-card-bar-fill occupe 72 % par défaut, dégradé #8b5cf6 → #a78bfa avec un halo violet de 8 px, et porte l'animation neuBarPulse : opacité 1 → 0,7 → 1 sur 2 s en ease-in-out, en boucle. C'est le seul mouvement de l'effet — il signale une valeur « vivante » (une charge, une progression) sans rien déplacer. Le taux se change en une ligne : width sur le remplissage.

La carte apporte sa propre surface, parce que le neumorphisme dépend entièrement du fond : posée sur un noir comme #0a0a0f, l'ombre #fff -10px -10px 20px dessinerait un halo blanc tout autour, le contraire d'un relief. .neu-card-scene déclare donc background: #e0e5ec, padding: 44px (assez pour l'ombre de survol, 14 + 28 = 42 px) et border-radius: 24px. Mesuré dans Chromium et Firefox, collée dans une page blanche puis noire : l'ombre claire tombe sur la matière, rien ne déborde sur le fond de la page.

Accessibilité

  • prefers-reduced-motion absent du code : la pulsation de la jauge tourne en boucle même quand le système demande moins d'animation. Elle est douce (opacité seulement, pas de déplacement), mais infinie : ajoutez @media (prefers-reduced-motion: reduce) { .neu-card-bar-fill { animation: none } }, la jauge reste lisible à plein.
  • Contraste : le titre #374151 sur #e0e5ec mesure 8,1:1, mais le texte #6b7280 (13,1 px) seulement 3,8:1, sous le seuil de 4,5:1 — passez-le en #4b5563 (6,0:1). Le remplissage violet contre la rigole va de 3,3:1 au départ à 2,2:1 en bout de dégradé (#a78bfa), sous les 3:1 demandés aux éléments graphiques : pour une jauge porteuse d'information, finissez le dégradé sur #7c3aed ou écrivez la valeur en clair. Les bords de la carte, eux, n'existent que par l'ombre #b8bec7 (1,5:1) : ne confiez pas à la seule forme de la carte une information importante.
  • Jauge muette : .neu-card-bar est un div sans rôle, un lecteur d'écran n'en dit rien. Ajoutez role="progressbar", aria-valuenow, aria-valuemin, aria-valuemax et un aria-label, ou écrivez la valeur en clair sous la jauge (« Batterie 72 % ») — les trois scènes font les deux.
  • Icône : le SVG de l'avatar n'a pas de texte alternatif ; s'il est décoratif, posez aria-hidden="true". La carte n'est pas interactive (le survol est purement visuel) : rien à atteindre au clavier, et si vous la rendez cliquable, enveloppez-la dans un vrai lien ou bouton.

Compatibilité navigateur

CSS seul : box-shadow multiple et inset, linear-gradient, @keyframes sur opacity, flexbox avec gap. Zéro JavaScript, zéro dépendance. Rendu mesuré identique dans Chromium, Firefox et WebKit (Playwright). Le gap des conteneurs flex demande Chrome 84, Firefox 63, Safari 14.1. La carte fait 280 px marge intérieure comprise parce que le bloc .demo-preview du code pose box-sizing: border-box ; si vous ne gardez pas ce bloc, elle passe à 336 px (280 + 2 × 28) — ajoutez box-sizing: border-box à .neu-card pour garder 280.

Chrome 84+✓ Complet
Firefox 63+✓ Complet
Safari 14.1+✓ Complet
Edge 84+✓ Complet
Mobile iOS 14.5+✓ Complet (pas de survol au doigt)
Android Chrome✓ Complet

Avant le gap des conteneurs flex, les éléments de la carte se collent les uns aux autres : ajoutez des marges si vous visez Safari 14.0 ou plus ancien. Sans animation CSS, la jauge reste pleine et immobile.

Le code

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

index.html — structure
<div class="demo-preview">
  <div class="neu-card-scene">
    <div class="neu-card">
      <div class="neu-card-avatar"><svg viewBox="0 0 24 24">…</svg></div>
      <h3>…</h3>
      <p>…</p>
      <div class="neu-card-bar">
        <div class="neu-card-bar-fill"></div>
      </div>
    </div>
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Neu Card, 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
Taux de la jauge (CSS — .neu-card-bar-fill { width: 72% }) 72 % Posez la valeur en ligne (style="width: 40%") ou en JavaScript ; pensez à mettre à jour aria-valuenow en même temps.
Pulsation (CSS — animation: 2s … neuBarPulse, opacité 1 → 0,7) 2 s, en boucle animation: none pour une jauge fixe (valeur atteinte, charge terminée). Ralentir à 3s la rend plus calme ; descendre l'opacité basse sous 0,5 la fait clignoter.
Relief de la carte (CSS — 10px 10px 20px, survol 14px 14px 28px) 10 px / 20 px Réduisez à 6 px / 12 px pour une liste de plusieurs cartes serrées. Le padding de .neu-card-scene doit rester supérieur à décalage + flou du survol (42 px par défaut, d'où 44 px).
Teinte de la matière (CSS — #e0e5ec, ombres #b8bec7 / #fff) gris bleuté clair Changez fond, carte, avatar et rigole ensemble, avec une ombre plus sombre et une plus claire de la même famille. Exemple crème : #efe9e1, ombres #d3cbc0 et #ffffff.
Couleur de la jauge (CSS — linear-gradient(135deg, #8b5cf6, #a78bfa)) violet Vert batterie #16a34a → #4ade80, ambre #d97706 → #fbbf24. Changez aussi le halo box-shadow: rgba(…, .4) 0 0 8px et l'icône de l'avatar (stroke).

FAQ

La valeur, c'est la largeur du remplissage : .neu-card-bar-fill { width: 72% } dans le code vendu. Écrivez la vôtre en ligne (style="width: 40%") ou en JavaScript : fill.style.width = valeur + '%'. Pour que la barre glisse au lieu de sauter, ajoutez transition: width .4s ease au remplissage. Donnez aussi un sens à la barre pour les lecteurs d'écran : role="progressbar", aria-valuemin="0", aria-valuemax="100" et aria-valuenow sur .neu-card-bar, mis à jour avec la largeur. Une fois la valeur atteinte, animation: none arrête la respiration.
Oui, rien n'est lié à un identifiant. Mettez-les toutes dans une seule surface (une grille avec gap d'au moins 40 px, pour que les ombres ne se chevauchent pas) plutôt que de répéter .neu-card-scene autour de chacune.
Neu Button est une commande qui s'enfonce au clic. Neu Card est un conteneur d'information qui combine trois profondeurs dans le même bloc — carte en relief, avatar en creux, jauge en creux remplie — et, avec Neu Clock, l'un des deux effets de la famille qui bougent sans interaction : la jauge respire toute seule.