Filtros

Podcast do CSS - 023: filtros

Digamos que você precise criar um elemento que tenha um efeito de vidro fosco ligeiramente opaco sobre uma imagem. O texto precisa ser um texto dinâmico, e não uma imagem. Como fazer isso?

Uma combinação de filtros CSS e backdrop-filter permite aplicar efeitos e desfocar o que é necessário em tempo real. Desfoque e opacidade são dois dos muitos filtros disponíveis. Vamos conferir o que eles fazem e como usá-los.

A propriedade filter

Compatibilidade com navegadores

  • 53
  • 12
  • 35
  • 9.1

Origem

É possível aplicar um ou vários dos filtros a seguir como um valor para filter. Se você aplicar um filtro incorretamente, os demais filtros definidos para filter não vão funcionar.

blur

Isso aplica um desfoque gaussiano, e o único argumento que você pode transmitir é um radius, que é o quanto o desfoque é aplicado. Precisa ser uma unidade de comprimento, como 10px. Porcentagens não são aceitas.

.my-element {
    filter: blur(0.2em);
}

brightness

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

Para aumentar ou diminuir o brilho de um elemento, use a função de brilho. O valor do brilho é expresso como uma porcentagem, e a imagem inalterada é expressa como um valor de 100%. Um valor de 0% torna a imagem completamente preta. Portanto, valores entre 0% e 100% tornam a imagem menos brilhante. Use valores acima de 100% para aumentar o brilho.

.my-element {
    filter: brightness(80%);
}

contrast

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

Defina um valor entre 0% e 100% para diminuir ou aumentar o contraste, respectivamente.

.my-element {
    filter: contrast(160%);
}

grayscale

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

É possível aplicar um efeito completamente em escala de cinza usando 1 como um valor para grayscale() ou 0 para ter um elemento completamente saturado. Também é possível usar valores percentuais ou decimais para aplicar apenas um efeito parcial de escala de cinza. Se você não transmitir argumentos, o elemento ficará completamente em escala de cinza. Se você passar um valor maior que 100%, ele será limitado a 100%.

.my-element {
    filter: grayscale(80%);
}

invert

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

Assim como grayscale, você pode transmitir 1 ou 0 à função invert() para ativá-la ou desativá-la. Quando ativada, as cores do elemento são completamente invertidas. Também é possível usar valores percentuais ou decimais para aplicar somente uma inversão parcial de cores. Se você não transmitir nenhum argumento para a função invert(), o elemento será completamente invertido.

.my-element {
    filter: invert(1);
}

opacity

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

O filtro opacity() funciona como a propriedade opacity, em que é possível transmitir um número ou porcentagem para aumentar ou reduzir a opacidade. Se você não transmitir argumentos, o elemento estará totalmente visível.

.my-element {
    filter: opacity(0.3);
}

saturate

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

O filtro de saturação é muito semelhante ao filtro brightness e aceita o mesmo argumento: número ou porcentagem. Em vez de aumentar ou diminuir o efeito de brilho, saturate aumenta ou diminui a saturação de cores.

.my-element {
    filter: saturate(155%);
}

sepia

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

É possível adicionar um efeito de tom de sépia com este filtro que funciona como grayscale(). O tom de sépia é uma técnica de impressão fotográfica que converte tons pretos em tons marrons para aquecê-los. Você pode transmitir um número ou uma porcentagem como argumento para sepia(), que aumenta ou diminui o efeito. Não transmitir nenhum argumento adiciona um efeito sépia completo (equivalente a sepia(100%)).

.my-element {
    filter: sepia(70%);
}

hue-rotate

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

Você aprendeu como o matiz em hsl referencia a rotação da roda de cores na lição de cores, e esse filtro funciona de maneira semelhante. Se você passa um ângulo, como graus ou curvas, ele muda a matiz de todas as cores do elemento, mudando a parte da roda de cores a que ele faz referência. Se você não transmitir nenhum argumento, ele não vai fazer nada.

.my-element {
    filter: hue-rotate(120deg);
}

drop-shadow

Compatibilidade com navegadores

  • 18
  • 12
  • 35
  • 6

Origem

É possível aplicar uma sombra projetada em curva como você faria em uma ferramenta de design, como o Photoshop com drop-shadow. Essa sombra é aplicada a uma máscara alfa, o que a torna muito útil para adicionar uma sombra a uma imagem de recorte. O filtro drop-shadow usa um parâmetro de sombra que contém valores de offset-x, offset-y, desfoque e cor separados por espaço. Ele é quase idêntico a box-shadow, mas não há suporte para a palavra-chave inset e o valor de propagação.

.my-element {
    filter: drop-shadow(5px 5px 10px orange);
}

Saiba mais sobre os diferentes tipos de sombras no módulo de sombras.

url

Compatibilidade com navegadores

  • 5
  • 12
  • 3
  • 6

Origem

O filtro url permite aplicar um filtro SVG de um elemento ou arquivo SVG vinculado. Você pode ler mais sobre filtros SVG aqui

Filtro do pano de fundo

Compatibilidade com navegadores

  • 76
  • 17
  • 103
  • 9

Origem

A propriedade backdrop-filter aceita os mesmos valores da função de filtro que filter. A diferença entre backdrop-filter e filter é que a propriedade backdrop-filter só aplica os filtros ao plano de fundo, em que a propriedade filter os aplica a todo o elemento.

O exemplo no início desta lição é perfeito, porque você não quer que o texto seja desfocado e, idealmente, não quer adicionar mais elementos HTML. A possibilidade de aplicar filtros apenas no pano de fundo possibilita isso.

Teste seu conhecimento

Teste seus conhecimentos sobre filtros

Quais das opções a seguir são funções de filtro CSS?

grayscale()
🎉
invert()
🎉
flip()
Tente de novo.
multiply()
Tente de novo.
blur()
🎉
brightness()
🎉

O CSS pode usar filtros SVG?

Sim
A função de filtro url() permite
Não
Tente de novo.