Frontend
Tailwind
Convenção de estilo Tailwind CSS para componentes React. Invoque ao estilizar um componente em projeto que usa este archetype.
Tailwind CSS
Classes utilitárias direto no JSX. Sem arquivo .module.css/.scss por componente — a única folha
de estilo do projeto é src/index.css (ou src/styles/index.css), e só existe para o que Tailwind
não cobre (reset, @font-face, tokens custom via @theme ou CSS custom properties).
Componente de página/seção é um arquivo solto (FooSection.tsx), sem pasta própria — diferente de
frontend/scss-bem, aqui não há arquivo de estilo irmão que justifique uma pasta.
// components/PricingCard.tsx
import { cn } from '@/lib/utils';
interface PricingCardProps {
title: string;
variant?: 'primary' | 'secondary';
onSelect: () => void;
}
export function PricingCard({ title, variant = 'primary', onSelect }: PricingCardProps) {
return (
<button
onClick={onSelect}
className={cn(
'rounded-lg px-4 py-2 text-sm font-medium transition',
variant === 'primary' && 'bg-primary text-primary-foreground',
variant === 'secondary' && 'border border-border hover:bg-muted',
)}
>
{title}
</button>
);
}
Regras inegociáveis
- Use sempre
cn()(wrapper declsx+tailwind-merge, em@/lib/utils) para compor classes condicionais — nunca concatenação manual de string ('btn ' + (active ? 'active' : '')), que não resolve conflito entre classes Tailwind (tailwind-mergeresolve). - Combinação condicional de classes via
cva(class-variance-authority) quando há 3+ variantes;cn()simples é suficiente para 1-2 condicionais. - Mesma sequência de utilitárias repetida em 3+ componentes é sinal de que virou um componente
(
<Card>,<Badge>) — não uma constante de string de classes. - Sem
style={{ ... }}inline. Exceção: valor verdadeiramente dinâmico que não dá pra expressar em classe (ex.style={{ width: \${progress}%` }}`). - Tokens de design (cores de marca, espaçamento fora da escala padrão) vivem como CSS custom
properties/
@themeno CSS global, não espalhados como valores mágicos (bg-[#1a2b3c]) pelos componentes.
Skills relacionadas
- Estrutura de componente:
frontend/react - Componentes gerados via CLI (Radix +
cva):frontend/shadcn-ui