A versão curta
- Para converter hex em RGB, divide o código de seis dígitos em três pares e converte cada par de base 16 para um número entre 0 e 255.
- Cada par calcula-se como o primeiro dígito vezes 16, mais o segundo dígito, onde as letras de a a f valem de 10 a 15.
- O código hex #7c3aed é rgb(124 58 237): 7c é 124, 3a é 58 e ed é 237.
- Um código hex de três dígitos é uma abreviatura em que cada dígito se duplica, por isso #f60 é a mesma cor que #ff6600.
- Hex e RGB descrevem exatamente as mesmas cores sRGB, por isso converter entre eles nunca muda o aspeto de uma cor.
Nesta página
Para converter hex em RGB, divide o código em três pares de carateres, um para vermelho, um para verde e um para azul, e transforma cada par de base 16 num número normal entre 0 e 255. Para #7c3aed, os pares são 7c, 3a e ed, que passam a 124, 58 e 237, e por isso a cor é rgb(124 58 237). Nada na cor muda. Hex e RGB são duas grafias dos mesmos três números.
Como se constrói um código de cor hex
Um código hex tem seis carateres depois do cardinal. Os dois primeiros são o canal vermelho, os dois do meio são o verde e os dois últimos são o azul. Cada canal pode ter 256 valores, de 0 (nada dessa luz) a 255 (toda ela). A base 16 consegue escrever qualquer um desses 256 valores em exatamente dois carateres, e é por isso que o hex se tornou a forma compacta de escrever cores na web. Para o quadro mais amplo de como estes códigos se relacionam, vê códigos de cor hex explicados.
A base 16 conta de 0 a 9 e depois continua com letras. É a única coisa que precisas de decorar:
Dígito hex
Valor
Dígito hex
Valor
Dígito hex
Valor
Dígito hex
Valor
Como converter hex em RGB à mão
Cada par é um número de dois dígitos em base 16. O dígito da esquerda conta dezasseis e o da direita conta unidades. Multiplica o dígito da esquerda por 16, soma o da direita e tens o valor desse canal.
- 1
Tira o cardinal e divide em pares
#7c3aedpassa a7c,3aeed. São o vermelho, o verde e o azul, por essa ordem. - 2
Converte o par vermelho
7c: 7 × 16 = 112, e c é 12, por isso o vermelho é 112 + 12 = 124. - 3
Converte o par verde
3a: 3 × 16 = 48, e a é 10, por isso o verde é 48 + 10 = 58. - 4
Converte o par azul
ed: e é 14, 14 × 16 = 224, e d é 13, por isso o azul é 224 + 13 = 237. - 5
Escreve o resultado
O CSS moderno aceita
rgb(124 58 237). A forma antiga com vírgulasrgb(124, 58, 237)continua a funcionar em todo o lado.
Duas verificações rápidas mantêm-te honesto. 00 é sempre 0 e ff é sempre 255, por isso qualquer par que comece por uma letra de a a f vale 160 ou mais, e qualquer par que comece por 0 a 7 fica abaixo de 128. Se a tua resposta para ed sair pequena, leste os dígitos ao contrário.
Códigos abreviados e alfa
Um código de três dígitos é um atalho: duplica cada dígito para obter o código completo. #f60 significa #ff6600, que é rgb(255 102 0). #fff é branco e #000 é preto. Só as cores cujos pares repetem um dígito se podem escrever assim, por isso #7c3aed não tem forma curta.
Um código de oito dígitos junta um quarto par para a opacidade. Converte-se da mesma forma, e depois divide-se por 255 para obter uma fração. #7c3aed80 termina em 80, que é 128, e 128 ÷ 255 dá cerca de 0,5, por isso equivale a rgb(124 58 237 / 50%). Um código de quatro dígitos como #f608 é a versão abreviada da mesma ideia.
.card {
/* the same violet written four ways */
color: #7c3aed;
color: rgb(124 58 237);
color: rgb(124, 58, 237);
/* half transparent */
background: #7c3aed80;
background: rgb(124 58 237 / 50%);
}Hex para RGB em JavaScript
Em código, parseInt com base 16 faz a conversão por ti. A função abaixo aceita códigos de três, quatro, seis e oito dígitos, com ou sem cardinal, e devolve os canais mais um alfa entre 0 e 1.
function hexToRgb(hex) {
let h = hex.replace(/^#/, '');
if (h.length === 3 || h.length === 4) {
h = h.split('').map((c) => c + c).join('');
}
if (!/^[0-9a-f]{6}([0-9a-f]{2})?$/i.test(h)) {
throw new Error('Not a hex colour: ' + hex);
}
const n = (i) => parseInt(h.slice(i, i + 2), 16);
return {
r: n(0),
g: n(2),
b: n(4),
a: h.length === 8 ? Math.round((n(6) / 255) * 100) / 100 : 1,
};
}
hexToRgb('#7c3aed'); // { r: 124, g: 58, b: 237, a: 1 }
hexToRgb('f60'); // { r: 255, g: 102, b: 0, a: 1 }
hexToRgb('#7c3aed80'); // { r: 124, g: 58, b: 237, a: 0.5 }Como converter RGB em hex
Voltar atrás é dividir. Divide o canal por 16: o número inteiro é o primeiro dígito e o resto é o segundo. Para 153, 153 ÷ 16 dá 9 e resto 9, por isso o par é 99. Para 51 dá 3 e resto 3, ou seja 33, e 102 dá 6 e resto 6, ou 66. Assim rgb(51 102 153) é #336699. Em JavaScript, toString(16) faz isso, com um preenchimento para que os dígitos únicos mantenham o zero à esquerda:
const rgbToHex = (r, g, b) =>
'#' + [r, g, b].map((v) => v.toString(16).padStart(2, '0')).join('');
rgbToHex(51, 102, 153); // '#336699'
rgbToHex(13, 148, 136); // '#0d9488'Quando usar hex, RGB ou outra coisa
O hex é compacto e fácil de colar entre ferramentas, e por isso os guias de marca e os ficheiros de design o usam. O RGB é mais fácil de raciocinar quando precisas de mudar um canal ou juntar transparência em código. Nenhum é bom nas perguntas que os designers realmente fazem, como “faz isto um pouco mais claro” ou “encontra uma versão mais suave deste azul”. Para essas, cor HSL e OKLCH descrevem as cores por matiz e luminosidade, para que pequenas edições se comportem de forma previsível.
Hex ou RGB servem para
- Guias de marca e entrega a programadores
- Copiar uma cor entre aplicações
- Juntar transparência em CSS ou canvas
- Igualar um valor exato de uma especificação
Recorre a HSL ou OKLCH para
- Tornar uma cor mais clara ou mais escura
- Construir tons claros e escuros para uma paleta
- Gradientes mais suaves entre matizes distantes
- Temas com variáveis CSS
Mais uma distinção importa para a impressão. Hex e RGB descrevem luz num ecrã, por isso uma impressora tem de os traduzir em tinta, e as cores de ecrã muito vivas podem ficar baças no papel. RGB vs CMYK explica o que esperar. No ecrã, as cores convertidas são idênticas e, quando precisas de uma cor que se desvaneça, as formas com alfa acima são o que escreves; gradientes transparentes em CSS mostra-as em ação.
Antes de usares qualquer cor convertida em texto, confirma-a contra o fundo com um verificador de contraste de cor. No Gradiently raramente precisas: a tinta automática escolhe tipo claro ou escuro para cada linha a partir da paleta do próprio Mark, para que as palavras se leiam.
Perguntas frequentes
Como se converte hex em RGB?
Divide o código de seis dígitos em três pares e converte cada um de base 16: multiplica o primeiro dígito por 16 e soma o segundo, com a a f a valerem de 10 a 15. #7c3aed passa a 124, 58, 237.
O que é #ffffff em RGB?
É rgb(255 255 255), branco puro. Cada par é ff, que é 15 × 16 + 15 = 255.
Como converto hex em RGBA?
Converte os três primeiros pares como habitual. Se o código tiver oito dígitos, converte também o último par e divide-o por 255 para obter o alfa, de modo que 80 dá cerca de 0,5.
Converter hex em RGB muda a cor?
Não. Ambos são notações dos mesmos valores sRGB, por isso a cor é renderizada de forma idêntica nos dois casos.
Como converto RGB de volta em hex?
Divide cada canal por 16: o número inteiro é o primeiro dígito hex e o resto o segundo. Em JavaScript usa value.toString(16).padStart(2, '0').
Escrito pela Gradiently
A equipa por trás da Gradiently, uma ferramenta de design construída em torno dos Marks: gradientes vivos que fazem tudo o que crias parecer teu.
Ver o nosso perfil