Tailwind: estilo por classe utilitária
Você escreve o estilo direto no elemento, com classes curtas que dizem o que fazem, e um programa monta a folha de CSS final a partir do que achou no seu código. Quem vem do CSS tradicional estranha nos primeiros dez minutos e depois para de estranhar.
O que o Tailwind CSS resolve
Num projeto de CSS escrito à mão, cada bloco de tela ganha um nome inventado por você. Seis meses depois ninguém sabe se .card-header-inner ainda é usada em alguma página, apagar dá medo, então ninguém apaga. A folha só cresce, e o tempo gasto batizando pedaço de tela não vira nada que o usuário veja.
O Tailwind troca esse nome inventado por classes fixas que descrevem o efeito: p-6 para o espaçamento interno, rounded-xl para o canto arredondado, bg-white para o fundo. O estilo mora no elemento que ele afeta, e o build entrega no fim só as classes que apareceram no seu código.
Os conceitos que você precisa antes da primeira linha
- Classe utilitária. Uma classe com um trabalho só, o que a documentação oficial chama de single-purpose presentational class.
flexmuda o display,mt-4muda a margem de cima. Você combina várias no mesmo elemento até chegar no visual que quer. - Variante. Um prefixo que liga a classe apenas numa condição:
hover:bg-sky-700só no mouse em cima,md:grid-cols-3só a partir de uma largura de tela,dark:bg-slate-800só no tema escuro. Variantes empilham. Uma classe sozinha nunca carrega dois estados ao mesmo tempo. - Escala do tema. Os valores saem de um conjunto fechado de variáveis, declaradas na diretiva
@theme. A variável--color-sky-500existir é o que faz a classebg-sky-500existir. Você escolhe dentro de uma escala em vez de digitar um hexadecimal novo a cada tela. - Build por varredura. O Tailwind lê seus arquivos como texto puro, sem interpretar o código, e gera CSS para os pedaços que reconhece como classe. A consequência dura: o nome da classe precisa aparecer inteiro no arquivo. Montar
text-mais uma variável não gera regra nenhuma. - Preflight. Antes das suas classes, o Tailwind zera os estilos padrão do navegador. Um
<h1>sem classe sai do mesmo tamanho de um parágrafo. Isso assusta na primeira vez e é intencional, porque todo tamanho passa a vir de uma classe sua.
A ferramenta por dentro: utilitários, escala e estados
A teoria do Tailwind é uma inversão: em vez de inventar um nome (.card-destaque) e escrever CSS pra ele, você compõe a aparência no próprio HTML com classes utilitárias, cada uma fazendo UMA coisa. p-4 é padding, flex é display, text-lg é tamanho de fonte. O CSS da página some, e sobra uma composição legível de utilitários.
- A escala de design é a gramática: os números das classes andam numa régua fixa (
p-2,p-4,p-6), e as cores vêm em famílias com tons (sky-500,sky-700). É o que mantém consistência sem ninguém policiar: os valores fora da régua não existem. - Estado e responsivo são prefixos:
hover:bg-sky-700aplica só no hover, emd:flex-rowaplica só de tablet pra cima. O que em CSS puro é media query e pseudo-classe, aqui é prefixo na mesma classe. - O build só embarca o que você usou: a CLI da seção anterior varre seus arquivos e gera um CSS final com apenas as classes encontradas. É por isso que o arquivo de produção fica pequeno mesmo com milhares de utilitários possíveis.
<!-- um card inteiro sem escrever uma linha de CSS -->
<article class="flex flex-col gap-3 rounded-xl border
border-sky-200 bg-white p-6 shadow-sm
hover:shadow-md md:flex-row">
<img class="h-16 w-16 rounded-full" src="foto.jpg" alt="" />
<div>
<h2 class="text-lg font-bold text-sky-900">Título</h2>
<p class="text-sm text-slate-600">Descrição do card.</p>
</div>
</article>
O pré-requisito honesto: Tailwind não te poupa de saber CSS. Cada classe é uma propriedade CSS de apelido curto, e quem não conhece a propriedade não sabe qual utilitário chamar.
Hello world com a CLI oficial
Precisa de Node.js instalado, porque o Tailwind é um programa que roda antes da página. Nenhuma outra ferramenta entra aqui.
-
Crie a pasta do projeto e entre nela pelo terminal:
mkdir hello-tailwind cd hello-tailwind npm init -y -
Instale o motor e a CLI oficial:
npm install tailwindcss @tailwindcss/cli -
Crie a pasta
srce, dentro dela, o arquivoinput.csscom uma linha só:@import "tailwindcss"; -
Crie
index.htmlna raiz da pasta, com este conteúdo:<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8" /> <title>Tailwind na mão</title> <link href="./src/output.css" rel="stylesheet" /> </head> <body class="bg-slate-100 p-10"> <div class="mx-auto max-w-sm rounded-xl bg-white p-6 shadow-lg"> <h1 class="text-2xl font-bold text-slate-900">Olá, mundo</h1> <p class="mt-2 text-slate-600">Nenhuma linha de CSS foi escrita à mão nesta página.</p> <button class="mt-4 rounded-lg bg-sky-500 px-4 py-2 font-semibold text-white hover:bg-sky-700"> Passe o mouse aqui </button> </div> </body> </html> -
Compile o CSS e deixe o terminal aberto observando as mudanças:
npx @tailwindcss/cli -i ./src/input.css -o ./src/output.css --watchO arquivo
src/output.cssaparece em menos de um segundo. Sem esse passo, a página abre sem estilo nenhum, porque o CSS que o<link>aponta ainda não existe. -
Abra
index.htmlno navegador, com dois cliques ou arrastando o arquivo para uma janela.
Agora a troca. No
index.html, troque bg-sky-500 por bg-emerald-500 e hover:bg-sky-700 por hover:bg-emerald-700. Salve. A CLI em modo --watch recompila sozinha, e um F5 mostra o botão verde. O layout mudou sem você abrir um arquivo .css.E a prova do build enxuto. Procure
bg-red-500 dentro de src/output.css. Não está lá, porque a página nunca usou essa classe. Depois da troca acima, o mesmo vale ao contrário: recompile do zero e a palavra sky some do arquivo inteiro.Uma armadilha que vale conhecer antes de bater nela. Se o output.css sair com dezenas de KB e cheio de classe que você nunca escreveu, a detecção automática de arquivos pegou o caminho errado. A documentação diz quais arquivos o Tailwind pula por padrão: os que estão no .gitignore e a pasta node_modules. Quando a própria pasta do projeto está dentro de um caminho ignorado pelo git, essa regra se perde e o build passa a varrer o que não devia.
O que o Tailwind CSS não é
A crítica mais repetida diz que isso tudo é estilo inline com passo a mais. As duas coisas parecem iguais na tela e se separam em três pontos, e a documentação oficial trata todos: estilo inline não alcança hover nem focus, não entra em media query, e aceita qualquer número que você digitar. A classe utilitária cobre estado, cobre largura de tela, e o valor dela sai da escala do tema. A diferença aparece no dia em que o botão precisa reagir ao mouse.
A segunda confusão vale a mesma correção. O Tailwind não entrega componente pronto. Não existe uma classe .navbar nem uma .btn-primary de fábrica, e quem procura bloco montado está procurando Bootstrap. Com Tailwind você monta o botão uma vez e depois repete a lista de classes, ou extrai um componente no framework que estiver usando.
Fontes
- Tailwind CSS, Install using Tailwind CLI, de onde saíram os nomes dos pacotes e o comando de build desta página. Conferida em 15/08/2026.
- Tailwind CSS, Styling with utility classes, a definição de classe utilitária e de variante, e a comparação com estilo inline. Conferida em 15/08/2026.
- Tailwind CSS, Detecting classes in source files, a regra do nome de classe inteiro e a lista do que o build pula por padrão. Conferida em 15/08/2026.
- Tailwind CSS, Theme variables, como a diretiva
@themedefine quais classes passam a existir. Conferida em 15/08/2026.
O hello world desta página foi executado em 15/08/2026, com Node.js 22.23.0, tailwindcss 4.3.3 e @tailwindcss/cli 4.3.3. O build terminou em 35 ms e gerou um output.css de 8.814 bytes. A busca por bg-red-500 nesse arquivo devolveu zero resultados. Depois da troca das classes de azul para verde e de uma recompilação limpa, o arquivo ficou com 8.838 bytes, com seis ocorrências de emerald e nenhuma de sky. A página foi aberta no navegador e o cartão apareceu como descrito acima, com fundo branco, canto de 12px, largura de 384px e botão azul. Rodando o mesmo build dentro de uma pasta ignorada pelo git, o arquivo saiu com 54.857 bytes e trouxe bg-red-500 junto.
Para continuar
Se as classes ainda parecem código mágico, o caminho é CSS primeiro. Cada utilitário do Tailwind vira uma propriedade de CSS só, e quem já viu a propriedade lê a classe sem consultar a documentação. Do outro lado da mesma prateleira está o Bootstrap, que resolve o mesmo problema pelo caminho oposto, com componentes prontos. Os dois aparecem no mapa da stack web, junto do resto.
O curso desta trilha está em preparação. A lista paga menos.
Os tutoriais daqui continuam gratuitos. O que está a caminho é um curso pago que transforma esse mapa em formação guiada, na ordem certa e com projeto. Deixe seu e-mail: você recebe os estudos novos gratuitos e, no lançamento, o desconto de quem entrou na lista primeiro.