HEX, RGB e HSL: como funcionam as cores no CSS

Entenda os formatos de cor HEX, RGB e HSL, como converter entre eles, como calcular contraste para acessibilidade e como usar cores com mais consistência em interfaces web, com exemplo prático.

Revisão técnica: Cesar GargiuloMDN / WCAG 2.2 / National Eye Institute (color blindness)
Calcule agora: Conversor de cores e contraste CSSResultado na hora, de graça e sem cadastro.

No CSS, a mesma cor pode ser escrita de várias formas: HEX, RGB e HSL são as mais comuns. Todas descrevem a mesma cor final, mas cada notação é mais conveniente para um objetivo. Neste guia você entende o que é cada formato, como converter entre eles, como medir contraste para acessibilidade e como usar unidades responsivas com clamp(). Para converter cores, medir contraste e gerar clamp() na prática, use as ferramentas CSS, que rodam no navegador.

Resposta rápida

  • HEX (#2563eb), RGB (canais 0 a 255) e HSL (matiz, saturação, luminosidade) descrevem a mesma cor.
  • HSL é o mais intuitivo para gerar tons claros/escuros: só ajustar a luminosidade.
  • Contraste WCAG 2.2, critério 1.4.3 (AA): mínimo 4,5:1 em texto normal e 3:1 em texto grande (18pt, ou 14pt em negrito).
  • clamp() cria tamanhos responsivos (mínimo, preferido, máximo) sem media queries.

O que é HEX

HEX é a cor em hexadecimal, no formato sinal de número seguido de seis dígitos: dois para o vermelho, dois para o verde e dois para o azul. Cada par vai de 00 a ff, ou seja, de 0 a 255 em decimal. O preto é #000000 e o branco é #ffffff. Existe a forma curta de três dígitos, como #f80, em que cada dígito é duplicado, virando #ff8800. É a notação mais usada no dia a dia por ser curta e fácil de copiar de ferramentas de design.

O que é RGB

RGB descreve a cor pela intensidade dos três canais de luz: vermelho, verde e azul, cada um de 0 a 255. A cor #2563eb, por exemplo, é rgb(37, 99, 235). É útil quando você pensa diretamente em quanto de cada canal quer, e é a base de como as telas formam cores. Há ainda a variação com transparência, que adiciona um canal alfa.

O que é HSL

HSL separa a cor em três ideias mais próximas da percepção humana: matiz, saturação e luminosidade. A matiz é o tom, medido em graus de 0 a 360, onde 0 é vermelho, 120 é verde e 240 é azul. A saturação, de 0% a 100%, diz se a cor é viva ou acinzentada. A luminosidade, de 0% a 100%, vai do preto ao branco. HSL brilha quando você quer variações: para um tom mais escuro da mesma cor, basta baixar a luminosidade.

A mesma cor nos três formatos

CorHEXRGBHSL
Preto#000000rgb(0, 0, 0)hsl(0, 0%, 0%)
Branco#ffffffrgb(255, 255, 255)hsl(0, 0%, 100%)
Azul#2563ebrgb(37, 99, 235)hsl(221, 83%, 53%)
Vermelho#ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)

Quando usar cada formato

Como converter HEX para RGB

Separe os três pares e converta cada um de hexadecimal para decimal. Em #2563eb: 25 vira 37, 63 vira 99 e eb vira 235, resultando em rgb(37, 99, 235). Quem não quer fazer a conta à mão pode colar o código no conversor de HEX para RGB, que devolve o RGB e o HSL da mesma cor, cada um com botão de copiar. Para entender a conversão entre bases numéricas em geral, o conversor de bases mostra como o hexadecimal vira decimal.

Como converter RGB para HSL

A conversão de RGB para HSL envolve normalizar os canais para a faixa de 0 a 1, encontrar o maior e o menor valor e derivar a matiz, a saturação e a luminosidade a partir deles. É uma conta com algumas etapas, por isso vale usar um conversor de RGB para HSL. O importante é entender o resultado: a matiz indica o tom, e luminosidade e saturação controlam o brilho e a vivacidade.

Contraste e acessibilidade

Contraste é a razão entre a luminância relativa do texto e a do fundo. O critério 1.4.3 da WCAG 2.2 pede, no nível AA, ao menos 4,5 para 1 em texto normal e 3 para 1 em texto grande, e a norma define texto grande como 18 pontos, ou 14 pontos em negrito. No nível AAA os pisos sobem para 7 para 1 e 4,5 para 1. Logotipo, texto decorativo e componente desabilitado ficam fora do critério. Verificar o contraste evita textos cinza-claro sobre fundo branco, que muita gente não consegue ler. Vale lembrar o que o número é: um piso medido, não uma garantia de leitura. Tamanho, espaçamento e peso do traço continuam pesando, e quem passa no 4,5 para 1 com fonte de 11 px ainda entregou uma tela difícil.

O piso também não admite arredondamento. O documento Understanding 1.4.3, do W3C, diz que a razão calculada não se arredonda antes de comparar, e que 4,499 para 1 não atinge 4,5 para 1. Na prática, o cinza #767676 passa sobre fundo branco, com 4,54 para 1, e o #777777, um tom acima, reprova com 4,48 para 1. O verificador de contraste WCAG faz essa conta sem arredondar e mostra quais critérios passam.

CSS clamp e unidades responsivas

Para tamanhos que se adaptam à tela, clamp() define mínimo, valor preferido e máximo em uma única declaração. Por exemplo, uma fonte pode crescer de 16 px no celular até 24 px no monitor, suavemente, sem media queries. Vale também entender as unidades: px é absoluto, rem é relativo à fonte da raiz, em é relativo ao font-size do próprio elemento (e ao do pai apenas quando usado na propriedade font-size), e vw e vh são relativos ao tamanho da janela.

O gerador de CSS clamp() monta a expressão a partir dos dois tamanhos e das duas larguras de tela, e já divide o resultado pela base rem da sua página. Para passar as medidas de um layout de px para rem, o conversor de px para rem traz a tabela das medidas mais usadas na base que você escolher.

Exemplo prático com botão e fundo

Imagine um botão com texto branco (#ffffff) sobre um fundo azul (#2563eb). A razão de contraste fica em 5,17 para 1, acima de 4,5 para 1, então passa no critério AA para texto normal. Se você quisesse uma variação mais escura do azul para o estado pressionado, em HSL bastaria reduzir a luminosidade alguns pontos, mantendo a mesma matiz. Para formatar a folha de estilo resultante, use o formatador de código.

Montando uma paleta consistente

HSL é especialmente útil para construir uma paleta coerente. A partir de uma cor base, você gera variações mantendo a matiz e ajustando a luminosidade: tons mais claros para fundos, tons mais escuros para textos e bordas. Como a matiz permanece, todas as variações parecem da mesma família, o que dá unidade à interface. Por isso muitos sistemas de design definem as cores em HSL e derivam escalas de 50 a 900, do mais claro ao mais escuro.

Ao montar a paleta, pense em pares de uso: qual cor de texto vai sobre cada cor de fundo. É aí que o contraste entra de novo. Uma cor de marca pode ser linda, mas se o texto branco sobre ela não atinge 4,5 para 1, a leitura sofre. Teste cada par antes de fechar a paleta, e tenha alternativas de texto escuro e claro para diferentes fundos.

Por fim, padronize o formato no código. Misturar HEX em um lugar, rgb() em outro e nomes de cores em um terceiro dificulta a manutenção. Escolha uma convenção, documente as cores como variáveis CSS e reutilize. Combinado com unidades responsivas via clamp() para espaçamentos e tipografia, isso deixa o front-end mais previsível e fácil de evoluir, com menos retrabalho quando a identidade visual muda.

Um cuidado extra é com daltonismo e percepção de cor. A deficiência na visão de cores atinge cerca de 1 em cada 12 homens, número usado pelo National Eye Institute, e uma parcela bem menor das mulheres, então não confie só na cor para transmitir informação. Um botão de erro não deve depender apenas do vermelho; acrescente um ícone ou um texto. Da mesma forma, em gráficos, combine cor com padrões ou rótulos. Bom contraste e uso de cor que não seja a única pista deixam a interface acessível a mais gente, o que melhora a experiência de todo mundo e costuma andar junto com um HTML mais semântico e legível.

Quando usar a ferramenta do ValorFinal

Use as ferramentas CSS para converter HEX, RGB e HSL, calcular contraste WCAG, gerar clamp() e converter unidades. Conheça as demais ferramentas de tecnologia para apoiar seu fluxo de front-end.

Fontes e referências

Conclusão

HEX, RGB e HSL descrevem a mesma cor de formas diferentes, e escolher a notação certa facilita o trabalho: HSL para gerar paletas, HEX para copiar valores, RGB para canais. Não esqueça o contraste WCAG e o uso de unidades responsivas. Para converter cores, medir contraste e gerar clamp(), use as ferramentas CSS e conheça as demais ferramentas de tecnologia.

Calculadoras deste guia

Leia também

Como citar esta página

Vai citar este guia em uma matéria, post ou trabalho? Copie a referência pronta. O conteúdo é baseado em MDN (CSS color) e revisado pela equipe editorial.

ValorFinal. HEX, RGB e HSL: como funcionam as cores no CSS. Disponível em: https://valorfinal.com.br/guia/cores-hex-rgb-hsl-css. Atualizado em: 24/09/2026.

ValorFinal VIP: Sem anúncios no portal inteiro, cenários salvos e alertas por e-mail.

Como validamos este conteúdo

Base deste guia: MDN / WCAG 2.2 / National Eye Institute (color blindness). Padrões, APIs, versões e recomendações técnicas evoluem. O conteúdo reflete a documentação de referência na data de atualização; confira sempre a documentação oficial da versão que você usa. Entenda nossa metodologia em como validamos os cálculos.

Perguntas frequentes

O que significa uma cor HEX como #2563eb?
É uma cor escrita em hexadecimal, com dois dígitos para vermelho, dois para verde e dois para azul. Em #2563eb, 25 é o vermelho, 63 o verde e eb o azul, cada par variando de 00 a ff (0 a 255). É a notação mais usada no CSS por ser compacta. A forma curta de três dígitos, como #f80, expande cada dígito em dois.
Qual a diferença entre RGB e HSL?
RGB descreve a cor pela quantidade de vermelho, verde e azul. HSL descreve pela matiz (hue, o tom em graus de 0 a 360), saturação (quão viva é a cor) e luminosidade (quão clara ou escura). HSL é mais intuitivo para ajustar uma cor: para escurecer, basta reduzir a luminosidade, mantendo a matiz.
Como converter HEX para RGB?
Separe os três pares hexadecimais e converta cada um para decimal. Por exemplo, #2563eb vira R=37, G=99, B=235, porque 25 em hexadecimal é 37, 63 é 99 e eb é 235. Para o caminho inverso, converta cada componente de volta para dois dígitos hexadecimais.
O que é contraste e por que ele importa?
Contraste é a razão entre a luminância relativa do texto e a do fundo. O critério 1.4.3 da WCAG 2.2, no nível AA, pede no mínimo 4,5 para 1 em texto normal e 3 para 1 em texto grande, que a norma define como 18 pontos ou 14 pontos em negrito. No nível AAA, pelo critério 1.4.6, os números sobem para 7 para 1 e 4,5 para 1. O critério tem exceções: logotipo, texto puramente decorativo e componente desabilitado ficam de fora. Passar no número ajuda muito quem tem baixa visão, mas não é promessa de legibilidade: tamanho da fonte, espaçamento, peso do traço e escolha do tipo continuam pesando, e o teste final é ler na tela.
Para que serve o CSS clamp()?
clamp() define um valor mínimo, um valor preferido e um máximo, criando tamanhos que se adaptam à largura da tela sem media queries. É muito usado em tipografia fluida: a fonte cresce suavemente entre dois breakpoints, sem ficar pequena demais no celular nem grande demais no monitor.
Qual formato de cor devo usar no CSS?
Todos funcionam; a escolha é de conveniência. HEX é compacto e popular. RGB é direto quando você pensa em canais. HSL facilita variações de tom, claro e escuro a partir de uma cor base. Muitos projetos definem a paleta em HSL para gerar tons relacionados com facilidade.
Como adicionar transparência a uma cor no CSS?
Use a variação com canal alfa: rgba(37, 99, 235, 0.5) ou hsla(221, 83%, 53%, 0.5), onde o último valor (0 a 1) é a opacidade. No HEX, dá para adicionar dois dígitos de alfa ao final (#2563eb80). O CSS moderno também aceita rgb() e hsl() com uma barra para o alfa. A escolha depende do que for mais legível no seu código.
Como escolher uma cor de texto acessível sobre um fundo?
Calcule a razão de contraste entre o texto e o fundo e compare com o critério 1.4.3 da WCAG 2.2: 4,5:1 para texto normal e 3:1 para texto grande, que a norma define como 18 pontos ou 14 pontos em negrito, no nível AA. Se o contraste for baixo, escureça o texto ou clareie o fundo (ou vice-versa). Ter versões de texto claro e escuro permite escolher a que melhor contrasta com cada cor de fundo.
Devo usar px, rem, em, vw ou vh?
px é absoluto e previsível; rem é relativo à fonte da raiz e ótimo para tipografia consistente e acessível; em é relativo ao font-size do próprio elemento, e só na propriedade font-size ele cai no valor herdado do pai; vw e vh são relativos ao tamanho da janela, bons para elementos que devem acompanhar a tela. Essa diferença do em explica o espaçamento que parece mudar sozinho: em padding e margin, 1em é a fonte do próprio elemento, então ajustar a fonte do componente mexe no espaçamento junto. Em tipografia, rem combinado com clamp() costuma ser uma boa escolha.
Posso confiar só na cor para transmitir informação?
Não. A deficiência na visão de cores atinge cerca de 1 em cada 12 homens, número que o National Eye Institute usa, e uma parcela bem menor das mulheres, o que coloca a população como um todo perto da metade dessa taxa. Um estado de erro não deve depender só do vermelho: acrescente um ícone ou um texto. Em gráficos, combine cor com padrões ou rótulos. Usar a cor como reforço, e não como única pista, deixa a interface acessível a mais gente.