Tailwind CSS: vale a pena ou é só moda?
Entenda o problema que o Tailwind resolve, o preço que ele cobra em legibilidade do HTML, e um critério honesto pra decidir quando adotar e quando ficar com CSS tradicional.
Tailwind divide opiniões como poucas ferramentas. Tem quem não larga mais e tem quem acha uma heresia encher o HTML de classe. Depois dos posts sobre Flexbox e sobre transições em CSS, vale falar dele sem torcida, olhando o problema que ele resolve e o que cobra em troca.
O problema que o CSS tradicional tem
No CSS tradicional, cada elemento ganha uma classe com nome, e o estilo mora em outro arquivo:
<button class="botao-primario">Salvar</button>.botao-primario {
background: #7c3aed;
color: white;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
}Em projeto pequeno, funciona bem. À medida que cresce, aparecem três dores:
- Nomear coisas é difícil.
.botao-primario,.botao-principal,.btn-main: ninguém lembra qual já existe. - CSS só cresce. Tem medo de apagar uma regra porque ninguém sabe se alguma página ainda usa. Ela fica lá pra sempre.
- Efeito cascata. Mudar uma classe pode quebrar uma tela que você nem lembrava que a usava.
A ideia do Tailwind
O Tailwind inverte a lógica. Em vez de criar classes com nome e escrever o estilo separado, você compõe o visual com classes utilitárias pequenas, cada uma fazendo uma coisa só, direto no HTML:
<button class="bg-violet-600 text-white px-4 py-2 rounded-lg hover:bg-violet-700">
Salvar
</button>Cada classe é uma declaração CSS: px-4 é padding horizontal, rounded-lg é borda arredondada, hover:bg-violet-700 aplica a cor só no hover. O Tailwind gera no build apenas o CSS das classes que você realmente usou, então o arquivo final fica pequeno.
O que ele resolve de verdade
- Sem nomear classes. O estilo está no próprio elemento.
- Apagar é seguro. Ao remover um componente, o estilo dele vai junto. Não sobra CSS órfão.
- Sem efeito cascata. Mudar as classes de um elemento afeta só ele.
- Design consistente. Os valores vêm de uma escala (espaçamentos, cores, tamanhos), o que evita aquele
padding: 13pxperdido no meio do projeto.
O preço que ele cobra
A crítica mais justa é a legibilidade. Um elemento mais elaborado vira uma linha longa de classes:
<div class="flex items-center justify-between gap-4 rounded-xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">Isso incomoda quem está começando e polui o HTML. A resposta do Tailwind é que você não repete isso: extrai o trecho num componente (um Card em React, por exemplo) e reaproveita. Ou seja, o Tailwind funciona melhor em projetos baseados em componentes. Em HTML puro com a mesma estrutura repetida em dez lugares, a repetição machuca de verdade.
Há também a curva de aprendizado: no começo você consulta a documentação a cada classe, até decorar o vocabulário. E ele não substitui o conhecimento de CSS. Quem não entende Flexbox ou o box model só vai escrever flex e p-4 sem saber por que o layout quebrou.
Quando faz sentido
- Projeto com componentes reutilizáveis (React, Vue, Svelte) e um time que quer consistência visual.
- Protótipo ou produto que muda muito, onde velocidade de iteração importa.
- Quando você sofre com CSS acumulado e ninguém tem coragem de mexer nele.
Quando eu ficaria no CSS tradicional
- Site pequeno e estático, com poucas páginas.
- HTML sem componentização, com a mesma estrutura repetida.
- Time que já tem um sistema de CSS organizado e funcionando bem.
Fechando
Tailwind não é moda nem solução universal. Ele troca o problema de manter CSS separado e nomeado pelo problema de ter HTML mais carregado de classe. Em projeto com componentes, a troca costuma compensar. Em outros contextos, pode ser peso sem retorno. A decisão certa vem de olhar a dor real do projeto, não do que está em alta.
Direto na sua
caixa de entrada.
Um aviso por e-mail sempre que eu publicar um post novo. Sem spam, sem newsletter chata, só isso.
Leia também
- Regex sem medo: o básico que resolve 90% dos casos6 de novembro de 2026 · 4 min
- Motion graphics com Opus 5.5: o que um prompt não conta4 de novembro de 2026 · 8 min
- Promises e async/await: pare de se perder no assíncrono4 de novembro de 2026 · 4 min
- HTTP/1.1, HTTP/2 e HTTP/3: o que mudou de verdade30 de outubro de 2026 · 4 min