Dark mode

Domine o modo escuro no Tailwind CSS com a nova arquitetura CSS-first. Aprenda a configurar por sistema ou manualmente, e aplique as melhores práticas de design.


A implementação do modo escuro passou por uma evolução importante no Tailwind CSS. Com a mudança para a arquitetura baseada em CSS nativo (CSS-first), a configuração que antes dependia da propriedade darkMode dentro do arquivo JavaScript tailwind.config.js foi descontinuada.

Agora, o framework gerencia variantes de forma nativa e automática, alinhando-se diretamente com os comportamentos modernos de folhas de estilo e seletores CSS.

Estratégias de Ativação Suportadas

O Tailwind oferece duas abordagens principais para alternar as interfaces entre os modos claro e escuro:

1. Modo Baseado em Sistema (Padrão)

Por padrão, o framework monitora nativamente a media query prefers-color-scheme do navegador. Se o sistema operacional do usuário estiver configurado para o tema escuro, os estilos prefixados com dark: serão aplicados de forma totalmente automática, sem necessidade de qualquer linha de configuração extra.

2. Modo Baseado em Seletor ou Classe

Se você deseja que o usuário controle a alternância de temas manualmente através de um botão (gerenciando uma classe como .dark ou um atributo na tag <html>), o Tailwind permite definir essa variante diretamente no seu arquivo CSS principal utilizando a diretiva @variant:

CSS

@import "tailwindcss";

/* Define que o modificador dark: deve procurar pela classe .dark no elemento raiz */
@variant dark (&:where(.dark, .dark *));

Utilizando o Prefixo dark: para Variações Visuais

Uma vez definido o comportamento no CSS, a aplicação das classes utilitárias no HTML permanece direta e intuitiva. Basta utilizar o modificador dark: seguido da classe que deve sobrescrever o estilo original:

HTML

<div class="bg-white text-slate-900 dark:bg-slate-950 dark:text-slate-50 p-6 rounded-2xl border border-slate-100 dark:border-slate-800 transition-colors">
  Este bloco adapta sua aparência de forma fluida de acordo com o tema ativo.
</div>
  • bg-white é substituído por dark:bg-slate-950 no modo escuro.

  • text-slate-900 é substituído por dark:text-slate-50.

  • border-slate-100 passa a ser dark:border-slate-800.

Exemplo Prático com Alternância Manual (JavaScript)

Se optar pela estratégia baseada em classe, você pode gerenciar a raiz da página de forma simples para alternar os estados visuais da aplicação:

HTML

<!DOCTYPE html>
<html lang="pt-BR" class="dark">
<head>
  <meta charset="UTF-8">
  <title>Modo Escuro com Tailwind</title>
  <link rel="stylesheet" href="output.css">
</head>
<body class="bg-white text-slate-800 dark:bg-slate-950 dark:text-slate-100 min-h-screen flex items-center justify-center transition-colors duration-200">

  <div class="text-center space-y-4">
    <p class="text-sm font-medium text-slate-500 dark:text-slate-400">
      Clique abaixo para testar a reatividade dos componentes.
    </p>
    <button 
      onclick="document.documentElement.classList.toggle('dark')"
      class="px-4 py-2 text-sm font-semibold rounded-xl bg-slate-900 text-white hover:bg-slate-800 dark:bg-slate-100 dark:text-slate-900 dark:hover:bg-slate-200 transition-all active:scale-95"
    >
      Alternar Tema
    </button>
  </div>

</body>
</html>

Combinações Comuns e Semânticas

Para construir interfaces sofisticadas e confortáveis para a leitura em ambientes de baixa luminosidade, adote mapeamentos harmônicos entre as escalas:

  • Tipografia: text-slate-900 dark:text-slate-100

  • Superfícies/Fundos: bg-white dark:bg-slate-950 ou bg-slate-50 dark:bg-slate-900

  • Bordas/Linhas: border-slate-200 dark:border-slate-800

  • Sombras/Elevações: shadow-xl shadow-slate-100 dark:shadow-none (em fundos muito escuros, sombras tendem a perder a utilidade visual, sendo melhor substituí-las por bordas finas de isolamento).

Melhores Práticas de Engenharia Visual

  • Evite o Preto Puro (#000000): Para os fundos escuros principais, prefira tons de cinza fechados ou azulados (como as escalas slate, zinc ou neutral nos níveis 900 ou 950). Eles reduzem consideravelmente o cansaço visual e mantêm uma melhor percepção de profundidade.

  • Aproveite Variáveis CSS Nativas: Como a nova arquitetura do Tailwind gera variáveis CSS sob o capô, você também pode redefinir o valor dos seus tokens diretamente dentro de blocos de mídia nativos no CSS, mantendo o markup do HTML ainda mais limpo:

    CSS

    @theme {
      --color-surface: #ffffff;
    }
    
    @media (prefers-color-scheme: dark) {
      :root {
        --color-surface: #0f172a;
      }
    }
    
    

No HTML, basta usar bg-surface e o próprio navegador gerenciará a mudança de cor de forma nativa. * Atenção aos Elementos de Mídia: Se a sua página possuir imagens muito claras ou diagramas com fundos brancos, utilize modificadores como dark:opacity-80 para suavizar o brilho dessas mídias quando o modo escuro estiver ativo.