HEX, RGB e HSL: a diferença entre formatos de cor para design responsivo
Trabalhar com cores no desenvolvimento web exige compreender os diferentes sistemas de representação e quando cada um é mais adequado. Cada formato foi projetado com um propósito: HEX para brevidade em HTML/CSS, RGB para mistura e manipulação programática, HSL para ajustes intuitivos de tonalidade e luminosidade.
Guia completo dos formatos de cor em CSS
| Formato |
Sintaxe CSS |
Canal Alpha? |
Melhor para |
| HEX |
#FF5733 ou #F53 |
Não (ou HEXA: #FF5733FF) |
Copiar de Figma/Photoshop, design systems |
| HEXA |
#FF573380 (com opacidade) |
Sim (últimos 2 dígitos) |
Cores com transparência em notação hexadecimal |
| RGB |
rgb(255, 87, 51) |
Não |
Manipulação programática, mistura de cores |
| RGBA |
rgba(255, 87, 51, 0.5) |
Sim (0 a 1) |
Overlays, sombras, backgrounds transparentes |
| HSL |
hsl(14, 100%, 60%) |
Não |
Criar variações de tom, paletas, temas dinâmicos |
| HSLA |
hsla(14, 100%, 60%, 0.5) |
Sim (0 a 1) |
Tudo que HSL faz + transparência |
| HWB |
hwb(14 0% 0%) |
Não |
CSS Color Level 4 — intuitivo para humanos |
| oklch |
oklch(0.7 0.2 60) |
Não |
CSS moderno — perceptualmente uniforme |
Por que HSL é o formato ideal para criar temas e paletas
O HSL (Hue, Saturation, Lightness) é o formato mais intuitivo para quem precisa criar variações de uma cor. Para criar uma paleta de botão, por exemplo: mantenha o Hue e a Saturation constantes e ajuste apenas a Lightness. Para o estado padrão: hsl(160, 100%, 35%). Para hover: hsl(160, 100%, 30%). Para disabled: hsl(160, 30%, 60%). Impossível de fazer tão intuitivamente com HEX ou RGB.
Perguntas frequentes — Conversor de Cores
Como converter HEX para RGB manualmente?▼
Separe os pares de dígitos HEX e converta cada um de base 16 para base 10. Ex: #FF5733 → R=FF=255, G=57=87, B=33=51 → rgb(255, 87, 51). Para HEX curto (#F53): duplique cada dígito (#FF5533) antes de converter.
Qual a diferença entre RGB e sRGB?▼
sRGB (standard RGB) é o espaço de cor padrão para a web e monitores modernos, definido pela IEC 61966-2-1. O RGB simples não especifica um espaço de cor. Na prática para desenvolvimento web, considere-os equivalentes. Para trabalho fotográfico e impressão, o espaço de cor importa muito mais.
Como usar variáveis de cor CSS para temas claro/escuro?▼
Defina cores em :root como variáveis CSS: --color-primary: hsl(160, 100%, 35%); e sobrescreva em [data-theme="dark"]. O HSL facilita muito isso pois você pode criar variações semânticas: --color-primary-light: hsl(160, 100%, 45%); --color-primary-dark: hsl(160, 100%, 25%);
O que é a função color-mix() do CSS moderno?▼
Introduzida no CSS Color Level 5, color-mix() mescla duas cores: color-mix(in oklch, blue 30%, red) cria uma cor 30% azul e 70% vermelha no espaço oklch. Suportada em todos os browsers modernos desde 2023, permite criar variantes de cor sem pré-processadores como SASS.
Como escolher cores acessíveis (WCAG)?▼
O WCAG 2.1 exige contraste mínimo de 4.5:1 para texto normal e 3:1 para texto grande. Use nossa ferramenta para obter os valores RGB e calcule o contraste: (L1 + 0.05) / (L2 + 0.05), onde L é a luminância relativa calculada a partir dos componentes RGB. Ferramentas como WebAIM Contrast Checker automatizam isso.
Por que o Figma exporta cores em HEX mas às vezes em rgba()?▼
O Figma usa HEX para cores sem transparência e rgba() quando há opacidade (fill com alpha < 100%). Ao copiar de um layer com blend mode ou opacidade parcial, o Figma gera o rgba() correspondente. Para padronizar no seu CSS, use variáveis com HSL ou RGBA e configure o Figma para copiar no formato desejado.
O que é oklch e por que está se tornando padrão?▼
oklch é um espaço de cor perceptualmente uniforme baseado no modelo de percepção humana. Diferentemente do HSL (que tem inconsistências perceptuais — um amarelo com hsl(60,100%,50%) parece muito mais claro que um azul hsl(240,100%,50%) com os mesmos parâmetros), o oklch é consistente. Recomendado para novos projetos que precisam de acessibilidade e contraste previsíveis.
Como extrair a cor dominante de uma imagem com JavaScript?▼
Use o Canvas API: desenhe a imagem num canvas, use getImageData() para obter os pixels, e calcule a cor dominante com um algoritmo de clustering (k-means ou median cut). Bibliotecas como ColorThief ou Vibrant.js fazem isso de forma otimizada para paletas de imagem.
Qual o significado do # em códigos de cor HEX?▼
O # é apenas um prefixo indicador de que o valor seguinte está em hexadecimal — não tem significado matemático. Vem da notação #RRGGBB onde RR, GG e BB são pares hexadecimais (00 a FF) representando as intensidades de Vermelho, Verde e Azul.
Como gerar uma paleta de cores harmoniosamente?▼
Regras de harmonia cromática: Complementar (cores opostas no círculo cromático — alto contraste), Análogo (cores adjacentes — harmonioso e suave), Triádico (3 cores equidistantes — vibrante e balanceado), Split-complementar (um tom + dois vizinhos do oposto — menor tensão que complementar). No HSL, basta ajustar o Hue em incrementos fixos.