LiquidGlass
LiquidGlass é uma biblioteca leve em JavaScript/TypeScript que aplica efeitos reais de vidro WebGL (refração, blur e aberração cromática) a elementos HTML.
O que é LiquidGlass?
LiquidGlass é uma biblioteca leve em JavaScript/TypeScript que renderiza efeitos realistas de vidro sobre qualquer elemento HTML usando shaders WebGL. Ela aplica refração, blur, aberração cromática, realces especulares e comportamentos de iluminação relacionados, capturando o conteúdo DOM atrás de cada elemento de vidro e compondo em tempo real.
A biblioteca é projetada para funcionar com fundos de página arbitrários (imagens, vídeos, canvases ou HTML simples). Ela usa um pipeline de renderização multi-pass e pode lidar com múltiplas camadas de vidro, configuração por elemento e atualizações dinâmicas na página.
Principais Recursos
- Renderização de vidro baseada em shaders WebGL para elementos HTML: Gera a aparência de vidro processando o conteúdo DOM atrás do elemento de vidro e compondo como saída de shader.
- Pipeline multi-pass em tempo real: Suporta efeitos como refração, controle de intensidade de blur, franjas cromáticas nas bordas e comportamentos de iluminação especular/rim.
- Configuração por elemento e global: Configure cada elemento de vidro individualmente via
data-config(JSON) ou defina padrões globais pela opçãodefaults. - Composição de vidro em camadas: Suporta configurações glass-on-glass via sua abordagem de composição.
- Opções de posicionamento interativo: Pode injetar comportamento de painel “flutuante” arrastável quando ativado (ex.:
floating: true), e inclui modobuttonpara feedback de shader em hover/press. - Controles de superfície realistas: Parâmetros incluem
cornerRadius,zRadius(profundidade do bevel),bevelMode(modo de curvatura da forma),brightness,saturation,shadowOpacitye reflexãofresnel.
Como Usar LiquidGlass
- Instale ou importe: Instale via npm (
npm install @ybouane/liquidglass) ou importe diretamente do CDN (https://cdn.jsdelivr.net/npm/@ybouane/liquidglass/dist/index.js). - Crie um contêiner raiz posicionado: O elemento
rootpassado paraLiquidGlass.init()deve ser um contêiner composition: relative. - Adicione elementos de vidro dentro da raiz: Cada elemento de vidro deve ser um filho direto da raiz. Na inicialização, LiquidGlass injeta um
<canvas>como primeiro filho do elemento de vidro para saída de shader. - Inicialize: Crie a instância com
LiquidGlass.init({ root: document.querySelector('#my-root'), glassElements: document.querySelectorAll('.glass') })e limpe depois cominstance.destroy(). - Configure efeitos: Forneça configurações por elemento via
element.dataset.config = JSON.stringify({ ... })(ex.: quantidade de blur, refração, raio de cantos). Use o padrão playground para ajustar parâmetros visualmente.
Casos de Uso
- Cartões e painéis “de vidro” personalizados: Aplique estilo de vidro fosco, escuro ou regular a um elemento de cartão ajustando
blurAmount,brightness,cornerRadiusezRadius. - Lente estilo lupa interativa: Use
bevelMode: 1comcornerRadiusezRadiuscorrespondentes para efeito de lente meia-esfera/domo (e opcionalmente ativefloating). - Feedback UI de hover/press: Defina
button: truepara que o elemento de vidro reaja à interação do usuário — hover ilumina e pressiona achata o bevel enquanto aprofunda a sombra. - Composições glass-on-glass em camadas: Construa UI multilayer onde elementos de vidro se sobrepõem, aproveitando a composição do LiquidGlass para efeitos empilhados.
- Vidro sobre fundos ricos: Posicione elementos de vidro sobre fundos que podem ser imagens, vídeos, canvases ou conteúdo HTML regular, mantendo esses fundos dentro dos filhos amostrados da raiz.
FAQ
Preciso de uma estrutura DOM específica?
Sim. A root deve ser um contêiner posicionado (position: relative), e cada elemento de vidro deve ser filho direto da raiz. Elementos de vidro aninhados são rejeitados na inicialização com aviso no console.
O que o LiquidGlass captura para o efeito de vidro?
O shader amostra os filhos da root, então conteúdo como imagens de fundo deve estar em um elemento irmão dentro da root. A própria root não é capturada.
O LiquidGlass cria elementos DOM para mim?
Ele injeta um <canvas> como primeiro filho do elemento de vidro para renderizar a saída de shader. Por isso, evite seletores CSS :first-child no elemento de vidro.
Posso usar múltiplas roots LiquidGlass na mesma página?
As limitações indicam que múltiplas roots LiquidGlass não podem compartilhar refração. Além disso, elementos de vidro em uma root não veem o que elementos de vidro em outra root estão renderizando.
Há considerações de performance?
Sim. A biblioteca depende de rasterização DOM em tempo real e pipeline WebGL multi-pass, e capturar DOM em canvas é descrito como caro.
Alternativas
- Efeitos de vidro apenas com CSS (backdrop-filter / técnicas baseadas em blur): Abordagens mais simples e puramente baseadas em CSS podem aproximar vidro fosco, mas geralmente não oferecem o mesmo comportamento de refração/aberação cromática/especular.
- Frameworks de shaders WebGL ou implementações personalizadas em Three.js/WebGL: Se precisar de controle total, pode implementar passes de shaders personalizados; isso transfere o trabalho de uma abstração de biblioteca para seu próprio pipeline de renderização.
- Outros pipelines de efeitos DOM-para-canvas/em tempo real: Soluções adjacentes que rasterizam DOM em texturas podem criar efeitos em espaço de tela, mas o fluxo de trabalho e configuração diferem da configuração de elemento de vidro baseado em DOM do LiquidGlass.
- Ativos de design estáticos: Para casos em que interações e atualizações em tempo real não são necessárias, imagens de vidro pré-renderizadas ou componentes exportados podem reduzir o custo em tempo de execução, às custas de mudanças dinâmicas em refração/parâmetros.
Alternativas
AakarDev AI
AakarDev AI é uma plataforma poderosa que simplifica o desenvolvimento de aplicações de IA com integração perfeita de banco de dados vetorial, permitindo implantação rápida e escalabilidade.
DeepMotion
DeepMotion é uma plataforma de body-tracking e motion capture com IA para gerar animações 3D a partir de vídeo (ou texto) no navegador, com Animate 3D API.
Arduino VENTUNO Q
Arduino VENTUNO Q é um computador edge AI para robótica, unindo inferência e microcontrolador para controle determinístico. Desenvolva no Arduino App Lab.
Devin
Devin é um agente de IA para codificação que ajuda equipes de software em migrações e grandes refatorações, executando subtarefas em paralelo.
imgcook
imgcook é uma ferramenta inteligente que converte maquetes de design em código de alta qualidade, pronto para produção, com um único clique.
Rork
Rork cria apps móveis completas e prontas para produção a partir da sua descrição com IA e Expo (React Native). Do conceito ao app.