Générateur CSS pour un effet de verre haute résolution
(glass3d.dev)- Fournit une méthode pour créer un effet de verre haute résolution avec du code CSS
- Applique des filtres visuels comme blur, luminosité (brightness), saturation (saturate) ainsi que des ombres multicouches
- Utilise des pseudo-elements pour produire des effets de calques avant/arrière et de texture
- Peut être appliqué et personnalisé sur diverses interfaces avec une seule classe CSS concise
- Pratique pour introduire rapidement un effet de verre haute résolution moderne dans des projets web
Introduction
Ce code CSS est spécialement conçu pour générer un effet de verre haute résolution dans une interface web. Il permet un rendu plus fin et plus profond que les effets de glassmorphism classiques, et il suffit d’appliquer une seule classe CSS pour visualiser intuitivement le résultat.
Contenu principal
- La classe
.glass3dcombine divers filtres visuels comme blur (32px), luminosité (0.85), saturation (2.5), ainsi que l’ajout de couleur et de texture de bruit - Une composition en plusieurs niveaux de box-shadow reproduit une sensation de verre réellement en volume
- Le pseudo-élément
::beforesuperpose backdrop-filter, couleur et image de fond bruitée pour créer transparence d’arrière-plan et texture en relief - Le pseudo-élément
::afterajoute une ombre interne (inset) pour donner l’impression que la lumière se reflète sur une véritable surface en verre - La séparation via z-index structure l’affichage pour éviter les conflits entre calques d’effets
- Le sélecteur
.glass3d > *garantit que le contenu des éléments enfants reste toujours au premier plan
Contexte d’utilisation et avantages
- Permet de créer une interface à effet de verre moderne et tendance avec une seule classe CSS, sans bibliothèque ni dépendance externe
- Très utile pour les développeurs frontend web, car il s’applique et s’étend facilement à des systèmes de design UI, cartes, pop-ups et boutons
- Grâce à l’utilisation de véritables images de motif pour la texture, à différentes combinaisons de couleurs et à des effets d’ombre en plusieurs étapes, cette approche offre davantage de profondeur et de nuances que les techniques de glassmorphism classiques
1 commentaires
Discussion Hacker News
J’ai créé une version qui applique un véritable effet de réfraction aux éléments de la page en JavaScript, ça vaut le coup d’y jeter un œil : https://real-glass.vercel.app/
Cet effet a la limite de ne flouter que les pixels situés juste derrière la surface ; je recommande l’article de Josh Comeau qui explique très bien ce phénomène (https://www.joshwcomeau.com/css/backdrop-filter/#the-issue) ainsi que la discussion Hacker News (https://news.ycombinator.com/item?id=42302907). C’est un point assez important si l’arrière-plan bouge, mais en général peu important s’il est fixe.
border-radiusvia un masque SVG. Ça fonctionnait bien sur un élément codé en dur, mais je réfléchis encore à une manière de l’utiliser dans toute une bibliothèque de composants où leborder-radiuschange selon la marque ou les container queries.C’est plutôt joliment réalisé, mais sans l’effet de réfraction du verre, on perd la forte séparation visuelle en couches de Liquid Glass. Quand on regarde les ressources de design de Material, on voit qu’elles insistent sur le fait qu’une app doit être composée de couches 3D cohérentes en mouvement. Mais en pratique, si on l’implémente en 2D et que tous les éléments se mélangent, il devient très difficile de distinguer les couches ; il arrive souvent que les gens ne trouvent pas les boutons d’action dans les coins. Le mouvement aide à différencier le chrome du contenu, mais visuellement ça ne ressort pas beaucoup. À mon avis, le plus grand atout de Liquid Glass, c’est l’edge distortion : cela crée, quand le contenu bouge, un mouvement non linéaire immédiatement perceptible par l’œil humain. Quand il y a du mouvement, la séparation des couches devient plus nette. Or cet élément essentiel de réfraction manque ici. Implémenter l’edge distortion avec des filtres SVG n’est pas simple, et au final c’est un travail assez complexe ; la décomposition étape par étape ici permet de mesurer la complexité : https://atlaspuplabs.com/blog/liquid-glass-but-in-css/…. J’ai aussi trouvé une collection CodePen Spark qui rassemble plusieurs tentatives d’implémentation de Liquid Glass, ainsi qu’une bonne référence réalisée avec du SVG codé en dur : https://codepen.io/spark/453 https://codepen.io/lucasromerodb/pen/vEOWpYM
L’effet en lui-même est sympa, mais je ne ressens pas vraiment un rendu « verre ». La différence la plus immédiate, c’est que la lumière ne réagit pas du tout au bevel. Je m’attendrais aussi à ce que la lumière se reflète dans le verre et influence l’éclairage et les couleurs ; un simple effet de blur ne suffit pas. Le verre peut aussi produire des ombres particulières, notamment des caustics, mais Apple ne semble pas être allé jusque-là non plus. Pour l’instant, l’ombre ressemble plutôt à un simple drop shadow, ce qui renforce une impression de carte plate plutôt que d’objet 3D. Ça passe à côté du cœur de la tendance récente. Ce genre d’effet est difficile à réaliser uniquement en CSS ; il serait probablement plus adapté de le faire tourner via des shaders sur le GPU.
divordinaires. Si on ne peut pas injecter directement des effets GPU dans du HTML de base, alors il vaudrait peut-être mieux créer un nouveau moteur de rendu via une sorte de canvas custom. Le HTML a de toute façon perdu son sens : on garde le texte dans des balises<p>et tout le reste sert à la pub. Autant ne laisser que les<p>et repartir sur quelque chose de complètement nouveau avec une meilleure intégration GPU.Je collecte ce genre d’exemples de design : https://github.com/swyxio/spark-joy
Je recommande aussi quelques ressources liées :
Sur mobile, j’ai l’impression que l’utilisabilité aurait été bien meilleure s’il y avait eu une option pour masquer ou replier les boîtes. Les boîtes occupent tout l’écran, donc on voit mal l’effet à l’arrière. Cela dit, c’est intéressant, donc je réessaierai sur un grand écran. Ajouter une option pour masquer les boîtes aiderait beaucoup.
On dirait que cela utilise une technique similaire à celle de mon implémentation de glass : https://news.ycombinator.com/item?id=42225481, en particulier avec une utilisation intensive du box shadow.
L’effet fonctionne bien comme arrière-plan web.
Sur mon téléphone, le défilement est assez lent. Je me demande s’il y a un autre effet de scroll volontairement ralenti, ou si c’est un effet secondaire du rendu glass.
Je trouve que c’est vraiment très bien fait. Je suis toujours surpris de voir qu’en infographie, il n’existe pas « une méthode spéciale », mais en réalité « cinq couches de trucs ». Le support cross-browser me semble aussi être un gros défi. Tu as une idée de ce qui consomme le plus de ressources ? Instinctivement, je dirais que c’est
backdrop-filter.backdrop-filter. Plus la valeur de blur est élevée, plus le rendu doit examiner d’informations sur les pixels environnants. Un autre poste coûteux, c’est la mise à jour en temps réel de l’apparence du glass quand on scrolle ou quand l’arrière-plan vidéo change.