QuickUse Generator

Color Picker & Conversor

Escolha uma cor visualmente ou converta entre HEX, RGB, HSL, OKLCH e a paleta Tailwind. Sincronização em tempo real, conta-gotas onde houver suporte, 100% client-side.

Match exato na paleta.

#ffffff

Guia editorial

Sobre este gerador

Leitura técnica honesta sobre o que está acontecendo por trás do botão Gerar.

Cores na tela são apenas números, mas os formatos variam bastante — HEX para designers, RGB para o CSS tradicional, HSL para manipulação intuitiva, OKLCH para espaços perceptualmente uniformes, e classes Tailwind para workflows utility-first. Este picker mantém todos os cinco sincronizados: edite qualquer campo e os outros quatro resolvem em microssegundos, com a swatch atualizando no lugar. Tudo roda no navegador; nada vai para servidor.

Espaços de cor: por que uma cor tem cinco nomes

Uma cor na tela, no nível mais baixo, são três tensões — o quanto o monitor empurra os subpixels vermelho, verde e azul. O padrão de referência dessas tensões é o sRGB (IEC 61966-2-1), ratificado em 1996 e ainda o baseline seguro para trabalho cross-device na web. Todo valor HEX e todo rgb() simples no CSS vive em sRGB. Os displays modernos da Apple — iPhone, iPad Pro, MacBook Pro — renderizam o gamut mais amplo Display P3, que contém cerca de 25% mais volume de cor e alcança vermelhos e verdes mais profundos que sRGB não consegue representar.

HSL, OKLCH e a paleta Tailwind não são espaços separados no sentido de gamut — são parametrizações diferentes do mesmo cubo sRGB. HEX/RGB descrevem o cubo em coordenadas cruas. HSL rotaciona para matiz/saturação/luminosidade visando edição intuitiva. OKLCH remodela para acompanhar a percepção humana. As classes Tailwind são um subconjunto curado de 244 pontos pensado para UI de produto.

HEX e RGB: as tensões literais

HEX é a notação curta do designer para uma tripla sRGB. #ef4444 significa vermelho 0xef (239), verde 0x44 (68), azul 0x44 (68); a mesma cor em CSS aparece como rgb(239, 68, 68). A forma de três dígitos #f44 expande dobrando cada nibble: #f44#ff4444. O picker aceita as duas formas, normaliza para hex de seis dígitos em minúsculas no commit, e rejeita input malformado inline em vez de pegar um fallback silencioso.

