LiquidGlass
LiquidGlass est une bibliothèque légère JavaScript/TypeScript qui applique aux éléments HTML des effets verre réalistes WebGL : réfraction, flou, aberration chromatique, lumière.
Qu'est-ce que LiquidGlass ?
LiquidGlass est une bibliothèque légère JavaScript/TypeScript qui rend des effets verre réalistes sur n'importe quel élément HTML à l'aide de shaders WebGL. Elle applique réfraction, flou, aberration chromatique, reflets spéculaires et comportements d'éclairage associés en capturant le contenu DOM derrière chaque élément verre et en le compositant en temps réel.
La bibliothèque est conçue pour fonctionner avec des arrière-plans de page arbitraires (images, vidéos, canvases ou HTML simple). Elle utilise un pipeline de rendu multi-passes et peut gérer plusieurs couches verre, configuration par élément et mises à jour dynamiques sur la page.
Fonctionnalités principales
- Rendu verre basé sur shaders WebGL pour éléments HTML : Génère l'aspect verre en traitant le contenu DOM derrière l'élément verre et en le compositant comme sortie shader.
- Pipeline multi-passes en temps réel : Prend en charge des effets comme la réfraction, contrôle de la force de flou, frange chromatique aux bords, et comportements d'éclairage spéculaire/rim.
- Configuration par élément et globale : Configurez chaque élément verre individuellement via
data-config(JSON) ou définissez des valeurs globales par l'optiondefaults. - Composition verre en couches : Prend en charge les configurations verre-sur-verre via son approche de composition.
- Options de positionnement interactif : Peut injecter un comportement de panneau flottant et déplaçable quand activé (ex.
floating: true), et inclut un modebuttonpour rétroaction shader au survol/appui. - Contrôles de surface réalistes : Paramètres incluent
cornerRadius,zRadius(profondeur biseautage),bevelMode(mode courbure forme),brightness,saturation,shadowOpacity, et réflexionfresnel.
Comment utiliser LiquidGlass
- Installer ou importer : Installez via npm (
npm install @ybouane/liquidglass) ou importez directement depuis le CDN (https://cdn.jsdelivr.net/npm/@ybouane/liquidglass/dist/index.js). - Créer un conteneur racine positionné : L'élément
rootpassé àLiquidGlass.init()doit être un conteneur avecposition: relative. - Ajouter des éléments verre dans la racine : Chaque élément verre doit être un enfant direct de la racine. À l'initialisation, LiquidGlass injecte un
<canvas>comme premier enfant de l'élément verre pour la sortie shader. - Initialiser : Créez l'instance avec
LiquidGlass.init({ root: document.querySelector('#my-root'), glassElements: document.querySelectorAll('.glass') })et nettoyez plus tard avecinstance.destroy(). - Configurer les effets : Fournissez des réglages par élément via
element.dataset.config = JSON.stringify({ ... })(ex. quantité de flou, réfraction, rayon d'angle). Utilisez le motif playground pour ajuster les paramètres visuellement.
Cas d'usage
- Cartes et panneaux « verre » personnalisés : Appliquez un style verre givré, sombre ou standard à un élément carte en ajustant
blurAmount,brightness,cornerRadiusetzRadius. - Lentille interactive style loupe : Utilisez
bevelMode: 1aveccornerRadiusetzRadiusassortis pour un effet demi-sphère/dôme (et activez optionnellementfloating). - Rétroaction UI survol/appui : Définissez
button: truepour que l'élément verre réagisse aux interactions utilisateur — survol illumine et appui aplatit le biseautage tout en approfondissant l'ombre. - Compositions verre-sur-verre en couches : Construisez une UI multi-couches où différents éléments verre se chevauchent, en exploitant la composition LiquidGlass pour des effets superposés.
- Verre sur arrière-plans riches : Placez des éléments verre sur des arrière-plans comme images, vidéos, canvases ou contenu HTML standard, tout en gardant ces arrière-plans parmi les enfants échantillonnés de la racine.
FAQ
Ai-je besoin d'une structure DOM spécifique ?
Oui. La root doit être un conteneur positionné (position: relative), et chaque élément verre doit être un enfant direct de la racine. Les éléments verre imbriqués sont rejetés à l'initialisation avec un avertissement console.
Que capture LiquidGlass pour l'effet verre ?
Le shader échantillonne les enfants de la root, donc le contenu comme les images d'arrière-plan doit être dans un élément frère à l'intérieur de la root. La root elle-même n'est pas capturée.
LiquidGlass crée-t-il des éléments DOM pour moi ?
Il injecte un <canvas> comme premier enfant de l'élément verre pour rendre la sortie shader. À cause de cela, évitez de dépendre des sélecteurs CSS :first-child pour l'élément verre.
Puis-je utiliser plusieurs racines LiquidGlass sur la même page ?
Les limitations indiquent que plusieurs racines LiquidGlass ne peuvent pas partager la réfraction. De plus, les éléments verre d'une root ne voient pas ce que rendent les éléments verre d'une autre root.
Y a-t-il des considérations de performance ?
Oui. La bibliothèque repose sur la rasterisation DOM en temps réel et un pipeline WebGL multi-passes, et la capture DOM dans un canvas est décrite comme coûteuse.
Alternatives
- Effets verre uniquement CSS (backdrop-filter / techniques basées sur le flou) : Des approches plus simples et purement CSS peuvent approximer le verre dépoli, mais n’offriront généralement pas le même comportement de pipeline réfraction/aberration chromatique/spéculaire.
- Frameworks de shaders WebGL ou implémentations Three.js/WebGL personnalisées : Si vous avez besoin d’un contrôle total, vous pouvez implémenter vos propres passes de shaders ; cela déplace le travail d’une abstraction de bibliothèque vers votre propre pipeline de rendu.
- Autres pipelines DOM vers canvas/effets en temps réel : Des solutions adjacentes qui rasterisent le DOM en textures peuvent créer des effets screen-space, mais le workflow et la configuration différeront de la configuration d’éléments verre basée sur le DOM de LiquidGlass.
- Ressources de design statiques : Pour les cas sans interactions ni mises à jour en temps réel, des images verre pré-rendues ou composants exportés réduisent les coûts d’exécution, au détriment des changements de réfraction/paramètres dynamiques.
Alternatives
AakarDev AI
AakarDev AI est une plateforme puissante qui simplifie le développement d'applications d'IA avec une intégration fluide des bases de données vectorielles, permettant un déploiement rapide et une évolutivité.
DeepMotion
DeepMotion est une plateforme IA de motion capture et body-tracking pour générer des animations 3D à partir de vidéo (et texte) dans votre navigateur.
Arduino VENTUNO Q
Arduino VENTUNO Q : ordinateur edge IA pour la robotique, combinant inférence accélérée et microcontrôleur pour un contrôle déterministe. Arduino App Lab.
Devin
Devin est un agent de codage IA qui automatise des sous-tâches en parallèle pour des migrations et gros refactors, sous contrôle humain et validation.
imgcook
imgcook est un outil intelligent qui convertit les maquettes de conception en code de haute qualité, prêt pour la production, en un seul clic.
Rork
Rork transforme une description en applications mobiles complètes prêtes pour le développement, avec l’IA et Expo (React Native) pour aller vite.