Gerador de CSS para efeito de vidro em alta resolução
(glass3d.dev)- O glass3d generator é uma ferramenta que permite alterar configurações, visualizar instantaneamente e copiar o CSS de textura de vidro
- Os principais ajustes são blur, brightness, saturation do
backdrop-filter, além da seleção de cor e textura - A cor é tratada com HSL e valor alfa, e um exemplo é
hsl(189 80% 10% / 0.2) - A textura pode ser escolhida entre rice paper, egg shell, ink jet, coarse e topology
- O CSS gerado combina
.glass3d,::before,::aftere oz-indexdos elementos filhos para separar filtro de fundo, textura de ruído, sombra interna e camada de conteúdo
Valores ajustáveis no glass3d generator
- Ao alterar as configurações, o resultado é refletido imediatamente na própria interface
- O CSS final pode ser copiado e usado
- Os principais itens de configuração são:
backdrop-filterblurbrightnesssaturationcolortexture
Estrutura do CSS gerado
- A classe
.glass3ddefine variáveis CSS e a base das camadas--filter-glass3d:blur(32px) brightness(0.85) saturate(2.5)--color-glass3d:hsl(189 80% 10% / 0.2)--noise-glass3d:egg-shell.pngdotransparenttextures.com- Usa
position: relative,z-index: 4e múltiplos níveis debox-shadow
.glass3d::beforeaplica filtro de fundo e textura- Usa
var(--filter-glass3d)em-webkit-backdrop-filterebackdrop-filter background-colorebackground-imagerecebem, respectivamente, a variável de cor e a variável de ruído- Define
background-size: 100pxebackground-repeat: repeat
- Usa
.glass3d::afteradiciona sombra de destaque interna- Usa vários valores de
inset box-shadow
- Usa vários valores de
.glass3d > *aplicaposition: relativeez-index: 6para que o conteúdo apareça por cima
1 comentários
Opiniões no Hacker News
Esta abordagem tem o problema de aplicar o desfoque usando apenas os pixels imediatamente atrás da superfície, algo bem demonstrado em https://www.joshwcomeau.com/css/backdrop-filter/#the-issue
Vale a pena ler junto com a discussão em https://news.ycombinator.com/item?id=42302907. Se o fundo estiver se movendo por baixo, o problema de desfocar apenas os pixels logo atrás é bem importante; se o fundo for estático, em geral não importa tanto
Funcionou bem em elementos hardcoded, mas ainda preciso resolver como fazer isso funcionar em uma biblioteca inteira de componentes em que o border-radius muda conforme o branding do usuário e container queries
Eu diria que o material padrão está mais perto de papel
Para mim, a versão ajustada entra em conflito com as pistas de profundidade, ficando muito mais distrativa e parecendo mais errada
Parece bem bom, mas, sem a refração do vidro, desaparece a forte sensação de separação entre camadas que vejo como a maior contribuição do Liquid Glass
O Material tem um ótimo material para designers que mostra em 3D lateral que um app deve ser composto por camadas móveis consistentes. Mas, quando se junta tudo em 2D, fica muito difícil descobrir qual função está onde. É muito comum as pessoas não enxergarem botões de ação nos cantos
O movimento ajuda um pouco a diferenciar o chrome do conteúdo, mas há poucos elementos que façam essa definição visualmente. Para mim, a maior vantagem do Liquid Glass é a distorção nas bordas. Quando o conteúdo se move, há um movimento não linear, e a visão humana capta isso imediatamente
Capturas de tela estáticas nem sempre ficam boas, mas, em movimento, a distinção entre elementos é muito melhor do que em qualquer coisa que eu tenha visto até agora. Aqui falta o elemento central de refração que tira grande proveito da detecção de movimento humana
Eu tinha visto antes mais uma ótima demo na web, mas agora é difícil encontrá-la; em vez disso, esta demo tem desempenho ruim no mobile e é visualmente inferior, mas mostra bem, passo a passo, como o trabalho é complexo. Implementar distorção nas bordas só com filtros SVG é um caminho bem penoso: https://atlaspuplabs.com/blog/liquid-glass-but-in-css#breaki...
Também encontrei uma coleção de tentativas de Liquid Glass (CodePen Spark), e o segundo link me parece um exemplo muito bem feito com um SVG hardcoded, pré-definido de forma bastante específica: https://codepen.io/spark/453 https://codepen.io/lucasromerodb/pen/vEOWpYM
As pessoas veem vidro real todos os dias, então têm uma intuição sobre o que parece verdadeiro e correto. Por isso, as imitações parecem claramente piores, e a Apple consegue manter uma imagem de produto que “parece premium”
No projeto atual, o objetivo era criar um material com aparência polida, que funcionasse de forma consistente entre navegadores e não usasse 3D real. Também é verdade que o efeito aparece melhor quando se move sobre um fundo fixo. No site de demonstração da biblioteca em que estou trabalhando, faço isso, mas ele ainda não está pronto
Sei que vidro real se comporta assim, mas não quero ter que me preocupar com isso. Parece que escolheram as piores partes do skeuomorfismo e dobraram a aposta nelas, e digo isso mesmo sendo alguém que preferia a fase anterior ao iOS 7
É um efeito legal, mas, para mim, não parece vidro de verdade
A diferença mais imediata é que a luz não interage com o bisel. Eu esperaria que a luz entrasse novamente no vidro e também afetasse a iluminação e as cores. Apenas aplicar desfoque não basta
Além disso, vidro pode ter sombras próprias e cáusticas interessantes. Aqui dá para ver a sombra, mas ela parece um simples drop shadow, então o objeto se parece mais com um cartão plano do que com um objeto físico 3D que faz parte do novo fluxo
De qualquer forma, não é fácil simular isso só com CSS, e shaders rodando na GPU parecem mais adequados
divcomum? Se não for possível aplicar efeitos de GPU ao HTML básico e for preciso fazer isso em algum elemento customizado, como uma combinação arbitrária de Canvas, talvez seja melhor recriar um mecanismo de renderização totalmente novo que permita aplicar efeitos de GPUPara mim, o HTML está morto. Para transmitir texto, algumas tags bastam, e a maior parte do resto é usada para transformar páginas web em bombas de anúncios. Então seria melhor recomeçar com uma tag
<text>e melhor integração com GPU, deixando o restante de foraCriei uma versão em JavaScript que realmente refrata os elementos da página: https://real-glass.vercel.app/
Estou reunindo coisas assim: https://github.com/swyxio/spark-joy
Outros materiais incluem um gerador de CSS gratuito baseado na especificação de design glassmorphism https://ui.glass/generator/, um cabeçalho fixo de vidro fosco https://www.joshwcomeau.com/css/backdrop-filter/, glassy glassmorphism no codepen e in context
Ficou muito bem feito. Sempre me surpreende que computação gráfica não seja “um truque estranho”, mas algo mais próximo de 5 truques empilhados em camadas
Fazer funcionar de forma compatível entre navegadores é um desafio extra. Fico curioso para saber se você tem uma ideia de qual parte consome mais recursos. Pensando de forma simples, eu diria que é o
backdrop-filterSua intuição está certa: a parte que mais consome recursos é o desfoque do
backdrop-filter. Quanto maior o valor do desfoque, mais pixels vizinhos precisam ser “consultados” antes da renderizaçãoOutro fator caro é que, quando há rolagem ou um fundo de vídeo alterando a aparência do vidro, é preciso redesenhar continuamente
Parece usar uma técnica parecida com a minha implementação de vidro: https://news.ycombinator.com/item?id=42225481
Especialmente a parte de usar
box-shadowde forma exageradaUm pequeno problema: a sombra entre o topo e a área rolável com os toggles/código desaparece quando você rola para baixo. Acho que provavelmente ela deveria ficar escondida no início e aparecer depois
Aqueles
box-shadowde “overhang” foram pensados para serem aplicados dentro de um elemento, não projetados para baixo a partir de algum elemento, e percebi que, neste caso, preciso aplicar o segundo tipo de sombraNo meu celular, a rolagem do conteúdo fica bem lenta. Fico curioso se há algum outro efeito de rolagem deixando isso lento de propósito, ou se é um efeito colateral do efeito de vidro
Posso ter deixado passar algo, mas no mobile seria muito mais útil se desse para ocultar ou recolher a caixa
Agora ela ocupa a tela inteira, então quase não dá para ver o efeito por trás. Ainda assim, tenho interesse e pretendo tentar de novo depois em uma tela maior, mas acho que uma opção para ocultar a caixa melhoraria bastante
Na primeira implementação, coloquei um pequeno retângulo de demonstração acima da UI do gerador, mas até mesmo algo pequeno ocupava espaço demais e dificultava o uso da UI. Quando a página inteira rolava, as pessoas ficavam frustradas porque não ficava claro que era preciso estar no topo da rolagem para ver o retângulo que estavam editando
Esta ferramenta é principalmente para codificação, então priorizo a experiência em desktop, e no mobile ela fica mais como uma prévia rápida e uma prova de que também funciona no celular. Ainda assim, se você conhecer alguma UI parecida que funcione muito bem no mobile, eu gostaria de ver o link