O avanço de CSS está permitindo que sites evoluam constantemente e permitindo não ser mais necessário precisar de scripts externos para criar efeitos verdadeiramente surpreendentes. Alguns desses efeitos, certamente, conseguido com filtros CSS!
Existem muitos filtos CSS bastante úteis e poderosos e você verá agora o que cada filtro é capaz de fazer.
O que são filtros CSS3
Filtros CSS (ou Filter Effects Module Level 1) são capazes de produzir efeitos em imagens e outros elementos em um documento Web.
Imagine ser capaz de aplicar efeitos de Photoshop, como blur, tons de cinza e brilho aos elementos HTML, tais como formulários, imagens e qualquer outra coisa possível de se criar usando HTML/CSS.
Geralmente, um filtro CSS é composto pela seguinte sintaxe:
|
1 |
filter: <nome-do-filtro>(<valor>) [<nome-do-filtro>(<valor>)]* | none |
Quer dizer, usa-se a propriedade filter seguida da diretiva de qual filtro será aplicado, sendo que é possível aplicar diversos filtros simultaneamente (ou nenhum, através da palavra-chave none).
Atualmente, a compatibilidade de filtros CSS é quase 100%, considerando o suporte dos principais navegadores de mercado. Então, é possível usá-los à vontade para conseguir efeitos visuais impressionantes.

A seguir, veja um showcase de Filtros CSS e alguns exemplo do quê é possível fazer e que efeitos alcançar.
blur()

O efeito blur — ou embaçado — já é consagradamente usado em montagens e ilustrações para sites em todo o mundo, já que qualquer editor de imagens mais ou menos decente já oferece a possibilidade de usar o blur.
O bom da história é que, a partir de agora, é possível usar este efeito diretamente com CSS, valendo-nos do filtro blur().
É possível especificar o deviation do blur — ou seja, quantos pixels vão se mesclar entre si — através de medidas CSS. Para o exemplo acima, foram usados 10px.
|
1 |
filter: blur(10px); |
grayscale()

Antes do advento dos filtros CSS3, desenvolvedores web usávamos uma variedade de hacks e técnicas para fazer a transição de uma imagem em preto e branco para ela ficar colorida.
Mas, independentemente de existirem dezenas de técnicas para isso, agora basta usar um pouco de CSS através do filtro grayscale().
Usando porcentagem ou um valor de 0 a 1 (incluindo decimais), é possível especificar o quão próximo a tons de cinza a imagem deve ser apresentada.
Para o exemplo, foi usado:
|
1 |
filter: grayscale(.75); |
sepia()

Para o caso de ser preciso usar um efeito sépia — tonalidades entre o acinzentado e o amarronzado –, agora também é possível usando o filtro CSS sepia().
Através da indicação de porcentagem ou decimais, basta indicar a “quantidade de sépia” que será usada na imagem.
Para o exemplo, usou-se:
|
1 |
filter: sepia(.9); |
saturate()

O valor da saturação é medido em porcentagem ou decimais, usados como valores para saturate().
Um valor de 100% (ou 1) é o default do elemento, podendo ser aumentado ou diminuído, a depender do efeito que se quer alcançar alterando-se a saturação.
O exemplo acima foi supersaturado com o código:
|
1 |
filter: saturate(300%); |
hue-rotate()

Agora, com CSS3, é possível alterar o valor da matiz de elementos através do filtro hue-rotate().
O valor é especificado em graus e, inicialmente, isso pode soar confuso. Para facilitar, imaginem uma roda de cores; o número de graus determina o ponto dentro desta roda.
O efeito acima foi alcançado com:
|
1 |
filter: hue-rotate(60deg); |
invert()

É fácil inverter as cores de imagens com o filtro invert(), especificando uma porcentagem ou decimal para a quantidade dessa inversão.
O resultado acima foi alcançado com:
|
1 |
filter: invert(.9); |
opacity()

O filtro opacity(), como sugere o próprio nome, controla a opacidade do elemento a que esteja aplicado.
Em outras palavras, aplica transparência ao elemento, admitindo valores em porcentagem ou decimal.
A diferença entre usar filter: opacity() e a propriedade opacity é que, com o filtro, navegadores podem decidir usar aceleração de hardware, tornando a aplicação do efeito mais performática.
Acima, temos:
|
1 |
filter: opacity(.5); |
brightness()

O filtro CSS brightness() aplica um multiplicador linear no elemento-alvo, fazendo-o parecer mais ou menos brilhante (brightness). Admite valores em porcentagem ou decimal.
O exemplo acima, com claridade dobrada, foi alcançado usando:
|
1 |
filter: brightness(2); |
contrast()

Com os filtros de CSS3, também é possível ajustar o contraste de elementos (especificando os valores em porcentagem ou decimais).
Para o exemplo, aumentou-se bastante o contraste da imagem com:
|
1 |
filter: contrast(500%); |
drop-shadow()
Como indica o próprio nome, o filtro drop-shadow() coloca uma sombra no elemento-alvo.
A sintaxe é a mesma de box-shadow(); a diferença é que pode ser aplicado pelos navegadores com aceleração de hardware e, quando aplicado a elementos com transparência, como imagens, a sombra toma a forma do que é opaco, ao invés de só fazer uma sombra projetada em caixa.
Veja a diferença neste exemplo, em que o mesmo valor 7px 9px 9px rgba(0,0,0,.3) é usado para o filtro e para a propriedade neste PNG transparente:

2 super dicas sobre filtros CSS
Ainda existe um ou outro filtro CSS, mas, por serem bem mais complexos e/ou experimentais, ficam para um outro artigo. ;)
De qualquer maneira, 2 dicas sobre filtros CSS muito boas são as seguintes:
- É possível usar múltiplos filtros ao mesmo tempo
- É possível usar transições e animações em filtros CSS
Filtros múltiplos simultâneos

Lembra da formulazinha de uso de filter() no início do artigo? Lá consta que é possível usar múltiplos filtros CSS simultaneamente.
Com isso, potencializa-se o poder dos filtros e é possível chegar a resultados realmente admiráveis.
Por exemplo, chega-se ao resultado do exemplo usando:
|
1 |
filter: contrast(1.3) hue-rotate(-15deg) saturate(.75); |
Transições e animações em filtros CSS
Para a felicidade geral da nação dev, filtros CSS funcionam muito bem, obrigado, com transições e animações CSS.
Então, não se acanhe em usar transition e @keyframes/animation para dar aquele passo extra rumo a efeitos deslumbrantes com filtros.
Assista a nosso vídeo sobre filtros CSS no início do artigo para ver a demonstração de animações e filtros sendo usados.
Conclusão
Para quem é dev das antigas, observar (e se beneficiar) a evolução do quê CSS se torna capaz é realmente emocionante.
Filtros CSS são um belo exemplo disso. Há não muito tempo atrás, chegar a efeitos como os proporcionados pelos filtros exigia, no mínimo, usar múltiplas imagens.
Felizmente, hoje em dia temos filtros CSS para nos ajudar a manipular o aspecto visual dos elementos, o que nos ajuda a conseguir resultados extraordinários.
E você, sabia que filtros CSS podiam fazer tudo isso? Tem usado os filtros em seus projetos? Conta pra gente nos comentários!