Avançando com CSS3 – Entendendo as Cores
Em mais um post sobre CSS3, hoje vamos nos prender especificamente nas cores em CSS3, mas vamos nos prender mesmo… O objetivo de hoje é fazer com que tenhamos (e eu também estou incluso) pleno conhecimento das características e diferenças que há em cada “modo” nas cores. Vamos lá:
No CSS2 a cor mais usada é no formato hexadecimal (#000000), logo depois, neste rank vem a definição da cor de acordo com o seu nome (black), chamada de color-name – não entrarei em mais detalhes. De fato estes dois modos (principalmente o primeiro), são mais que suficiente para se trabalhar com cores em CSS. Sendo assim, antes de entrar nas cores em CSS3, vamos dissecar o formato hexadecimal, que é onde encontraremos nossa “inspiração” para entender as cores em CSS3.
O Formato Hexadecimal
Composto pelas cores RGB (red, green e blue – traduzindo: vermelho, verde e azul), o formato hexadecimal pode ser definido usando 3 valores (RGB) ou 6 (RRGGBB), antecedidos do caractere #, chamado de hash.
#111 #F2F2F2
Quando você define uma cor usando 3 valores, CSS converte automaticamente esta cor para 6 dígitos repetindo os valores setados. Por exemplo, ao definir a cor #F03, é o mesmo que definir a cor #FF0033. Mais abaixo você irá entender o porque desta conversão…
A princípio é bem difícil de entender o que são esses valores e porque forma a cor X ou Y, mas você verá que não tem segredo. Em cada definição é possível setar os seguintes caracteres: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 , A, B, C, D, E e F, 16 ao todo. Para você entender o porque da presença das letras, pense da seguinte maneira:
Se o código é hexadecimal, logo teríamos que ter valores numerais: 1, 2, 3… Quando chegasse no 10 continuaria normalmente (10.11, 12…), mas neste caso nós não podemos continuar, porque a declaração é de 3 e 6 valores, não 4, 5 ou até mesmo 7, 8, 9…. Observe:
#ABC /* CORRETO - Neste caso A = AA, B = BB e C = CC; */ #123 /* CORRETO - 1 = 11, 2 = 22 e 3 = 33 */ #112233 /* CORRETO - Como disse o código de 3 valores é convertido para 6, neste caso já está convertido. */ #1234 /* ERRADO */
São 3 ou 6 valores porque para cada definição, deve ter apenas um dígito, não dois dígitos, como aconteceria no 10, 11… Vamos considerar que eu tenho 6 valores para uma cor (#123456), e nestas cores, a cor1 e a cor2, tem o valor maior ou igual a 10, então ficaria assim: #13153456 – cor1 = 13, cor2 = 15. E agora? Não posso definir mais de um dígito, vai dar erro na interpretação da cor… é justamente ai que entram as letras.
As letras na verdade representam os valor que são de 2 dígitos (A = 10, B = 11, C = 12, D = 13, E = 14 e F = 15). Sendo assim, trocando os números por letras, podemos criar uma cor válida para o CSS: #DF3456.
São 16 (0 + 15) valores porque cada cor tem 256 variações (horizontais e verticais): 16×16 = 256. Nos programas, como photoshop, é exibido o valor 1-255 + 0. Resumidamente, os valores hexadecimais formam os números de 0 a 255, fazendo um cálculo matemático para se chegar a esse resultado. Para realizar este cálculo, é obrigatório a definição com 6 dígitos, por isso o CSS faz a conversão de 3 valores. O cálculo é:
R1+R2, G1+G2, B1+B2
Cálculo para achar o valor de R (R1 + R2, respectivamente 13 e 15 em nosso exemplo):
Cálculo base para cada valor: Valor N x (16 elevado a posição do N) = N x (16ˆP)
R1 = 13 x (16ˆ1) = 208
R2 = 15 x (16ˆ0) = 15
R = R1 + R2 = 223
O mesmo para G e B …
Deixando de lados a matemática, vamos voltar ao valores numerais (256). Uma vez definido o valor em hexadecimal e feito o cálculo, sabemos a posição em que a cor está definida. Agora você só precisa entender o porque dos valores 0 a 255.
A posição das cores
A posição, nada mais é do que o ponto de encontro de duas retas; é o que acontece no plano cartesiano. No caso das cores, é a variação da cor para o branco (horizontal), e a variação da cor para o preto (vertical), representados pelos valores de 0 a 255.
Por exemplo: nós estamos na cor vermelha, a cor vermelha possui muitas variações até chegar no branco, e também possui muitas variações para se chegar no preto. Usando o valor decimal, vamos encontrar o ponto de encontro das variações e assim chegar na cor desejada. Neste caso precisamos de apenas um valor (125 por exemplo). Este valor é usado para medir na horizontal e na vertical. Depois de definido o ponto de encontro, a cor que está naquele ponto é a cor passada pelo CSS.
No CSS2, como você sabe, o formato usado é o hexadecimal, que faz toda a brincadeira descrita acima para chegar na posição da cor. Agora no CSS3, você pode usar diretamente a posição da cor, que é até mais fácil de entender. Vejamos:
CSS3 – Formato RGB
Usando a posição das cores, R, G e B, podemos definir uma cor. É bem simples, apenas separe cada posição com uma virgula, dentro da função rgb():
div{ background-color: rgb(223, 53, 86); }
Feito isto, neste exemplo, teremos a cor de fundo. Também é possível usar valores em porcentagem. Cada porcentagem representa a distância do ponto à reta a qual ele pertence (em porcentagem).
div{ background-color: rgb(87%, 15%, 43%); }
- Não é valido, usar R como porcentagem (95%) e os demais (G e B) com valores(125, 46). Isto causará erro de interpretação.
- Se você definir uma cor com valor maior que 255, CSS irá considerar este valor como sendo o máximo (255). O mesmo acontece para o valor mínimo (O -zero).
CSS3 – Formato RGBA
Além do RGB, também foi implementando o formato RGBA. Neste formato, temos um parâmetros adicional, o parâmetro Alpha (A). Como no formato RGB, o formato RBGA também forma uma cor usando o mesmo princípio. A grande diferença do formato RGBA é que com ele, você também define a opacidade/transparência da cor:
div{ background-color: rgba(223, 53, 86, 0.3); }
Usar o formato RGBA é o mesmo que usar o formato RGB, mais a propriedade de opacidade:
div{ background-color: rgb(223, 53, 86); opacity: 0.3; }
- O valor para a opacidade/alpha é de 0 a 1. Para semi-transparência use 0.5 por exemplo.
CSS3 – HSL
Usando outro conceito das cores, o formato HSL usa as propriedades de hue, saturation e lightness para se chegar em uma cor determinada. Em português essas propriedades seriam: tom, saturação e luminosidade. Usar HSL também parece um pouco confuso:
São três valores que devem ser passados. Primeiramente temos o ângulo do tom, que vai de 0 a 360. A tabela abaixo mostra qual é o ângulo de cada cor:
Ângulo | Cor |
---|---|
0 | vermelho |
60 | amarelo |
120 | verde |
180 | ciano |
240 | azul |
300 | púrpura |
360 | vermelho |
Logo depois do ângulo (tom), temos a saturação, que é medida em porcentagem. A saturação, também chamada de grau de pureza, indica a presença da cor media cinza. Quanto mais saturada for a cor, menor será a presença do cinza, chegando cada vez mais ao branco. Você pode ver mais detalhes no wikipédia.
E na terceira e última posição, definimos a luminosidade da cor, que também é definida em porcentagem. O valor padrão é de 50%. Resumidamente com a luminosidade você altera a claridade da cor, podendo chegar ao branco completo (100%) ou ao preto (0%). Se quiser aprender mais sobre a luminosidade, dê uma olhada no wikipédia também que está bem completo.
Finalmente chegamos a definição da cor no formato HSL:
div{ background-color: hsl(229, 62%, 76%); }
CSS3 – Formato HSLA
Semelhantemente ao formato RGBA, o formato HSLA também faz a adição do parâmetro Alpha (A) como última declaração. O resultado é o mesmo: uma cor com o nível de opacidade diferente – se você definir valores menores que 1 é claro…
div{ background-color: hsla(229, 62%, 76%, 0.2); }
Considerações finais
Antes de terminar o post, tenho algumas considerações, já que estamos falando de cor, não da pra deixar de tocar neste assunto:
Alguns monitores, tem mais cores que outros, então pode ter uma diferenciação na visualização de acordo com o monitor do usuário. Outro fator que contribui para esta diferença é o Sistema Operacional do usuário. No caso do OSX, ele possui um sistema de correção de gama, o que já não acontece no Windows o Linux por exemplo. Fica ai o alerta se você ainda não sabia disso. Em minha opinião isto não é algo que você deva se preocupar, seja moderado e tudo ocorrerá bem!
E para fixar mais o assunto, uma lista com links interessantes:
CSS Color Module Level 3 – W3C
Módulo para as cores CSS3 – Majour
Colorometria – Wikipédia
Até a próxima.
A Séria Completa
Iniciando com CSS3
Prosseguindo com CSS3 – Bordas e Sombras
Avançando com CSS3 – Trabalhando com Backgrounds
Avançando com CSS3 – Entendendo as Cores
Aprendendo CSS3 – Trabalhando com Textos
Desenvolvendo CSS3 – Propriedades de Interface
Desenvolvendo CSS3 – Propriedades de Interface: Múltiplas Colunas em CSS3
3 Comentários
Luan Muniz disse:
14 de outubro de 2010 às 15:36
Tem algumas propriedades que é ótimo trabalhar com o RGB
Essa de vc definir a cor e a opacidade dela é um adianto do caramba
Ótimo post Mateus o/
Dhony Silva disse:
20 de dezembro de 2010 às 17:54
Sempre muito explicativo.
Me tirou bastante dúvidas. Parabéns.
Jardel Xavier disse:
1 de abril de 2011 às 10:05
Ótimo post! Com o CSS3 sendo implementado em breve pelos navegadores além de melhorar o uso de padrões web iremos conseguir aumentar em muito a performance dos sites, o que é fundamental para técnicas de SEO.