Este guia abrangente orienta você na configuração do Tailwind CSS versões 3 e 4 em projetos React e Next.js, cobrindo etapas de instalação, configuração, padrões de componentes, implementação de modo escuro, práticas recomendadas e cenários comuns de solução de problemas.
Se você criou aplicativos da web recentemente, provavelmente já ouviu falar sobre Tailwind CSS. A forma como muitos de nós abordamos o estilo mudou, permitindo-nos compor designs diretamente em nossa marcação usando classes utilitárias. Chega de ficar pulando entre arquivos HTML e CSS ou de lidar com convenções de nomenclatura que inevitavelmente falham à medida que os projetos crescem.
Este guia aborda a configuração do Tailwind CSS em projetos React e Next.js, cobrindo a versão 3 (ainda amplamente usada na produção) e a versão 4 (a versão mais recente com melhorias significativas). Também abordaremos a configuração do modo escuro, às vezes confusa, que confunde até mesmo desenvolvedores experientes.
Compreendendo a filosofia do Tailwind
Antes de mergulhar na configuração, vale a pena entender o que torna o Tailwind diferente. Em vez de escrever CSS personalizado para cada componente, você aplica classes de utilitários pré-construídas diretamente aos seus elementos.
Pense nisso como ter um enorme kit de ferramentas onde cada classe faz uma coisa específica muito bem. Quer preenchimento? Adicionar p-4
. Precisa de resposta? Faça isso md:p-8
. Essa abordagem parece estranha no início se você vier do CSS tradicional, mas assim que clicar, você se verá construindo interfaces incrivelmente rápido.
A mágica acontece durante o tempo de construção, quando o Tailwind verifica seus arquivos e inclui apenas os estilos que você realmente usa. Isso significa que apesar de ter milhares de utilitários disponíveis, seu pacote CSS final permanece enxuto.
Configurando Tailwind CSS v3 em React com Vite
Vamos começar com a versão 3 em um projeto React usando Vite. A versão 3 continua incrivelmente popular, especialmente em bases de código existentes, e compreender sua configuração ajuda na manutenção de projetos mais antigos.
Primeiro, crie seu projeto React com Vite:
npm create vite@latest my-react-app -- --template react-ts
cd my-react-app
Agora instale o Tailwind e suas dependências de pares. Essas dependências de pares (PostCSS e Autoprefixer) lidam com o pipeline de transformação CSS do qual o Tailwind depende:
npm install -D tailwindcss@3 postcss autoprefixer
npx tailwindcss init -p
Que init -p
comando cria dois arquivos de configuração. O -p
flag gera especificamente uma configuração PostCSS junto com a configuração do Tailwind, evitando uma etapa manual.
Abra o gerado tailwind.config.js
e diga ao Tailwind onde procurar classes em seu projeto:
/** @type {import('tailwindcss').Config} */
export default {
content: (
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
),
theme: {
extend: {
// Your custom design tokens go here
},
},
plugins: (),
}
O content
matriz é crucial. Ele informa ao Tailwind quais arquivos devem ser verificados em busca de nomes de classes. Perca um caminho aqui e você se perguntará por que seus estilos não estão funcionando.
Em seguida, substitua o conteúdo de src/index.css
com as diretivas do Tailwind:
@tailwind base;
@tailwind components;
@tailwind utilities;
Essas diretivas injetam estilos do Tailwind em seu CSS. A ordem é importante: os estilos básicos fornecem redefinições e padrões, os componentes são para classes de componentes pré-construídas e os utilitários são suas classes de utilitários básicos.
Por fim, certifique-se de que este arquivo CSS seja importado em seu src/main.tsx
:
import './index.css'
Correr npm run dev
e você está pronto para começar a usar classes Tailwind em seus componentes!
Configurando Tailwind CSS v4 em React
A versão 4, lançada no final de 2024, representa uma mudança arquitetônica significativa. A maior mudança? Não há mais dependência de PostCSS para a maioria dos casos de uso. Tailwind agora inclui seu próprio mecanismo extremamente rápido escrito em Rust, tornando a configuração mais simples e a construção mais rápida.
Comece com a mesma configuração do Vite:
npm create vite@latest my-react-app -- --template react-ts
cd my-react-app
A instalação é notavelmente mais simples para v4:
npm install tailwindcss @tailwindcss/vite
Em vez da configuração PostCSS, você adicionará o Tailwind diretamente à configuração do Vite. Atualizar vite.config.ts
:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: (
react(),
tailwindcss(),
),
})
Em seu src/index.css
a sintaxe muda ligeiramente:
@import "tailwindcss";
É isso! A versão 4 detecta automaticamente seus arquivos de conteúdo sem configuração explícita. O novo mecanismo cuida de tudo internamente, resultando em compilações mais rápidas e recargas a quente.
Configurando Tailwind CSS v3 em Next.js
Os projetos Next.js têm suas próprias considerações, especialmente com o App Router introduzido na versão 13. Vamos examinar a configuração da v3 para Next.js:
npx create-next-app@latest my-next-app --typescript --app
cd my-next-app
Instale a pilha Tailwind:
npm install -D tailwindcss@3 postcss autoprefixer
npx tailwindcss init -p
Configurar tailwind.config.js
com caminhos específicos do Next.js:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: (
"./app/**/*.{js,ts,jsx,tsx,mdx}",
"./pages/**/*.{js,ts,jsx,tsx,mdx}", // if using pages directory
"./components/**/*.{js,ts,jsx,tsx,mdx}",
),
theme: {
extend: {},
},
plugins: (),
}
Observe que incluímos ambos app
e pages
diretórios. Isso garante compatibilidade quer você esteja usando o App Router mais recente ou o Pages Router tradicional.
Adicione diretivas Tailwind a app/globals.css
:
@tailwind base;
@tailwind components;
@tailwind utilities;
Certifique-se de que este arquivo CSS seja importado em seu layout raiz (app/layout.tsx
):
import './globals.css'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
{children}
)
}
Configurando Tailwind CSS v4 em Next.js
Para a versão 4 em Next.js, o processo aproveita PostCSS (que Next.js usa internamente de qualquer maneira):
npx create-next-app@latest my-next-app --typescript --app
cd my-next-app
Instale a v4 com seu plugin PostCSS:
npm install tailwindcss @tailwindcss/postcss
Crie um postcss.config.mjs
arquivo:
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
"@tailwindcss/postcss": {},
},
};
export default config;
Atualizar app/globals.css
:
@import "tailwindcss";
A instrução de importação no seu layout permanece a mesma. A inteligência da versão 4 significa que ela encontra automaticamente seus arquivos de conteúdo em um projeto Next.js.
Trabalhando com Componentes
Depois de configurado, o uso do Tailwind é idêntico em todas as versões. Aqui está um componente prático de cartão que mostra padrões comuns:
function Card({ title, description, highlighted = false }) {
return (
max-w-sm rounded-lg overflow-hidden shadow-lg p-6
${highlighted ? 'bg-blue-50 border-2 border-blue-500' : 'bg-white'}
hover:shadow-xl transition-shadow duration-300
`}>
{title}
{description}
);
}
Observe como lidamos com estilos condicionais com literais de modelo. Esse padrão mantém seu JSX legível enquanto aproveita os utilitários do Tailwind.
Implementando o modo escuro corretamente
O modo escuro é onde muitos desenvolvedores enfrentam obstáculos. A abordagem difere entre v3 e v4 e a documentação pode ser confusa. Deixe-me explicar isso claramente.
Modo escuro no Tailwind v3
Primeiro, habilite o modo escuro baseado em classe em seu tailwind.config.js
:
module.exports = {
darkMode: 'class', // This enables manual control
// ... rest of your config
}
Agora crie um componente de alternância de tema que gerencia a classe escura em seu elemento HTML:
// components/ThemeToggle.tsx
import { useEffect, useState } from 'react';
export function ThemeToggle() {
const (theme, setTheme) = useState('light');
useEffect(() => {
// Check for saved preference or default to light
const savedTheme = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const initialTheme = savedTheme || (prefersDark ? 'dark' : 'light');
setTheme(initialTheme);
// Apply the theme
if (initialTheme === 'dark') {
document.documentElement.classList.add('dark');
}
}, ());
const toggleTheme = () => {
const newTheme = theme === 'light' ? 'dark' : 'light';
setTheme(newTheme);
// Update DOM
if (newTheme === 'dark') {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
// Save preference
localStorage.setItem('theme', newTheme);
};
return (
);
}
Para evitar o flash do tema incorreto no carregamento da página, adicione este script ao cabeçalho do documento. Em Next.js, crie um componente:
// app/ThemeScript.tsx
export function ThemeScript() {
const themeScript = `
(function() {
const theme = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (theme === 'dark' || (!theme && prefersDark)) {
document.documentElement.classList.add('dark');
}
})();
`;
return (
);
}
Inclua isso no seu layout raiz antes do corpo:
// app/layout.tsx
import { ThemeScript } from './ThemeScript';
export default function RootLayout({ children }) {
return (
{children}
);
}
Modo escuro no Tailwind v4
A versão 4 muda ligeiramente a abordagem. Em vez de uma opção de configuração, você define o comportamento do modo escuro com CSS. Adicione isto ao seu arquivo CSS global após a importação do Tailwind:
@import "tailwindcss";
/* Enable class-based dark mode */
@variant dark (&:where(.dark, .dark *));
O componente de alternância de tema permanece o mesmo, mas o mecanismo da v4 lida com a variante com mais eficiência.
Para uma abordagem mais sofisticada usando propriedades personalizadas CSS (funciona em ambas as versões):
@import "tailwindcss";
:root {
--color-background: 255 255 255; /* white */
--color-text: 17 24 39; /* gray-900 */
--color-primary: 59 130 246; /* blue-500 */
}
.dark {
--color-background: 17 24 39; /* gray-900 */
--color-text: 243 244 246; /* gray-100 */
--color-primary: 96 165 250; /* blue-400 */
}
Em seguida, estenda sua configuração do Tailwind para usar estas variáveis:
module.exports = {
theme: {
extend: {
colors: {
background: 'rgb(var(--color-background) / )',
text: 'rgb(var(--color-text) / )',
primary: 'rgb(var(--color-primary) / )',
},
},
},
}
Agora você pode usar bg-background
, text-text
e text-primary
aulas que se adaptam automaticamente ao tema.
Melhores práticas das trincheiras
Depois de trabalhar com o Tailwind em vários projetos, aqui estão práticas que se mostram valiosas de forma consistente:
Mantenha sua configuração enxuta. Estenda o tema apenas quando precisar de valores personalizados consistentes em todo o seu projeto. Estilos únicos podem usar valores arbitrários como bg-(#1da1f2)
.
Abrace padrões de componentes. Embora o Tailwind incentive classes utilitárias, não hesite em criar classes de componentes para padrões verdadeiramente repetidos. Use o @apply
diretiva com moderação:
@layer components {
.btn-primary {
@apply px-4 py-2 bg-blue-500 text-white rounded-lg
hover:bg-blue-600 transition-colors;
}
}
Use o plugin oficial mais bonito. Instalar prettier-plugin-tailwindcss
para classificar automaticamente suas aulas em uma ordem consistente. Isso torna as revisões de código muito mais fáceis.
Aproveite o IntelliSense. O extensão oficial do código VS fornece preenchimento automático, visualizações instantâneas e linting. É inestimável para aprender nomes de classes e detectar erros de digitação.
Considere a acessibilidade. O Tailwind facilita a construção de interfaces inacessíveis se você não tomar cuidado. Sempre teste com navegação por teclado e leitores de tela. Use atributos semânticos HTML e ARIA quando apropriado.
Solução de problemas comuns
Se os estilos não estiverem sendo aplicados, verifique-os em ordem:
- Verifique se os caminhos de conteúdo na configuração correspondem à estrutura real do arquivo
- Certifique-se de importar o arquivo CSS no ponto de entrada do seu aplicativo
- Verifique se há erros de digitação nos nomes das classes (a extensão IntelliSense ajuda aqui)
- Na v3, certifique-se de que o PostCSS esteja configurado corretamente
- Limpe o cache de compilação e reinicie o servidor de desenvolvimento
Para compilações de produção que parecem quebradas, você provavelmente está gerando nomes de classes dinamicamente. O Tailwind não consegue detectá-los. Sempre use nomes de classe completos ou coloque-os na lista segura em sua configuração.
Recursos para aprendizagem mais profunda
O documentação oficial do Tailwind CSS continua sendo o melhor recurso para compreender utilitários individuais e opções de configuração. Para obter orientações específicas do Next.js, verifique o Documentação de estilo Next.js.
O IU do Tailwind biblioteca de componentes (paga) apresenta padrões profissionais e práticas recomendadas. Mesmo que você não o compre, os exemplos gratuitos demonstram uma arquitetura de componentes sólida.
Para se manter atualizado sobre os desenvolvimentos da v4, siga o Repositório Tailwind CSS GitHub e o blog oficial.
Seguindo em frente
Tailwind CSS mudou fundamentalmente a forma como muitos de nós construímos interfaces. Quer você escolha a versão 3 estável ou adote as melhorias da versão 4, você terá uma ferramenta testada em batalha que vai desde protótipos até aplicativos de produção.
A chave para dominar o Tailwind não é memorizar todas as classes de utilitários. É entender o modelo mental de compor designs a partir de peças pequenas e intencionais. Comece com o básico, explore gradualmente recursos avançados, como animações e variantes personalizadas, e não hesite em dar uma olhada no código-fonte dos sites que você admira.
Lembre-se de que o Tailwind é uma ferramenta, não uma religião. Combine-o com outras abordagens quando fizerem sentido. Use módulos CSS para animações complexas. Escreva CSS personalizado quando precisar. O objetivo é proporcionar ótimas experiências ao usuário, e o Tailwind é simplesmente uma maneira poderosa de chegar lá com mais rapidez.