Menu

Blur e filter no CSS: desfoque, grayscale e brightness

filter: blur(5px) desfoca um elemento, e backdrop-filter: blur() desfoca o que está atrás dele. Veja todas as funções de filter (brightness, contrast, grayscale, sepia, saturate, hue-rotate, invert, drop-shadow) com controles ao vivo, como combiná-las e o problema das bordas desfocadas.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Desfocar um elemento

filter: blur() recebe um comprimento, o raio do desfoque. Quanto maior, mais desfocado fica o elemento:

O filter funciona em qualquer elemento, não só em imagens: uma div desfocada desfoca o texto, a borda e os filhos também. Repare nas bordas suaves das imagens desfocadas: o desfoque espalha a imagem para fora e a mistura com a área transparente em volta. A solução está mais abaixo, em "O problema das bordas desfocadas".

Desfocar o fundo: backdrop-filter

Para desfocar o que está atrás de um elemento (um painel de vidro fosco sobre uma foto ou uma página), use backdrop-filter. O conteúdo do próprio elemento continua nítido. Ele precisa de um fundo transparente para mostrar o desfoque:

As listras e os círculos ficam nítidos em volta do painel e desfocados atrás dele, enquanto o texto do painel não é tocado. Mantenha o texto legível: um tom mais claro ou mais escuro na cor de fundo ajuda em imagens carregadas.

Todas as funções de filter, ao vivo

Mexa em qualquer controle. A linha embaixo da imagem é o valor exato de filter, pronto para copiar:

Só as funções que você tirou do valor neutro são escritas, o que mantém o valor curto. brightness(1) ou blur(0px) não mudam nada, então não há motivo para listá-los.

Funções de filter

FunçãoValor neutroO que fazExemplo
blur(r)0desfoque gaussiano com raio rblur(4px)
brightness(n)1mais escuro abaixo de 1, mais claro acimabrightness(0.7)
contrast(n)1mais chapado abaixo de 1, mais forte acimacontrast(1.3)
grayscale(n)01 (ou 100%) é totalmente cinzagrayscale(100%)
sepia(n)0tom marrom quentesepia(0.6)
saturate(n)10 é cinza, acima de 1 mais vivosaturate(1.5)
hue-rotate(a)0degdesloca todos os matizes pelo círculo cromáticohue-rotate(90deg)
invert(n)01 é o negativo completo das coresinvert(1)
opacity(n)1como a propriedade opacityopacity(0.5)
drop-shadow(x y blur color)uma sombra que segue o formatodrop-shadow(2px 4px 6px rgb(0 0 0 / 0.3))

Os números também podem ser porcentagens (grayscale(100%) é igual a grayscale(1)). Várias funções vão em um só valor, separadas por espaços, e são aplicadas em ordem: filter: grayscale(1) sepia(1) dá um tom marrom, enquanto sepia(1) grayscale(1) termina em um cinza simples.

O drop-shadow segue o formato

box-shadow é sempre um retângulo (no máximo com cantos arredondados). drop-shadow() é desenhado a partir dos pixels visíveis, então um ícone transparente ganha uma sombra com o contorno do ícone:

A primeira estrela projeta uma sombra quadrada a partir da caixa invisível que a envolve. A segunda projeta uma sombra em forma de estrela. Ao contrário do box-shadow, o drop-shadow() não tem spread nem inset; a página do box-shadow trata deles.

O problema das bordas desfocadas

Uma imagem desfocada some aos poucos nas bordas, porque o desfoque puxa os pixels transparentes em volta. Para manter uma borda nítida (em um fundo de destaque desfocado, por exemplo), coloque a imagem em um contêiner com overflow: hidden e aumente um pouco a imagem para a borda suave ser cortada:

.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }

Efeitos de hover com filter

O filter aceita transition, então uma parede de logos que vai do cinza para a cor, ou um card apagado até receber hover, são duas regras:

Passe o mouse sobre um bloco (ou chegue nele pelo Tab) e a cor dele aparece aos poucos.

Bom saber

  • Desempenho. Raios de desfoque grandes em áreas grandes são o que mais custa, principalmente backdrop-filter em elementos que se movem ou rolam. Teste em um celular.
  • Legibilidade. Nunca desfoque um texto que as pessoas precisam ler, e confira o contraste do texto sobre um painel de vidro fosco.
  • Empilhamento. Qualquer filter diferente de none cria um novo stacking context e vira o bloco que contém os descendentes com position: fixed, como o transform.

Erros comuns

  • filter: blur(5). O raio precisa de unidade: blur(5px).
  • Usar filter: blur() para um painel de vidro fosco. Ele desfoca o texto do próprio painel. Use backdrop-filter com um fundo transparente.
  • Um backdrop-filter que não mostra nada. O fundo do elemento precisa ser pelo menos parcialmente transparente, e precisa haver algo atrás dele.
  • Duas declarações filter. A segunda substitui a primeira. Coloque todas as funções em um só valor.
  • Sombras em forma de caixa em ícones transparentes. Use filter: drop-shadow() em vez de box-shadow.

Perguntas frequentes

Como desfocar um elemento no CSS?

Use filter: blur(5px);. O comprimento é o raio do desfoque: 0 é nítido e valores maiores ficam mais desfocados. Ele desfoca o elemento e tudo o que está dentro, incluindo texto e imagens.

Como desfocar o fundo atrás de um elemento?

Use backdrop-filter: blur(10px); no elemento, com um fundo parcialmente transparente como rgb(255 255 255 / 0.5). O conteúdo do próprio elemento continua nítido e o que está atrás dele fica desfocado, o efeito de vidro fosco.

Qual a diferença entre drop-shadow() e box-shadow?

box-shadow sempre segue a caixa retangular do elemento. filter: drop-shadow() segue o formato visível, incluindo as áreas transparentes de um PNG ou SVG, então a sombra de um ícone tem o contorno do ícone.

Como deixar uma imagem preto e branco no CSS?

Use filter: grayscale(100%); (ou grayscale(1)). Acrescente uma transition e filter: grayscale(0) no hover para trazer a cor de volta.

Dá para usar vários filtros ao mesmo tempo?

Sim, liste-os separados por espaços: filter: grayscale(1) brightness(1.2) blur(1px);. Eles são aplicados em ordem, então a ordem pode mudar o resultado. Uma segunda declaração filter substitui a primeira.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR