Tutoriais

Cores do Tailwind CSS: Guia Completo do Sistema de Tons

8 min de leitura

O Tailwind CSS vem com um dos sistemas de cores mais amplamente referenciados no desenvolvimento web. Sua convenção de nomenclatura de tons — números de 50 a 950 — tornou-se um padrão do setor que influencia ferramentas de design, outros frameworks CSS e sistemas de design personalizados muito além dos projetos que realmente usam o Tailwind. Entender como esse sistema é estruturado, como estendê-lo e como ele evoluiu no Tailwind v4 proporciona tanto uma habilidade prática quanto um modelo mental para o design de escalas de cor.

Visão Geral da Paleta Padrão

A paleta padrão do Tailwind contém 22 famílias de cores, cada uma com 11 tons (de 50 a 950). Algumas cores selecionadas — black, white, transparent e inherit — também estão disponíveis como utilitários de valor único.

As famílias de cores principais da paleta padrão são:

Família Matiz Mais claro (50) Mais escuro (950)
slate Cinza-azulado frio #F8FAFC #020617
gray Cinza neutro #F9FAFB #030712
zinc Cinza levemente quente #FAFAFA #09090B
neutral Cinza puro #FAFAFA #0A0A0A
stone Cinza-bege quente #FAFAF9 #0C0A09
red Vermelho #FEF2F2 #450A0A
orange Laranja #FFF7ED #431407
amber Amarelo-laranja #FFFBEB #451A03
yellow Amarelo #FEFCE8 #422006
lime Amarelo-verde #F7FEE7 #1A2E05
green Verde #F0FDF4 #052E16
emerald Verde vívido #ECFDF5 #022C22
teal Verde-ciano #F0FDFA #042F2E
cyan Ciano #ECFEFF #083344
sky Azul-claro #F0F9FF #082F49
blue Azul #EFF6FF #172554
indigo Azul-violeta #EEF2FF #1E1B4B
violet Violeta #F5F3FF #2E1065
purple Roxo #FAF5FF #3B0764
fuchsia Rosa-roxo #FDF4FF #4A044E
pink Rosa #FDF2F8 #500724
rose Vermelho-rosa #FFF1F2 #4C0519

As famílias de cinza (slate, gray, zinc, neutral, stone) diferem principalmente em seu subtom. O slate tem um toque azul-acinzentado, o stone se inclina para o quente e o neutral é o mais puramente acromático. Escolher a família de cinza certa para um projeto importa mais do que muitos desenvolvedores percebem — os cinzas slate têm uma aparência diferente dos cinzas stone em uma UI completa.

Convenção de Nomenclatura de Tons: 50–950

O sistema de numeração segue uma regra consistente: números mais altos são mais escuros. A escala não é perfeitamente linear — a equipe do Tailwind ajustou manualmente os passos para uniformidade perceptual em vez de uniformidade matemática — mas a relação é confiável:

Tom Uso Principal
50 Fundos sutis, estados de hover, listras de linhas de tabela
100 Badges claros, fundos de notificação, fundos de bloco de código
200 Bordas no modo claro, estados desabilitados secundários
300 Ícones e texto secundário em fundos brancos, bordas sutis
400 Texto de placeholder, elementos decorativos
500 O tom de "identidade" — versão mais reconhecível da cor
600 Fundos de botões primários, padrões de elementos interativos
700 Estado de hover para elementos interativos em 600
800 Texto sobre branco, preenchimentos de ícone escuros
900 Texto de título, texto de alto contraste, superfícies de modo escuro
950 Adicionado no Tailwind v3.3 — quase preto com toque de matiz, fundos profundos de modo escuro

O blue-500 padrão do Tailwind é #3B82F6 — um azul médio e totalmente saturado que é o azul "canônico" do Tailwind. blue-600 (#2563EB) é o estado de hover padrão para um botão azul. blue-100 (#DBEAFE) é o fundo para um badge azul. Essas relações são consistentes em todas as famílias de cores da paleta.

A Adição do Ton 950

O Tailwind v3.3 adicionou o tom 950 a todas as famílias de cores. Antes dessa adição, o 900 era a opção mais escura, o que era claro demais para fundos de modo escuro em algumas famílias de cores. Os tons 950 preenchem essa lacuna — são muito escuros, mas retêm um toque visível da matiz pai. Por exemplo, blue-950 (#172554) parece um azul-marinho escuro, não preto puro, tornando-o útil para superfícies de modo escuro que mantêm o caráter da marca.

Adicionando Cores Personalizadas

Para projetos com cores de marca não cobertas pela paleta padrão, o config do Tailwind permite adicionar famílias de cores personalizadas. A abordagem difere entre o Tailwind v3 e o v4.

Tailwind v3: tailwind.config.js

No v3, as cores personalizadas vão no objeto extend.colors para adicionar junto com os padrões, ou no objeto colors para substituí-los:

// tailwind.config.js
const colors = require('tailwindcss/colors');

module.exports = {
  theme: {
    extend: {
      colors: {
        // Adiciona uma família de cores de marca personalizada
        brand: {
          50:  '#f0f9ff',
          100: '#e0f2fe',
          200: '#bae6fd',
          300: '#7dd3fc',
          400: '#38bdf8',
          500: '#0ea5e9',  // Cor de marca primária
          600: '#0284c7',
          700: '#0369a1',
          800: '#075985',
          900: '#0c4a6e',
          950: '#082f49',
        },
        // Ou referencie uma família existente com um novo nome
        primary: colors.indigo,
        danger: colors.red,
      },
    },
  },
};

Após essa configuração, você pode usar classes como bg-brand-500, text-brand-700, border-brand-200 e assim por diante.

Gerando uma Escala Personalizada

A parte desafiadora de adicionar uma cor personalizada é gerar uma escala completa de 11 tons a partir de um único valor hex de marca. Fazer isso manualmente — ajustando a luminosidade manualmente para cada passo — produz resultados inconsistentes.

O Gerador de Tons automatiza isso: insira o hex primário da sua marca e ele calcula a escala completa de 50 a 950 com passos perceptualmente uniformes, gerando valores que você pode colar diretamente no seu config do Tailwind. Por exemplo, se o primário da sua marca é #0EA5E9 (um azul-céu), o gerador produz uma escala completa de 11 tons calibrada para corresponder à curva de luminosidade das paletas nativas do Tailwind.

Usando withOpacityValue para Alpha Dinâmico

No Tailwind v3, os utilitários de cor suportam opacidade arbitrária via sintaxe de barra (bg-blue-500/50 para 50% de opacidade). Ao definir cores personalizadas no v3, você pode fazer isso funcionar usando propriedades CSS personalizadas com o padrão withOpacityValue:

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: {
          500: 'rgb(var(--color-brand-500) / <alpha-value>)',
        },
      },
    },
  },
};

Em seguida, defina os valores de canal brutos em CSS:

:root {
  --color-brand-500: 14 165 233; /* Valores R G B de #0EA5E9 */
}

Isso permite que bg-brand-500/30 (30% de opacidade) funcione corretamente no CSS gerado.

Estendendo a Paleta no Config

Além das famílias de cores personalizadas, o config do Tailwind permite estender a paleta com aliases semânticos e valores arbitrários.

Aliases Semânticos

Uma abordagem: defina as cores da sua marca como aliases semânticos que referenciam a paleta:

// tailwind.config.js
const colors = require('tailwindcss/colors');

module.exports = {
  theme: {
    extend: {
      colors: {
        primary: colors.blue,
        secondary: colors.violet,
        success: colors.green,
        warning: colors.amber,
        danger: colors.red,
        neutral: colors.slate,
      },
    },
  },
};

Agora bg-primary-500 gera o mesmo CSS que bg-blue-500, mas os nomes das classes comunicam propósito em vez de cor. Esse padrão espelha a abordagem de nomenclatura semântica em design tokens — a mesma classe funciona mesmo que você decida posteriormente que a cor primária deveria ser índigo em vez de azul.

Cores Semânticas de Valor Único

Para sistemas de design em que você quer cores nomeadas sem a escala completa:

module.exports = {
  theme: {
    extend: {
      colors: {
        'brand-primary':    '#0EA5E9',
        'brand-secondary':  '#7C3AED',
        'text-on-primary':  '#FFFFFF',
        'surface-dark':     '#0F172A',
      },
    },
  },
};

Use-as como bg-brand-primary, text-text-on-primary e assim por diante.

Tailwind v4: A Abordagem com Variáveis CSS

O Tailwind v4 introduz um modelo de configuração fundamentalmente diferente. Em vez de um arquivo de configuração JavaScript, todo o sistema de design é definido em CSS usando propriedades customizadas e configuração baseada em CSS.

A Diretiva @theme

As cores no Tailwind v4 são definidas usando a diretiva @theme no seu arquivo CSS:

@import "tailwindcss";

@theme {
  /* Redefine ou estende a paleta padrão */
  --color-brand-50:   #f0f9ff;
  --color-brand-100:  #e0f2fe;
  --color-brand-200:  #bae6fd;
  --color-brand-300:  #7dd3fc;
  --color-brand-400:  #38bdf8;
  --color-brand-500:  #0ea5e9;
  --color-brand-600:  #0284c7;
  --color-brand-700:  #0369a1;
  --color-brand-800:  #075985;
  --color-brand-900:  #0c4a6e;
  --color-brand-950:  #082f49;
}

O Tailwind v4 lê as propriedades customizadas --color-* e gera automaticamente as classes utilitárias correspondentes: bg-brand-500, text-brand-700, border-brand-200, etc.

Cores Semânticas no v4

A abordagem do v4 torna o alias semântico de cores extremamente limpo porque usa propriedades CSS personalizadas padrão:

@import "tailwindcss";

@theme {
  --color-primary:           var(--color-blue-600);
  --color-primary-hover:     var(--color-blue-700);
  --color-primary-subtle:    var(--color-blue-50);

  --color-success:           var(--color-green-600);
  --color-danger:            var(--color-red-600);
  --color-warning:           var(--color-amber-500);
}

Agora bg-primary é uma classe Tailwind válida — e como ela referencia uma propriedade CSS personalizada, você pode sobrescrevê-la em um bloco de modo escuro ou seletor de tema sem tocar no config do Tailwind:

[data-theme="dark"] {
  --color-primary: var(--color-blue-400);
}

Essa é a melhoria mais significativa do sistema de cores do v4: o tema é CSS puro, sem necessidade de etapa de build para trocar de tema.

Cores P3 e OKLCH no v4

A paleta padrão do Tailwind v4 usa valores OKLCH internamente para uniformidade perceptual. A paleta no v4 produz passos visualmente mais consistentes entre matizes — particularmente notável em cores quentes como laranja e amarelo, onde paletas anteriores tinham passos de luminosidade irregulares.

Ao usar o Conversor de Cor para gerar valores OKLCH para as cores da sua marca, você pode inseri-los diretamente no bloco @theme:

@theme {
  /* Cor de marca definida em OKLCH para suporte a displays P3 de amplo gamut */
  --color-brand-500: oklch(60% 0.18 220);
}

Navegadores modernos em displays de amplo gamut (a maioria dos MacBooks e iPhones) renderizarão isso no espaço de cor P3 — produzindo um azul visivelmente mais vívido do que o equivalente limitado ao sRGB.

Dicas Práticas de Seleção de Cor

Combinando Famílias de Forma Eficaz

As famílias de cinza do Tailwind foram projetadas para complementar cores de destaque específicas. Algumas combinações comuns:

  • slate + azul/índigo — frio, corporativo, levemente tecnológico
  • stone + âmbar/laranja — quente, artesanal, humano
  • zinc + violeta/roxo — neutro, moderno, levemente escuro
  • neutral + qualquer — o cinza mais versátil, combina com tudo

Misturar cinzas de famílias diferentes na mesma UI (por exemplo, slate-100 para um fundo e zinc-200 para outro) produz inconsistência visual sutil. Comprometa-se com uma família de cinza por projeto.

A Regra de Texto 100/700 sobre Fundo

Uma combinação segura para contraste no Tailwind: use texto no tom 700 em fundo no tom 100 dentro da mesma família. Por exemplo, text-blue-700 em bg-blue-100 produz um badge azul legível que atende ao WCAG AA. Use o Verificador de Contraste para verificar qualquer combinação não padrão.

Mapeamento de Tons para Modo Escuro

Um padrão comum para o modo escuro no Tailwind é inverter a escala de tons — o que era 700 no modo claro torna-se 300 no modo escuro:

<p class="text-gray-700 dark:text-gray-300">
  Texto do corpo — cinza escuro no modo claro, cinza claro no modo escuro
</p>

<div class="bg-gray-100 dark:bg-gray-800">
  Fundo sutil — levemente cinza no modo claro, superfície escura no modo escuro
</div>

Essa simetria funciona porque a escala do Tailwind foi projetada de modo que 100+900=1000 e 200+800=1000 — os pares de tons são imagens espelhadas em termos de luminosidade percebida.

Principais Conclusões

  • As 22 famílias de cores do Tailwind abrangem cada uma 11 tons de 50 (quase branco) a 950 (quase preto), com 500 como o tom de "identidade" canônico e 600 como o estado interativo padrão.
  • Escolha uma família de cinza (slate, gray, zinc, neutral ou stone) por projeto e use-a de forma consistente — misturar famílias de cinza cria inconsistência visual sutil.
  • Famílias de cores personalizadas são adicionadas via extend.colors no Tailwind v3 ou @theme no v4. O Gerador de Tons gera uma escala completa de 50 a 950 a partir de qualquer valor hex de marca.
  • No Tailwind v4, as cores são propriedades CSS personalizadas sob @theme, habilitando temas em CSS puro sem rebuild — substitua variáveis de cores semânticas em um bloco [data-theme="dark"].
  • Aliases semânticos (primary: colors.blue) fazem os nomes de classes comunicarem propósito em vez de aparência, sobrevivendo a futuras mudanças de cor de marca sem refatorar nomes de classes.
  • O Conversor de Cor fornece equivalentes OKLCH para qualquer cor hex — útil para definições de cores de amplo gamut no v4 que aproveitam os displays P3.

Cores relacionadas

Marcas relacionadas

Ferramentas relacionadas