Glassmorphism✨ Premium

Neu Input

Des champs de saisie de 46 px creusés dans la matière par deux ombres internes, dont une recherche avec loupe incrustée ; au focus, un liseré violet de 3 px s'ajoute au creux. Pur CSS, libellé relié à son champ.

CSSFormFocus

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

Chercher une station — poste de radio Internet de cuisine — Neu Input exemple 1

① Chercher une station — poste de radio Internet de cuisine

QuandL'utilisateur tape « jazz » sur l'écran de son poste de cuisine ; trois stations apparaissent sous le champ.
PourquoiLe champ creusé fait partie de l'objet comme un afficheur, et la loupe incrustée suffit à dire « recherche » sans libellé visible sur un écran étroit.
Réglages.neu-search-wrap d'origine sur toute la largeur de l'écran, valeur saisie, aria-label="Rechercher une station". Résultats en liste avec le mot cherché surligné en #6d28d9. Écran à droite, grille de haut-parleur à gauche, même matière.
Saisir la clé Wi-Fi — écran d'un lave-linge connecté — Neu Input exemple 2

② Saisir la clé Wi-Fi — écran d'un lave-linge connecté

QuandÀ la mise en service, l'utilisateur entre le nom de son réseau puis la clé sur l'écran de la machine.
PourquoiUn champ en creux sur un appareil gris clair reste cohérent avec la façade, et le liseré du focus montre quel champ reçoit la saisie — d'où l'intérêt de le rendre plus contrasté qu'à l'origine sur un écran vu de biais.
RéglagesDeux <label class="neu-input-group"> côte à côte (228 et 230 px), le second en type="password". Libellés en #374151. Panneau de commande en matière #e0e5ec au-dessus du hublot.
Chercher un échantillon — banque de sons d'un sampler logiciel — Neu Input exemple 3

③ Chercher un échantillon — banque de sons d'un sampler logiciel

QuandLe beatmaker cherche « caisse claire sèche » dans les 2 418 échantillons du dossier Batterie.
PourquoiLe creux rappelle les afficheurs des machines matérielles qu'imite le logiciel ; la loupe incrustée et le liseré au focus suffisent dans une interface déjà chargée de boutons.
RéglagesRecherche d'origine élargie à la colonne principale (350 px), aria-label="Rechercher un échantillon". Dossier actif en creux (mêmes ombres internes que le champ), étiquettes en relief, résultats avec forme d'onde.

Comment ça marche

Le creux tient dans une seule règle. .neu-input (largeur 100 %, 46 px de haut, border-radius: 12px, sans bordure ni contour) a le fond de la matière #e0e5ec et deux ombres internes : #b8bec7 3px 3px 6px inset en haut à gauche, #fff -3px -3px 6px inset en bas à droite. La lumière semble venir d'en haut à gauche et le champ se lit comme une cavité. Le texte tapé est en #374151 (14 px, police Inter si elle est chargée), le texte d'aide en #9ca3af. Au focus, une troisième ombre s'ajoute aux deux premières : rgba(139, 92, 246, .2) 0 0 0 3px, un liseré violet pâle autour du creux, en transition de 0,3 s.

