Resumindo
- O backdrop-filter do CSS aplica efeitos, como o desfoque, à área atrás de um elemento, não ao elemento em si.
- Um elemento precisa de um fundo parcialmente transparente para o backdrop-filter aparecer; sobre um fundo sólido, o efeito fica escondido.
- O custo do desfoque cresce com o raio e com o tamanho da área desfocada, e é pago de novo toda vez que o conteúdo atrás se move.
- O Safari exigiu o prefixo -webkit-backdrop-filter até a versão 18, então entregar as duas linhas continua sendo a escolha segura.
- Um bom plano B é um fundo mais opaco dentro de uma consulta @supports, para o texto continuar legível quando o desfoque não está disponível.
Nesta página
Um backdrop filter no CSS aplica um efeito gráfico, em geral desfoque, ao que está atrás de um elemento. Escreva backdrop-filter: blur(12px) em um elemento com fundo parcialmente transparente e a página embaixo se suaviza, o visual de vidro fosco usado em barras de navegação, painéis e cartões. Ele é compatível com todos os navegadores atuais. O ofício está em manter a área desfocada pequena, o raio modesto e o plano B legível.
A receita básica de vidro fosco
Três coisas fazem o vidro: um preenchimento translúcido para o fundo aparecer, o desfoque em si e uma borda tênue para o painel ter forma. A maioria também acrescenta um pequeno ganho de saturação, porque desfocar tira a média das cores e as deixa mais acinzentadas do que o esperado.
.glass {
background: rgb(255 255 255 / 0.14);
-webkit-backdrop-filter: blur(16px) saturate(160%);
backdrop-filter: blur(16px) saturate(160%);
border: 1px solid rgb(255 255 255 / 0.22);
border-radius: 16px;
}O vidro só parece vidro quando há algo que valha a pena desfocar atrás. Numa página cinza chapada, o painel só parece opaco. Coloque-o sobre uma fotografia ou um gradiente rico, como glassmorphism explica com mais profundidade.
radial-gradient(circle at 20% 25%, #f97316 0%, transparent 40%), radial-gradient(circle at 80% 70%, #7c3aed 0%, transparent 45%), linear-gradient(160deg, #0f172a 0%, #1e1b4b 100%)O que as funções do backdrop-filter podem fazer
A propriedade aceita as mesmas funções de filter, e você pode encadeá-las em uma só declaração. Elas se aplicam em ordem, da esquerda para a direita, então blur() seguido de saturate() se comporta de modo diferente do inverso. A lista completa está na MDN.
blur()blur(12px)Boa para
saturate()Exemplo
saturate(160%)Boa para
brightness()Exemplo
brightness(0.7)Boa para
contrast()Exemplo
contrast(0.8)Boa para
grayscale()Exemplo
grayscale(1)Boa para
nonenoneBoa para
brightness() abaixo de 1 costuma ser uma ferramenta de legibilidade melhor que um desfoque mais pesado.Desempenho do backdrop filter
O desfoque é uma das coisas mais caras que um navegador desenha. Para desfocar uma região, ele precisa ler cada pixel atrás do elemento, amostrar os vizinhos até o raio do desfoque e compor o resultado, e repete esse trabalho sempre que algo atrás do painel muda. Um cabeçalho fixo sobre uma página que rola redesenha o desfoque a cada quadro da rolagem.
O custo escala com dois números que você controla: a área do elemento e o raio. Um cabeçalho de 64 pixels desfocado a 12px é barato em quase tudo. Uma sobreposição de tela cheia desfocada a 40px sobre um vídeo pode derrubar quadros num celular intermediário. O quadro mais amplo está em desempenho de gradientes CSS.
Lento
- Desfocar a viewport inteira atrás de um modal
- Raios de 30px ou mais
- Animar o raio do desfoque ao abrir e fechar
- Painéis de vidro dentro de painéis de vidro
- Desfoque sobre vídeo com reprodução automática
Rápido
- Desfocar só a barra, o cartão ou o painel que precisa
- Raios entre 8px e 20px
- Fazer a opacidade do painel aparecer gradualmente, com o desfoque fixo
- Uma camada de vidro, preenchimentos sólidos dentro dela
- Desfoque sobre imagens estáticas e gradientes
Por que o backdrop-filter não funciona
Quando o desfoque parece não fazer nada, a causa é quase sempre uma de uma lista curta.
- 1
Veja se o fundo é transparente
Um
background: #fffsólido cobre por completo o fundo desfocado. Use um valor alfa, comorgb(255 255 255 / 0.15). - 2
Adicione o prefixo do Safari
O Safari só aceita a propriedade sem prefixo a partir da versão 18. iPhones mais antigos ainda precisam de
-webkit-backdrop-filter. - 3
Procure uma raiz de backdrop acima
Um elemento pai com
filter,opacityabaixo de 1, uma máscara ou o próprio backdrop filter limita o que o filho enxerga. O filho então desfoca só esse pai, o que muitas vezes parece nenhum desfoque. - 4
Cuidado com filhos fixos
Como o
filter, o backdrop filter faz do elemento o bloco contêiner de filhos com posição fixa e absoluta. Um menu fixo dentro de um cabeçalho de vidro se posiciona em relação ao cabeçalho, não à janela. - 5
Garanta que haja algo atrás
O desfoque sobre uma cor chapada é invisível. Role o painel sobre uma imagem para confirmar que funciona.
Um plano B que mantém o texto legível
Painéis translúcidos são desenhados em torno do desfoque. Sem ele, um preenchimento branco de 14 por cento sobre uma foto agitada deixa o texto sobre a própria foto, e o contraste desaba. Escreva primeiro a versão legível e depois a melhore onde o navegador consegue desfocar.
/* Works everywhere: opaque enough to read on its own */
.glass {
background: rgb(15 23 42 / 0.86);
color: #f8fafc;
}
/* Upgrade where blur is available */
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
.glass {
background: rgb(15 23 42 / 0.45);
-webkit-backdrop-filter: blur(14px) saturate(150%);
backdrop-filter: blur(14px) saturate(150%);
}
}
/* Respect people who ask for less transparency, where supported */
@media (prefers-reduced-transparency: reduce) {
.glass {
background: rgb(15 23 42 / 0.94);
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
}prefers-reduced-transparency ainda é limitado, então trate esse bloco como cortesia, não como garantia.Confira o contraste no pior ponto atrás do painel, não na média. Um título branco sobre um vidro que passa por um céu claro pode ficar bem abaixo das taxas de contraste de cores e acessibilidade. Escurecer com brightness(0.7) costuma resolver isso com mais segurança do que desfocar mais forte.
Quando você nem precisa de desfoque
Muito vidro fosco existe só para tornar as palavras legíveis sobre um fundo agitado. Se o fundo é seu para projetar, um mais calmo resolve o problema sem custo de renderização. Um gradiente suave e de baixo contraste atrás de um hero dispensa o painel; veja fundos de hero para sites e fundos desfocados, em que o desfoque é gravado na imagem uma vez em vez de calculado a cada quadro.
Palavras direto sobre um fundo vivo: é aqui que as pessoas recorrem a um painel de vidro.
O mesmo fundo se acalmando atrás das palavras, sem painel, sombra nem desfoque.
Essa segunda abordagem é como o Gradiently trata a legibilidade: um Mark sabe onde estão as palavras e leva sua região mais calma e de melhor contraste para trás delas, então você nunca precisa de caixa nem de desfoque para resgatar um título.
Perguntas frequentes
Qual a diferença entre filter e backdrop-filter?
filter altera o elemento e seu conteúdo. backdrop-filter altera só o que é visível atrás do elemento, através do fundo transparente dele.
Por que o desfoque do meu backdrop-filter não aparece?
Em geral o fundo do elemento é totalmente opaco, o Safari precisa do prefixo -webkit- ou um elemento pai com filter, opacity ou máscara limita o que o elemento enxerga.
O backdrop-filter é ruim para o desempenho?
Pode ser. O custo cresce com a área e o raio desfocados e é pago de novo sempre que o conteúdo atrás se move, então mantenha os painéis de vidro pequenos e os raios modestos.
Ainda preciso do -webkit-backdrop-filter?
O Safari aceita a propriedade sem prefixo a partir da versão 18, mas iPhones mais antigos continuam em uso, então entregar as duas linhas ainda faz sentido.
Que valor de desfoque fica melhor em vidro fosco?
Entre 8px e 20px serve para a maioria das interfaces. Acrescente saturate() acima de 100% para devolver a cor que o desfoque tira.
Escrito pelo Gradiently
A equipe por trás do Gradiently, uma ferramenta de design criada em torno dos Marks: gradientes vivos que fazem tudo o que você cria ter a sua cara.
Ver nosso perfil