Em HTML e CSS existem cinco formas de definir uma cor: nome (140 cores prontas), hexadecimal (#RRGGBB), RGB/RGBA, HSL/HSLA e oklch. Hexadecimal é o mais usado em código, RGB aparece quando se precisa de transparência e HSL é o preferido por designers porque deixa o ajuste de tons intuitivo.
A tabela abaixo mostra o vermelho puro nos cinco formatos. São todos equivalentes e o navegador renderiza exatamente a mesma cor:
| Formato | Vermelho puro |
|---|---|
| Nome | red |
| Hexadecimal | #FF0000 |
| RGB | rgb(255, 0, 0) |
| RGBA (com transparência) | rgba(255, 0, 0, 1) |
| HSL | hsl(0, 100%, 50%) |
| oklch (CSS moderno) | oklch(0.628 0.258 29.23) |
A escolha do formato depende do contexto, não da cor. Para código limpo, hexadecimal vence. Para overlays e modais, RGBA. Para um sistema de design com variações de tom (claro/escuro), HSL é insubstituível.
Formato hexadecimal: #RRGGBB
Hexadecimal é a notação mais comum em CSS. Começa com # seguida de seis caracteres divididos em três pares: vermelho, verde e azul. Cada par varia de 00 (mínimo) a FF (máximo).
.botao {
background-color: #FF5733;
color: #FFFFFF;
}
A forma curta de três dígitos (#F00) é válida e equivale a #FF0000. Funciona quando os três pares têm dígitos repetidos, o navegador duplica cada um automaticamente.
Hexadecimal aceita transparência desde 2018 via oito dígitos (#RRGGBBAA), onde os dois últimos controlam a opacidade de 00 (invisível) a FF (sólido). Suporte amplo em navegadores modernos.
| Hex | Cor | Equivalente RGB |
|---|---|---|
#000000 | Preto | rgb(0, 0, 0) |
#FFFFFF | Branco | rgb(255, 255, 255) |
#FF0000 | Vermelho | rgb(255, 0, 0) |
#00FF00 | Verde puro | rgb(0, 255, 0) |
#0000FF | Azul | rgb(0, 0, 255) |
#FFFF00 | Amarelo | rgb(255, 255, 0) |
#00FFFF | Ciano | rgb(0, 255, 255) |
#FF00FF | Magenta | rgb(255, 0, 255) |
#808080 | Cinza médio | rgb(128, 128, 128) |
#C0C0C0 | Prata | rgb(192, 192, 192) |
Formato RGB e RGBA
RGB usa três valores de 0 a 255, separados por vírgulas, dentro de rgb(). Cada valor representa a intensidade de vermelho, verde e azul.
.cartao {
background-color: rgb(255, 87, 51);
border: 1px solid rgb(0, 0, 0);
}
A versão RGBA adiciona um quarto valor, o canal alfa, que controla a transparência. Vai de 0 (totalmente transparente) a 1 (sólido), aceitando decimais como 0.5 para 50%.
.overlay {
background-color: rgba(0, 0, 0, 0.7);
}
.botao-hover:hover {
background-color: rgba(255, 87, 51, 0.9);
}
A sintaxe moderna do CSS Color Level 4 aceita RGB sem vírgulas e com / antes do alfa: rgb(255 87 51 / 0.9). Ambas funcionam em qualquer navegador atual.
RGBA é a escolha certa para overlays, modais escurecidos, hover states e qualquer elemento que precisa deixar o fundo aparecer. Hex com 8 dígitos faz o mesmo, mas RGBA é mais legível porque o alfa fica em decimal.
Formato HSL e HSLA
HSL significa matiz (hue), saturação (saturation) e luminosidade (lightness). Em vez de pensar em quanto vermelho, verde e azul misturar, você pensa em cor + intensidade + claridade, exatamente como o cérebro percebe cor.
:root {
--primaria: hsl(14, 100%, 60%);
--primaria-clara: hsl(14, 100%, 75%);
--primaria-escura: hsl(14, 100%, 45%);
}
Os três valores funcionam assim:
- Matiz (0 a 360°): a cor no círculo cromático. 0° é vermelho, 120° é verde, 240° é azul.
- Saturação (0% a 100%): 0% é cinza, 100% é a cor mais viva.
- Luminosidade (0% a 100%): 0% é preto, 50% é a cor pura, 100% é branco.
Designers preferem HSL porque criar variações de tom é trivial: muda só a luminosidade e a cor inteira do sistema acompanha de forma harmônica. Em hex isso exige recalcular três pares de caracteres; em HSL é um número.
HSLA adiciona o canal alfa exatamente como RGBA: hsla(14, 100%, 60%, 0.5).
Cores nomeadas: as 140 cores prontas do HTML
O HTML tem 140 nomes de cores reconhecidos por todos os navegadores. As mais usadas são as 17 básicas. Para projetos rápidos, protótipos ou para escrever código mais legível, usar o nome é válido.
.aviso { background-color: orange; }
.erro { background-color: crimson; }
.sucesso { background-color: forestgreen; }
A tabela abaixo agrupa as principais por matriz cromática:
Vermelhos e rosas
| Nome | Hex | Visual |
|---|---|---|
red | #FF0000 | Vermelho puro |
crimson | #DC143C | Vermelho carmim |
darkred | #8B0000 | Vermelho escuro |
firebrick | #B22222 | Vermelho tijolo |
tomato | #FF6347 | Vermelho tomate |
salmon | #FA8072 | Salmão |
pink | #FFC0CB | Rosa claro |
hotpink | #FF69B4 | Rosa vivo |
deeppink | #FF1493 | Rosa profundo |
Laranjas e amarelos
| Nome | Hex | Visual |
|---|---|---|
orange | #FFA500 | Laranja |
darkorange | #FF8C00 | Laranja escuro |
coral | #FF7F50 | Coral |
gold | #FFD700 | Dourado |
yellow | #FFFF00 | Amarelo |
khaki | #F0E68C | Cáqui |
wheat | #F5DEB3 | Trigo |
Verdes
| Nome | Hex | Visual |
|---|---|---|
green | #008000 | Verde padrão |
lime | #00FF00 | Verde lima |
forestgreen | #228B22 | Verde floresta |
seagreen | #2E8B57 | Verde mar |
olive | #808000 | Oliva |
darkgreen | #006400 | Verde escuro |
lightgreen | #90EE90 | Verde claro |
Azuis e ciano
| Nome | Hex | Visual |
|---|---|---|
blue | #0000FF | Azul puro |
navy | #000080 | Azul marinho |
royalblue | #4169E1 | Azul royal |
steelblue | #4682B4 | Azul aço |
dodgerblue | #1E90FF | Azul dodger |
skyblue | #87CEEB | Azul céu |
cyan | #00FFFF | Ciano |
turquoise | #40E0D0 | Turquesa |
teal | #008080 | Verde-azulado |
Roxos e violetas
| Nome | Hex | Visual |
|---|---|---|
purple | #800080 | Roxo |
indigo | #4B0082 | Índigo |
violet | #EE82EE | Violeta |
magenta | #FF00FF | Magenta |
orchid | #DA70D6 | Orquídea |
plum | #DDA0DD | Ameixa |
mediumpurple | #9370DB | Roxo médio |
Marrons e neutros quentes
| Nome | Hex | Visual |
|---|---|---|
brown | #A52A2A | Marrom |
chocolate | #D2691E | Chocolate |
sienna | #A0522D | Sienna |
tan | #D2B48C | Bege |
beige | #F5F5DC | Bege claro |
peru | #CD853F | Peru |
Cinzas e neutros
| Nome | Hex | Visual |
|---|---|---|
black | #000000 | Preto |
white | #FFFFFF | Branco |
gray | #808080 | Cinza |
silver | #C0C0C0 | Prata |
lightgray | #D3D3D3 | Cinza claro |
darkgray | #A9A9A9 | Cinza escuro |
dimgray | #696969 | Cinza chumbo |
slategray | #708090 | Cinza ardósia |
A lista oficial completa das 140 cores nomeadas do CSS está no MDN.
Variáveis CSS para reutilizar cores
A partir do CSS moderno (suporte em qualquer navegador desde 2017), o melhor jeito de organizar cores é criar variáveis no :root. Toda a paleta fica num lugar só e qualquer mudança propaga pelo site inteiro.
:root {
--cor-primaria: #FF5733;
--cor-secundaria: #2E86AB;
--cor-texto: #1A1A1A;
--cor-fundo: #FFFFFF;
--cor-borda: #E0E0E0;
}
.botao {
background-color: var(--cor-primaria);
color: var(--cor-fundo);
border: 1px solid var(--cor-borda);
}
.cartao {
background-color: var(--cor-fundo);
color: var(--cor-texto);
}
A vantagem fica óbvia em refatorações: trocar a identidade visual do site inteiro vira mudar cinco linhas no :root. Sem variáveis, seria buscar e substituir cor por cor em todos os arquivos.
Acessibilidade: contraste WCAG mínimo
Cores bonitas em mockup nem sempre são legíveis na tela. A diretriz WCAG 2.1 exige contraste mínimo de 4.5:1 entre texto e fundo para texto normal e 3:1 para texto grande (18px em diante ou 14px em negrito). Falhar nessa regra é causa comum de reprovação em auditorias de acessibilidade.
Combinações problemáticas frequentes:
- Cinza claro (
#999999) sobre branco: 2.85:1, falha - Amarelo (
#FFFF00) sobre branco: 1.07:1, ilegível - Vermelho (
#FF0000) sobre fundo escuro: depende do tom escuro, geralmente passa
O WebAIM Contrast Checker calcula a razão de contraste entre duas cores em segundos. Cole hex de texto e fundo, ele retorna se passa nos níveis AA e AAA da WCAG.
/* Texto que passa WCAG AA (4.5:1) */
.legivel {
color: #1A1A1A;
background-color: #FFFFFF;
}
/* Texto que FALHA (contraste baixo) */
.ilegivel {
color: #BBBBBB;
background-color: #FFFFFF;
}
Dark mode com prefers-color-scheme
O CSS detecta automaticamente se o usuário escolheu tema escuro no sistema operacional e aplica cores diferentes sem precisar de JavaScript. A media query prefers-color-scheme é a base do dark mode moderno.
:root {
--cor-fundo: #FFFFFF;
--cor-texto: #1A1A1A;
--cor-primaria: #FF5733;
}
@media (prefers-color-scheme: dark) {
:root {
--cor-fundo: #1A1A1A;
--cor-texto: #F0F0F0;
--cor-primaria: #FF7A5C;
}
}
body {
background-color: var(--cor-fundo);
color: var(--cor-texto);
}
A cor primária no modo escuro foi clareada de propósito. Cores saturadas vibrantes que funcionam no claro tendem a “queimar” no escuro, então a regra é clarear levemente e reduzir saturação para preservar legibilidade.
Formatos modernos: oklch e color-mix
O CSS Color Module Level 4 introduziu o oklch(), um espaço de cor que respeita a percepção humana muito melhor que RGB ou HSL. Já tem suporte amplo nos navegadores em 2026 e é o futuro de design systems profissionais.
.botao {
background-color: oklch(0.7 0.2 30);
color: oklch(0.98 0 0);
}
Os três valores em oklch são luminosidade (0 a 1), chroma (0 a ~0.4) e matiz (0 a 360). A vantagem prática: duas cores com a mesma luminosidade em oklch parecem ter brilho equivalente para o olho humano, coisa que RGB e HSL não garantem.
Outra função moderna é color-mix(), que mistura duas cores na proporção desejada sem precisar de pré-processador:
.destaque {
background-color: color-mix(in oklch, #FF5733 70%, white);
}
Esse código produz uma versão 30% mais clara do vermelho-laranja sem recalcular nada manualmente. Útil para criar variações de tom de uma cor base.
Para uma explicação visual passo a passo de como hexadecimal e RGB funcionam na prática, a aula do
Curso em Vídeo.
Ferramentas para escolher e converter cores
Cinco ferramentas que valem ter no fluxo:
- Coolors: gera paletas harmônicas com a tecla de espaço. A favorita de designers para começar um projeto do zero.
- Adobe Color: paleta baseada em teoria cromática (complementar, análoga, triádica). Integração nativa com Adobe Creative Cloud.
- ColorZilla: extensão de Chrome e Firefox que pega o código hex de qualquer pixel da tela. Indispensável para “roubar” cor de site existente.
- DevTools do Chrome: botão direito em qualquer elemento, Inspecionar, clique no quadradinho de cor no painel Styles. Abre seletor visual com conversão entre formatos.
- WebAIM Contrast Checker: testa se o par de cores passa nos critérios WCAG. Obrigatório antes de finalizar paleta.
Para entender como cores se aplicam dentro de um site WordPress completo, como criar um site com WordPress do zero traz o contexto de teoria cromática integrada a temas e Elementor.
Erros comuns ao usar cores em HTML
Cinco enganos que aparecem em quase todo projeto iniciante:
Misturar formatos sem necessidade: usar red em um lugar, #FF0000 em outro e rgb(255,0,0) em um terceiro deixa o CSS confuso. Escolha um formato como padrão (geralmente hex) e use o mesmo em todo o projeto.
Esquecer o canal alfa no RGBA: rgba(0, 0, 0) sem o quarto valor é inválido. Se quer cor sólida, use rgb() sem o A.
Hex de 3 dígitos quando os pares não repetem: #F73 é válido e equivale a #FF7733. Mas #F5733 não é hexadecimal válido. Precisa ter 3, 4, 6 ou 8 dígitos exatos depois do #.
Contraste insuficiente: usar cinza claro #999 em fundo branco parece elegante, mas é ilegível para milhões de usuários com baixa visão. Testar contraste é parte do processo.
Cores hardcoded sem variáveis: espalhar #FF5733 em 30 arquivos significa que mudar a identidade visual vai exigir alterar 30 lugares. Usar var(--cor-primaria) desde o início economiza horas.
Perguntas frequentes
Qual o formato de cor mais usado em HTML?
Hexadecimal (#RRGGBB) é o formato mais usado em código CSS por ser compacto e amplamente suportado desde os primeiros navegadores. RGB e HSL aparecem quando se precisa de transparência (RGBA, HSLA) ou ajuste de tons (HSL). Cores nomeadas como red ou blue são úteis em protótipos rápidos.
Como converter hex para RGB?
Cada par hexadecimal vira um número decimal de 0 a 255. Por exemplo, #FF5733: FF é 255 (vermelho), 57 é 87 (verde), 33 é 51 (azul). Resultado: rgb(255, 87, 51). O DevTools do Chrome faz isso automaticamente ao clicar no quadradinho de cor.
Quantas cores HTML existem?
Existem 140 cores nomeadas reconhecidas pelos navegadores (red, blue, crimson, etc.). Em hex ou RGB, qualquer das 16.777.216 combinações possíveis (256 × 256 × 256) é uma cor válida. Para acessibilidade e design coerente, a maioria dos sites usa uma paleta de 5 a 10 cores.
O que é melhor: HSL ou hex?
Hex é melhor para código limpo e compatibilidade ampla. HSL é melhor para sistemas de design onde se cria variações de tom (claro, escuro, mais saturado) a partir de uma cor base. Times de produto geralmente usam HSL nas variáveis CSS e expõem hex no design system.
Como aplicar cor em texto e fundo HTML?
Em CSS, color define a cor do texto e background-color define a cor de fundo. Exemplo: .bloco { color: #FFFFFF; background-color: #1A1A1A; }. Atributos HTML antigos como bgcolor e color em tags estão obsoletos e não devem ser usados.
O que é o canal alfa em RGBA?
O canal alfa controla a transparência da cor, variando de 0 (totalmente transparente) a 1 (sólido). rgba(0, 0, 0, 0.5) é preto com 50% de transparência, comum em overlays. Decimais funcionam: 0.25, 0.75. Hex de 8 dígitos faz o mesmo: #000000 + 80 = #00000080.
oklch vai substituir hex?
Não no curto prazo. Hex segue como padrão em ferramentas de design (Figma, Photoshop) e na maioria dos códigos legados. oklch ganha espaço em design systems novos por ter melhor uniformidade perceptual, mas conviverá com hex pelos próximos anos.