RGB é HEX com o parsing removido. Designers tendem a copiar HEX do Figma, engenheiros tendem a digitar RGB direto em literais CSS-in-JS. Não há diferença de informação. A forma HEX de oito dígitos com alpha (#ef4444cc) é reconhecida pelos navegadores, mas este picker trata sRGB de três canais apenas — alpha é uma preocupação separada, em camadas.

HSL: intuitivo mas desigual

O HSL foi adicionado ao CSS no fim dos anos 2000 para dar aos designers uma parametrização mais intuitiva: matiz é a posição numa roda de cores de 360°, saturação é o quanto a cor é vívida, luminosidade é grosso modo o quanto é brilhante. Rotacionar o matiz mantendo saturação e luminosidade constantes produz um ciclo limpo. Reduzir saturação a zero gera cinza. Empurrar luminosidade até 100% gera branco. Esses mapeamentos casam com o modo como as pessoas falam sobre cor.

O detalhe é que HSL é geométrico, não perceptual. Luminosidade 50% é mais escuro para azul do que para amarelo — o mesmo número mapeia para brilhos percebidos diferentes dependendo do matiz. Para edições rápidas tudo bem; para trabalho sistemático (paletas, pares de dark-mode, ajuste de contraste) isso morde. É o problema que o OKLCH resolve.

OKLCH: percepção como unidade

O OKLab foi publicado por Björn Ottosson em dezembro de 2020 como um post de blog — não um artigo acadêmico formal, apenas uma solução cuidadosamente trabalhada para um problema em processamento de imagem. Ele ajustou uma transformação contra dados empíricos de discriminação de cor (elipses de MacAdam, dataset Luo-Rigg) de forma que distâncias numéricas iguais no espaço correspondam a distâncias percebidas iguais para um observador humano. A forma polar, OKLCH, troca as coordenadas cartesianas a/b por chroma e hue. Foi adicionada ao CSS Color Module Level 4 no fim de 2021.

Os ganhos práticos: interpolar entre duas cores OKLCH mantém o matiz percebido (HSL famosamente afunda no cinza no meio do caminho entre pares complementares), e ajustar luminosidade move de forma previsível em todo o espectro. O Tailwind v4 armazena sua paleta inteira em OKLCH justamente por isso. Luminosidade L vai de 0 a 1, chroma C vai aproximadamente de 0 a 0.4 dentro do sRGB (mais alto só em displays wide-gamut), hue H é em graus como no HSL. Quando o chroma é zero, a cor é acromática e o matiz é matematicamente indefinido; este picker normaliza esse caso para H=0.

Tailwind: uma paleta curada de 244 pontos

O sistema de cores default do Tailwind tem 22 famílias — slate, gray, zinc, neutral, stone, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose — cada uma com 11 tons de 50 (mais claro) a 950 (mais escuro). O tom 950 entrou na v3.3 do Tailwind (abril de 2023); codebases mais antigas param em 900. Black e white fecham a paleta em 244 cores nomeadas. A adoção do Tailwind na community frontend brasileira é hoje um dos pontos de convergência mais fortes entre times de design e engenharia.

O picker mapeia qualquer cor sRGB para a classe Tailwind mais próxima calculando a distância euclidiana no espaço de canais de 8 bits e retornando a menor. Δ=0 é um match exato; abaixo de 20 é visualmente indistinguível; acima de 50 significa que o tom mais próximo é um shift perceptível e você provavelmente deveria estender seu config em vez de aproximar. O lookup roda a cada digitação e nunca trava o input.

Precisão de conversão e drift no round-trip

Ir de HEX → HSL → HEX perde no máximo um canal por eixo, porque HSL armazena valores em ponto flutuante que voltam quantizados para 8 bits na saída. HEX → OKLCH → HEX pode driftar em dois canais em cantos extremos do gamut, porque OKLCH passa por um estágio de sRGB linear com raízes cúbicas que não invertem exatamente em aritmética de ponto flutuante. Esses drifts ficam abaixo do limiar perceptual — o olho não consegue distinguir que seu #abcdef voltou como #aacdef.

Para armazenamento, trate sempre o HEX como fonte da verdade. O histórico recente do picker segue a mesma regra: apenas o HEX canônico é persistido, e as quatro formas derivadas são recalculadas no recall. Duas razões. Primeira, payload menor. Segunda, nenhum risco de que um fix futuro na matemática de conversão produza snapshots desatualizados no seu histórico.

EyeDropper: quando o navegador colabora

A EyeDropper API permite que uma página amostre qualquer pixel sob o cursor — em qualquer lugar da tela, inclusive fora da janela do navegador. O gesto do usuário (clicar no botão) é o consentimento; não há prompt intrusivo. O detalhe é o suporte: engines baseadas em Chromium (Chrome 95+, Edge, Opera, Brave) implementam; Firefox e Safari ainda não. O picker detecta window.EyeDropper no mount e desabilita o botão de forma limpa quando ausente — em vez de quebrar ou fingir funcionar.

Onde o workflow paga o próprio custo

Migração de design system é o caso pesado: você tem um HEX da marca, quer a classe Tailwind mais próxima para um protótipo rápido, e quer ver qual é a luminosidade OKLCH antes de comprometer-se com um par. Outros padrões: ajustar pares de dark-mode (manter o matiz, baixar a luminosidade, observar o OKLCH-L num número sensato), avaliar headroom de acessibilidade (delta de OKLCH-L entre foreground e background serve como proxy útil para contraste WCAG), extrair uma cor de um screenshot ou app externo via EyeDropper, ou apenas manter uma paleta de trabalho na tira de recentes enquanto você esboça.

Perguntas frequentes

Por que a mesma cor parece levemente diferente em HEX, HSL e OKLCH?

Os valores descrevem o mesmo ponto no espaço de cor, mas projetam esse ponto por lentes matemáticas diferentes. HEX/RGB são canais sRGB de 8 bits — o que o monitor recebe como tensão. HSL é uma releitura geométrica do RGB em matiz/saturação/luminosidade; é intuitivo mas não é perceptualmente uniforme (HSL com L=50% parece mais escuro em azul do que em amarelo). OKLCH é calibrado contra dados perceptuais humanos — números iguais de luminosidade aparecem igualmente brilhantes. Quando você dá um round-trip entre espaços diferentes, as pequenas perdas de precisão surgem como uma diferença de ±1 num canal; a cor exibida é idêntica para o olho.

O que OKLCH oferece que HSL não oferece?

Uniformidade perceptual. Björn Ottosson publicou o OKLab em dezembro de 2020 ajustando uma transformação contra dados empíricos de discriminação de cor (elipses de MacAdam, dataset Luo-Rigg). A forma polar OKLCH entrou no draft do CSS Color Module Level 4 um ano depois. Na prática isso significa que a interpolação entre duas cores OKLCH mantém o matiz percebido (HSL famosamente passa pelo cinza no meio), e ajustar a luminosidade move o resultado de forma previsível em qualquer matiz. O Tailwind v4 usa OKLCH internamente para a paleta inteira justamente por isso.

Como funciona o "closest match" do Tailwind?

Cada entrada da paleta default v3+ (22 famílias × 11 tons + black e white, ~244 entradas) é pré-carregada como tripla RGB de 8 bits. Quando você muda a cor, o picker calcula a distância euclidiana √(Δr² + Δg² + Δb²) entre a sua cor e cada entrada, e retorna a menor. Δ=0 significa match exato; Δ menor que 20 é visualmente indistinguível; Δ maior que 50 indica que o tom mais próximo do Tailwind é um shift perceptível. O cálculo é determinístico e roda em menos de 100µs, então atualiza a cada digitação sem qualquer impacto de orçamento.

Por que o botão EyeDropper está desabilitado no meu navegador?

A EyeDropper API só existe em navegadores baseados em Chromium (Chrome 95+, Edge 95+, Opera, Brave) — Firefox e Safari ainda não implementaram. A especificação está no WICG do W3C e não avançou para Recommendation, então não há shim de compatibilidade — o picker detecta window.EyeDropper no mount e desabilita o botão. Alternativa: copie o HEX da sua ferramenta de design e cole no campo HEX. Ferramentas nativas do sistema operacional (Digital Color Meter no macOS, PowerToys no Windows) também funcionam e rodam fora do navegador.

Por que a cor parece mais vibrante no meu iPhone do que no monitor do trabalho?

A maioria dos monitores de consumo cobre o gamut sRGB (o baseline da web desde 1996). Os displays Apple modernos — iPhone, MacBook Pro, iPad Pro — renderizam Display P3, que contém cerca de 25% mais volume de cor que sRGB, com vermelhos e verdes notavelmente mais saturados. CSS suporta cores wide-gamut via `color(display-p3 R G B)` (Chrome 111+, Firefox 113+, Safari 10+), mas este picker emite sRGB — é o default seguro para consistência cross-device. Se sua marca precisa de fidelidade P3 num device específico, gere a cor sRGB aqui e adicione a declaração P3 como fallback em camadas no CSS.

Por que as cores salvas armazenam apenas o HEX, não RGB e HSL?

O histórico recente é uma superfície de recall, não um snapshot store. As quatro representações derivadas (RGB, HSL, OKLCH, classe Tailwind) são funções matemáticas puras do HEX canônico — recalcular sob demanda leva microssegundos e é mais barato que serializar tudo no localStorage. Mais importante: persistir saídas derivadas violaria o contrato de privacidade do projeto (CLAUDE.md §3.1.5) e introduziria risco de drift se a matemática de conversão ganhar um fix. O HEX é a fonte da verdade; tudo o resto regenera dele, byte-equal, toda vez.

Qual a diferença entre a luminosidade do OKLCH e a do HSL?

A luminosidade do HSL é uma construção geométrica — corta o cubo RGB na diagonal e reporta onde a sua cor está nessa diagonal. Não corresponde à percepção humana de brilho, e é por isso que HSL com L=50% lê como um azul-meia-noite escuro mas como um amarelo fluorescente. A luminosidade do OKLCH é calibrada contra dados psicofísicos: duas cores com o mesmo OKLCH-L aparecem igualmente brilhantes, independente do matiz. Quando você está desenhando um par dark-mode ou uma paleta voltada para acessibilidade, OKLCH é a ferramenta certa. Quando você está rascunhando com um slider ao lado do editor, HSL é mais rápido.

Posso colar uma classe como "hover:bg-red-500" no campo Tailwind?

Não — o parser aceita apenas o formato base do utilitário (bg-red-500, text-slate-900, border-emerald-200) sem prefixos de variante. Variantes como hover:, dark:, md: mudam quando a classe é aplicada, não que cor ela representa, e seriam ambíguas num picker de cor única. Remova a variante antes de colar, ou use os campos HEX ou RGB — eles passam pelo mesmo lookup de closest match e emitem a mesma classe Tailwind do outro lado.