Glass Input
Deux champs de saisie translucides de 240 px — e-mail et message — posés sur deux orbes floues : fond blanc à 6 %, flou d'arrière-plan de 16 px, et au focus une bordure violette, un fond qui s'éclaircit à 8 % et un anneau de 3 px, en 0,3 s, sans une ligne de JavaScript.
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



Comment ça marche
Tout est en CSS. Chaque champ (.glass-input-field, sur un input comme sur un textarea) est une vitre : fond rgba(255,255,255,.06), backdrop-filter: blur(16px) (et sa forme -webkit- pour Safari), bordure blanche à 10 %, coins de 10 px, padding: 10px 14px, texte blanc de 12,8 px (.8rem). Mesuré dans une page vierge : 240 × 37 px pour la ligne dans Chromium 151 (35 px dans Firefox 153, qui calcule autrement la hauteur de ligne), 240 × 60 px pour la zone de message (min-height: 60px, resize: none). Au-dessus de chaque champ, un libellé de 10,9 px en blanc à 50 %. Derrière, la scène de 300 × 220 px pose deux orbes déjà floues (filter: blur(50px)) : violette #7c3aed de 140 px en haut à droite, cyan #0891b2 de 100 px en bas à gauche, toutes deux à 40 % d'opacité — c'est elles que le verre adoucit.
Le focus fait tout le travail visible. .glass-input-field:focus change trois choses à la fois, avec transition: .3s : la bordure passe au violet rgba(139,92,246,.5), le fond monte de 6 à 8 % de blanc, et deux ombres apparaissent — un anneau plein de 3 px violet à 15 % et une lueur de 16 px vers le bas. Mesuré au clavier dans Chromium, Firefox et WebKit : Tab donne le focus au champ e-mail, l'anneau et la bordure sont en place 0,45 s plus tard, Tab suivant passe à la zone de message. Le contour natif est retiré (outline: 0) : c'est l'anneau qui le remplace.
Trois détails du HTML et du CSS comptent plus qu'ils n'en ont l'air. La zone de message s'ouvre et se ferme sur la même ligne, <textarea …></textarea> : la moindre indentation entre les balises deviendrait sa valeur (six espaces mesurés dans value lors d'un essai), et le texte d'aide « Votre message... » ne s'afficherait jamais ; ici :placeholder-shown est vrai pour les deux champs. Les libellés portent for, et les champs les identifiants glass-input-email et glass-input-message : un clic sur « Message » place le curseur dans la zone, et un lecteur d'écran annonce le libellé. Enfin le flou est écrit aussi en -webkit-backdrop-filter, la seule forme que lit Safari avant la version 18.
Accessibilité
- Anneau de focus trop pâle : l'anneau livré (violet à 15 %) ressort à 1,14:1 sur le fond
#0a0a0fet la bordure violette à 1,92:1 sur le champ — sous le seuil de 3:1 attendu d'un indicateur de focus (WCAG 1.4.11). Le contour natif étant retiré, montez l'anneau :box-shadow: 0 0 0 3px rgba(167,139,250,.6)donne 3,24:1, et une bordurergba(167,139,250,.85)4,34:1 sur le champ éclairci — c'est le réglage des trois scènes de cette page. - Texte d'aide : le placeholder en blanc à 30 % mesure 2,71:1 sur le champ (seuil 4,5:1). Il ne remplace pas un libellé — les deux libellés sont là et reliés — mais si l'aide porte une information utile (« Ex. : tache au plafond… »), passez-le à 55 % de blanc. Le libellé à 50 % mesure 5,33:1 sur
#0a0a0f; sur une photo claire, vérifiez-le ou donnez-lui une ombre portée. - Libellés et identifiants :
label for+idrelient chaque libellé à son champ (mesuré :label.controlrenvoie le champ). Si vous collez deux formulaires dans la même page, renommez les identifiants du second, sinon le second libellé enverra le curseur dans le premier champ. Ajoutezautocomplete="email"sur le champ e-mail etrequiredlà où la saisie est obligatoire. - Mouvement : la seule animation est la transition de 0,3 s au focus ; rien ne bouge seul, les orbes sont fixes. Aucun réglage
prefers-reduced-motionn'est nécessaire. - Transparence réduite : rien n'est prévu pour
prefers-reduced-transparency. Sur une photo très chargée, les utilisateurs qui l'activent gagneraient à un fond plein :@media (prefers-reduced-transparency: reduce) { .glass-input-field { background: #1f2430; backdrop-filter: none } }.
Compatibilité navigateur
CSS seul : backdrop-filter, ::placeholder, :focus, box-shadow, filter: blur() sur les orbes. Zéro JavaScript, zéro dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : même valeur calculée (blur(16px)), même anneau au focus, aucune erreur ; le flou peint n'a été vu que dans Chromium, les captures automatisées de Firefox et WebKit ne peignant pas backdrop-filter. Seule différence visible, la hauteur de la ligne : 37 px dans Chromium, 35 px dans Firefox. Safari a besoin du préfixe -webkit-backdrop-filter jusqu'à la version 17 : il est dans le CSS vendu.
Sans backdrop-filter (Firefox avant 103, Chrome avant 76), le champ reste lisible : un fond blanc à 6 % sans flou, la bordure, le texte et l'anneau de focus restent en place — on voit simplement les orbes nettes derrière. Sur un fond très contrasté, ajoutez un fond de secours plus opaque dans @supports not (backdrop-filter: blur(1px)).
Le code
Structure HTML à coller dans votre page (le CSS + JS sont inclus avec Premium) :
<div class="demo-preview">
<div class="glass-input-scene">
<div class="glass-input-orb glass-input-orb--1"></div>
<div class="glass-input-orb glass-input-orb--2"></div>
<div class="glass-input-group">
<label class="glass-input-label" for="glass-input-email">…</label>
<input type="email" id="glass-input-email" class="glass-input-field" placeholder="…">
</div>
<div class="glass-input-group">
<label class="glass-input-label" for="glass-input-message">…</label>
<textarea id="glass-input-message" class="glass-input-field glass-input-field--textarea" placeholder="…"></textarea>
</div>
</div>
</div>
Le code complet HTML + CSS + JS de Glass 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éfaut | Effet |
|---|---|---|
Opacité du verre (CSS — .glass-input-field { background: rgba(255,255,255,.06) }) |
6 % au repos, 8 % au focus | Sur une photo claire ou chargée, montez à 10-14 % pour que le texte saisi garde son contraste ; sur fond sombre et uni, 4 % suffit. Gardez l'écart entre repos et focus : c'est lui qui fait « s'allumer » le champ. |
Force du flou (CSS — backdrop-filter: blur(16px) et -webkit-backdrop-filter) |
16 px | 8 px laisse deviner les formes derrière (les ardoises restent reconnaissables), 24 px les fond en couleurs. Changez les deux propriétés ensemble, sinon Safari ancien garde l'ancienne valeur. |
Anneau et lueur de focus (CSS — .glass-input-field:focus { box-shadow: … }) |
anneau 3 px violet à 15 % + lueur 0 4px 16px à 10 %, bordure violette à 50 % | Pour un focus lisible sur une photo : box-shadow: 0 0 0 3px rgba(167,139,250,.6), 0 4px 16px rgba(139,92,246,.25) et border-color: rgba(167,139,250,.85) (3,24:1 et 4,34:1 mesurés). Pour une autre couleur de marque, changez les trois teintes violettes ensemble. |
Texte d'aide (CSS — .glass-input-field::placeholder { color: rgba(255,255,255,.3) }) |
blanc à 30 % (2,71:1) | Passez à 55 % si l'aide porte une information. Le texte d'aide d'une zone de message ne s'affiche que si rien n'est écrit entre <textarea> et </textarea>, pas même un retour à la ligne : gardez les deux balises collées. |
Taille des champs (CSS — .glass-input-group { width: 240px }, .glass-input-field--textarea { min-height: 60px }) |
240 px de large, zone de message de 60 px | Les champs prennent 100 % de leur groupe : changez la largeur du groupe (ou width: 100% dans un formulaire fluide). Pour une zone de message plus haute, montez min-height ; resize: none empêche l'utilisateur de l'agrandir — retirez-le si les messages sont longs. |
Orbes de fond (CSS — .glass-input-orb--1, --2) |
violette 140 px et cyan 100 px, floues à 50 px, opacité 40 % | Elles ne servent qu'à donner au verre quelque chose à flouter dans la démo. Sur votre page, supprimez-les et posez les champs sur votre image : c'est elle qui fera l'effet. La scène de 300 × 220 px (.glass-input-scene) peut disparaître avec elles. |
FAQ
<textarea> et </textarea> devient sa valeur, espaces et retours à la ligne compris : six espaces d'indentation suffisent à donner une valeur non vide, et :placeholder-shown reste faux pour toujours (mesuré). Dans le code vendu, les deux balises sont collées. Si votre éditeur ou votre outil de formatage réindente le HTML, vérifiez qu'il ne glisse pas de blanc entre elles.