La recherche place une loupe SVG de 18 px (trait #9ca3af) en position: absolute à 14 px du bord gauche, centrée par top: 50% et translateY(-50%) ; le champ décale son texte de 40 px pour lui laisser la place. L'ensemble .neu-input-scene fait 280 px de contenu, en colonne avec 16 px d'écart.

Deux choix rendent les champs utilisables sans souris ni écran. Le libellé enveloppe son champ (<label class="neu-input-group">, texte dans un span) : le lien est implicite, un clic sur « Nom complet » donne le focus au champ et input.labels.length vaut 1 ; un <label> posé à côté, sans for, ne serait relié à rien. La recherche, qui n'a pas de libellé visible, porte aria-label="Rechercher", et sa loupe aria-hidden. Et, comme toute la famille, .neu-input-scene déclare sa surface (background: #e0e5ec, padding: 28px, border-radius: 24px, box-sizing: content-box) : sur un fond noir, les creux gris clair se liraient comme des pavés plats.

Accessibilité

  • Focus presque invisible : le code supprime le contour du navigateur (outline: 0) et le remplace par un liseré rgba(139, 92, 246, .2) qui, posé sur #e0e5ec, ne contraste qu'à 1,2:1 avec la matière. Un utilisateur au clavier voit mal quel champ est actif. Remplacez-le par un liseré plein : .neu-input:focus-visible { box-shadow: #b8bec7 3px 3px 6px inset, #fff -3px -3px 6px inset, #8b5cf6 0 0 0 2px } (3,3:1) — le creux reste, le liseré devient lisible.
  • Contraste : le texte tapé #374151 mesure 8,1:1, mais le libellé #6b7280 (12,5 px, 600) 3,8:1 et le texte d'aide #9ca3af 2,0:1, sous le seuil de 4,5:1. Passez le libellé en #374151 (comme dans les scènes) et ne mettez dans le texte d'aide rien d'indispensable : il disparaît dès la première lettre.
  • Limites du champ : la cavité n'existe que par l'ombre #b8bec7 (1,5:1), sous les 3:1 demandés aux limites d'un champ (WCAG 1.4.11). Pour un formulaire important (paiement, administration), ajoutez une bordure 1px solid #9ca3af.
  • Noms : vérifié dans Chromium et Firefox, le premier champ s'appelle « Nom complet » (libellé englobant, un clic sur le texte donne le focus) et la recherche « Rechercher ». Si vous ajoutez des champs sans libellé visible, donnez-leur un aria-label : le texte d'aide ne remplace pas un nom.

Compatibilité navigateur

CSS seul : box-shadow internes multiples, ::placeholder, :focus, transition, SVG positionné en absolu, flexbox avec gap. Zéro JavaScript, zéro dépendance. Rendu identique mesuré dans Chromium, Firefox et WebKit (Playwright). 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 (texte à 14 px : iOS zoome à la saisie sous 16 px)
Android Chrome✓ Complet

Sans box-shadow, les champs deviennent des rectangles gris arrondis sans bordure, toujours utilisables mais difficiles à repérer. Sur iPhone, une police de moins de 16 px fait zoomer la page au focus : passez .neu-input à 1rem pour un formulaire mobile.

Le code

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

index.html — structure
<div class="neu-input-scene">
  <label class="neu-input-group">
    <span class="neu-input-label">Nom complet</span>
    <input type="text" class="neu-input" placeholder="…">
  </label>
  <div class="neu-search-wrap">
    <svg viewBox="0 0 24 24" aria-hidden="true">…</svg>
    <input type="text" class="neu-input" placeholder="Rechercher..." aria-label="Rechercher">
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Neu Input, 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
Profondeur du creux (CSS — 3px 3px 6px inset) 3 px de décalage, 6 px de flou 5px 5px 10px pour un champ plus profond (zone de saisie principale), 2px 2px 4px pour des champs denses. Changez les deux ombres ensemble, et celles de :focus aussi.
Liseré de focus (CSS — rgba(139, 92, 246, .2) 0 0 0 3px) violet à 20 %, 3 px Contraste mesuré 1,2:1 : passez à #8b5cf6 0 0 0 2px (3,3:1) ou #6d28d9 (5,6:1) pour un focus lisible au clavier.
Hauteur et rayon (CSS — height: 46px; border-radius: 12px) 46 × 12 px Champ de recherche en pilule : border-radius: 23px. Ne descendez pas sous 40 px de haut sur écran tactile.
Taille du texte (CSS — font-size: .88rem) 14 px Passez à 1rem (16 px) pour éviter le zoom automatique d'iOS au focus.
Teinte de la matière (CSS — #e0e5ec, ombres #b8bec7 / #fff) gris bleuté clair Le champ et la surface .neu-input-scene partagent la même teinte : changez-les ensemble, avec une paire d'ombres de la même famille.

FAQ

Parce que le liseré de focus d'origine est un violet à 20 % d'opacité (1,2:1 sur la matière) et que le contour du navigateur est supprimé. Remplacez la troisième ombre de .neu-input:focus par #8b5cf6 0 0 0 2px : le rendu reste neumorphique et le focus devient lisible.
Reprenez la structure du premier champ : <label class="neu-input-group"><span class="neu-input-label">E-mail</span><input class="neu-input" type="email"></label>. Le libellé englobant relie le texte au champ sans identifiant, donc sans risque de doublon si le formulaire apparaît deux fois.
Les deux creusent une piste dans la matière, mais Neu Input reçoit du texte et ne réagit qu'au focus, alors que Neu Slider est un curseur à faire glisser dont la piste se remplit d'un dégradé violet jusqu'à la poignée en relief.