Cheat sheet do Tailwind CSS v4 (com busca)

Um cheat sheet do Tailwind CSS v4 com busca: digite qualquer classe ou palavra comum e veja o CSS exato que a v4 gera, de múltiplos de var(--spacing) a tokens de cor em OKLCH. Também cobre tokens do @theme, breakpoints, container queries, caixas flex e grid ao vivo, a paleta de cores completa, o modo escuro e as renomeações da v3 para a v4.

Este guia cobre o Tailwind CSS v4 (a v4.3 é a versão atual no momento em que escrevemos, outubro de 2026). Para cada classe, ele mostra o CSS que a v4 realmente gera, o que importa porque a v4 mudou a forma como os valores são produzidos: o espaçamento é um múltiplo de uma única variável --spacing, as cores são variáveis --color-* definidas em OKLCH, e tamanhos como raio, sombra e texto vêm de variáveis de tema nomeadas. Digite na caixa para filtrar. A busca funciona com nomes de classes, com o CSS que elas geram e com palavras comuns como "center", "gradient" ou "sticky".

Mostrando todos os 243

ClasseCSS gerado na v4
Layout e display
blockdisplay: block;
inline-blockdisplay: inline-block;
inlinedisplay: inline;
flexdisplay: flex;
inline-flexdisplay: inline-flex;
griddisplay: grid;
inline-griddisplay: inline-grid;
contentsdisplay: contents;
hiddendisplay: none;
containerwidth: 100%; plus max-width: var(--breakpoint-sm) at sm, and so on for each breakpoint
box-borderbox-sizing: border-box;
box-contentbox-sizing: content-box;
staticposition: static;
relativeposition: relative;
absoluteposition: absolute;
fixedposition: fixed;
stickyposition: sticky;
inset-0inset: calc(var(--spacing) * 0);
inset-x-0inset-inline: calc(var(--spacing) * 0);
top-4top: calc(var(--spacing) * 4); /* 1rem */
-top-2top: calc(var(--spacing) * -2);
left-1/2left: calc(1/2 * 100%);
z-10z-index: 10;
z-50z-index: 50;
isolateisolation: isolate;
overflow-hiddenoverflow: hidden;
overflow-autooverflow: auto;
overflow-x-autooverflow-x: auto;
aspect-videoaspect-ratio: var(--aspect-video); /* 16 / 9 */
aspect-squareaspect-ratio: 1 / 1;
object-coverobject-fit: cover;
object-containobject-fit: contain;
visiblevisibility: visible;
invisiblevisibility: hidden;
sr-onlyposition: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border-width: 0;
Flexbox
flex-rowflex-direction: row;
flex-colflex-direction: column;
flex-row-reverseflex-direction: row-reverse;
flex-wrapflex-wrap: wrap;
flex-nowrapflex-wrap: nowrap;
flex-1flex: 1;
flex-autoflex: auto;
flex-initialflex: 0 auto;
flex-noneflex: none;
growflex-grow: 1;
grow-0flex-grow: 0;
shrink-0flex-shrink: 0;
basis-64flex-basis: calc(var(--spacing) * 64);
basis-1/3flex-basis: calc(1/3 * 100%);
order-2order: 2;
order-firstorder: -9999;
order-lastorder: 9999;
Alinhamento e gap
justify-startjustify-content: flex-start;
justify-centerjustify-content: center;
justify-endjustify-content: flex-end;
justify-betweenjustify-content: space-between;
justify-aroundjustify-content: space-around;
justify-evenlyjustify-content: space-evenly;
items-startalign-items: flex-start;
items-centeralign-items: center;
items-endalign-items: flex-end;
items-baselinealign-items: baseline;
items-stretchalign-items: stretch;
self-centeralign-self: center;
self-endalign-self: flex-end;
content-centeralign-content: center;
place-items-centerplace-items: center;
place-content-centerplace-content: center;
justify-items-centerjustify-items: center;
gap-4gap: calc(var(--spacing) * 4); /* 1rem */
gap-x-6column-gap: calc(var(--spacing) * 6);
gap-y-2row-gap: calc(var(--spacing) * 2);
Grid
grid-cols-3grid-template-columns: repeat(3, minmax(0, 1fr));
grid-cols-12grid-template-columns: repeat(12, minmax(0, 1fr));
grid-cols-[200px_1fr]grid-template-columns: 200px 1fr;
grid-cols-subgridgrid-template-columns: subgrid;
grid-rows-3grid-template-rows: repeat(3, minmax(0, 1fr));
col-span-2grid-column: span 2 / span 2;
col-span-fullgrid-column: 1 / -1;
col-start-2grid-column-start: 2;
row-span-2grid-row: span 2 / span 2;
grid-flow-colgrid-auto-flow: column;
grid-flow-densegrid-auto-flow: dense;
auto-rows-frgrid-auto-rows: minmax(0, 1fr);
auto-cols-maxgrid-auto-columns: max-content;
Espaçamento
p-4padding: calc(var(--spacing) * 4); /* 1rem */
p-pxpadding: 1px;
p-[13px]padding: 13px;
p-(--card-pad)padding: var(--card-pad);
px-6padding-inline: calc(var(--spacing) * 6);
py-2padding-block: calc(var(--spacing) * 2);
pt-8padding-top: calc(var(--spacing) * 8);
ps-4padding-inline-start: calc(var(--spacing) * 4);
m-0margin: calc(var(--spacing) * 0);
mx-automargin-inline: auto;
mt-6margin-top: calc(var(--spacing) * 6);
-mt-2margin-top: calc(var(--spacing) * -2);
ms-automargin-inline-start: auto;
space-y-4margin-block-end: calc(var(--spacing) * 4) on every child except the last (selector: > :not(:last-child))
space-x-2margin-inline-end: calc(var(--spacing) * 2) on every child except the last
Dimensionamento
w-64width: calc(var(--spacing) * 64); /* 16rem */
w-fullwidth: 100%;
w-1/2width: calc(1/2 * 100%);
w-screenwidth: 100vw;
w-fitwidth: fit-content;
w-autowidth: auto;
size-10width: calc(var(--spacing) * 10); height: calc(var(--spacing) * 10);
h-12height: calc(var(--spacing) * 12);
h-dvhheight: 100dvh;
h-screenheight: 100vh;
min-h-screenmin-height: 100vh;
min-w-0min-width: calc(var(--spacing) * 0);
max-w-mdmax-width: var(--container-md); /* 28rem */
max-w-7xlmax-width: var(--container-7xl); /* 80rem */
max-w-prosemax-width: 65ch;
max-w-screen-lgmax-width: var(--breakpoint-lg);
Tipografia
text-xsfont-size: var(--text-xs); /* 0.75rem */ line-height: var(--tw-leading, var(--text-xs--line-height));
text-smfont-size: var(--text-sm); /* 0.875rem */ line-height: var(--tw-leading, var(--text-sm--line-height));
text-basefont-size: var(--text-base); /* 1rem */ line-height: var(--tw-leading, var(--text-base--line-height));
text-xlfont-size: var(--text-xl); /* 1.25rem */ line-height: var(--tw-leading, var(--text-xl--line-height));
text-4xlfont-size: var(--text-4xl); /* 2.25rem */ line-height: var(--tw-leading, var(--text-4xl--line-height));
text-sm/6font-size: var(--text-sm); line-height: calc(var(--spacing) * 6);
font-sansfont-family: var(--font-sans);
font-monofont-family: var(--font-mono);
font-mediumfont-weight: var(--font-weight-medium); /* 500 */
font-semiboldfont-weight: var(--font-weight-semibold); /* 600 */
font-boldfont-weight: var(--font-weight-bold); /* 700 */
leading-tightline-height: var(--leading-tight); /* 1.25 */
leading-6line-height: calc(var(--spacing) * 6);
tracking-tightletter-spacing: var(--tracking-tight); /* -0.025em */
tracking-wideletter-spacing: var(--tracking-wide);
text-lefttext-align: left;
text-centertext-align: center;
text-righttext-align: right;
uppercasetext-transform: uppercase;
capitalizetext-transform: capitalize;
italicfont-style: italic;
underlinetext-decoration-line: underline;
no-underlinetext-decoration-line: none;
underline-offset-4text-underline-offset: 4px;
decoration-2text-decoration-thickness: 2px;
truncateoverflow: hidden; text-overflow: ellipsis; white-space: nowrap;
line-clamp-3overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;
text-balancetext-wrap: balance;
text-prettytext-wrap: pretty;
whitespace-nowrapwhite-space: nowrap;
wrap-break-wordoverflow-wrap: break-word; /* added in v4.1 */
tabular-numsfont-variant-numeric: tabular-nums;
antialiased-webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
Cores e fundos
text-blue-600color: var(--color-blue-600); /* oklch(54.6% 0.245 262.881) */
bg-whitebackground-color: var(--color-white); /* #fff */
bg-slate-900background-color: var(--color-slate-900);
bg-black/50background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
bg-[#4f98fb]background-color: #4f98fb;
bg-(--brand)background-color: var(--brand);
text-currentcolor: currentColor;
bg-transparentbackground-color: transparent;
border-gray-200border-color: var(--color-gray-200);
fill-currentfill: currentColor;
accent-blue-600accent-color: var(--color-blue-600);
caret-pink-500caret-color: var(--color-pink-500);
bg-linear-to-rbackground-image: linear-gradient(to right in oklab, var(--tw-gradient-stops)); /* simplified */
from-blue-500--tw-gradient-from: var(--color-blue-500); /* first stop */
to-violet-500--tw-gradient-to: var(--color-violet-500);
bg-radialbackground-image: radial-gradient(...stops); /* new in v4 */
bg-coverbackground-size: cover;
bg-centerbackground-position: center;
bg-no-repeatbackground-repeat: no-repeat;
bg-clip-textbackground-clip: text;
Bordas, raios, rings e outlines
borderborder-style: var(--tw-border-style); border-width: 1px; /* color is currentColor in v4 */
border-2border-style: var(--tw-border-style); border-width: 2px;
border-tborder-top-style: var(--tw-border-style); border-top-width: 1px;
border-dashed--tw-border-style: dashed; border-style: dashed;
rounded-xsborder-radius: var(--radius-xs); /* 0.125rem */
rounded-smborder-radius: var(--radius-sm); /* 0.25rem */
rounded-mdborder-radius: var(--radius-md); /* 0.375rem */
rounded-lgborder-radius: var(--radius-lg); /* 0.5rem */
rounded-2xlborder-radius: var(--radius-2xl); /* 1rem */
rounded-fullborder-radius: calc(infinity * 1px);
rounded-t-lgborder-top-left-radius: var(--radius-lg); border-top-right-radius: var(--radius-lg);
divide-yborder-bottom-width: 1px on every child except the last (selector: > :not(:last-child))
ring-1box-shadow: 0 0 0 1px currentColor; /* simplified; v4 default ring width is 1px */
ring-3box-shadow: 0 0 0 3px currentColor; /* the old v3 ring */
ring-blue-500--tw-ring-color: var(--color-blue-500);
ring-offset-2--tw-ring-offset-width: 2px;
outlineoutline-style: var(--tw-outline-style); outline-width: 1px;
outline-2outline-style: var(--tw-outline-style); outline-width: 2px;
outline-offset-2outline-offset: 2px;
outline-hiddenoutline: 2px solid transparent; outline-offset: 2px; /* still visible in forced colors */
outline-none--tw-outline-style: none; outline-style: none;
Efeitos e filtros
shadow-2xsbox-shadow: 0 1px rgb(0 0 0 / 0.05);
shadow-xsbox-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
shadow-smbox-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
shadow-mdbox-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
shadow-lgbox-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
shadow-2xlbox-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
shadow-nonebox-shadow: 0 0 #0000;
inset-shadow-smbox-shadow: inset 0 2px 4px rgb(0 0 0 / 0.05); /* new in v4 */
opacity-50opacity: 50%;
mix-blend-multiplymix-blend-mode: multiply;
blur-smfilter: blur(var(--blur-sm)); /* 8px */
blur-xsfilter: blur(var(--blur-xs)); /* 4px */
backdrop-blur-mdbackdrop-filter: blur(var(--blur-md)); /* 12px, frosted glass */
grayscalefilter: grayscale(100%);
Transições, animações e transforms
transitiontransition-property: color, background-color, border-color, outline-color, opacity, box-shadow, transform, translate, scale, rotate, filter and more; transition-duration: 150ms;
transition-colorstransition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke and gradient stops; 150ms
duration-200transition-duration: 200ms;
ease-outtransition-timing-function: var(--ease-out); /* cubic-bezier(0, 0, 0.2, 1) */
animate-spinanimation: var(--animate-spin); /* spin 1s linear infinite */
animate-pulseanimation: var(--animate-pulse);
motion-reduce:animate-none@media (prefers-reduced-motion: reduce) { animation: none; }
scale-95--tw-scale-x: 95%; --tw-scale-y: 95%; scale: var(--tw-scale-x) var(--tw-scale-y);
rotate-45rotate: 45deg;
translate-x-4--tw-translate-x: calc(var(--spacing) * 4); translate: var(--tw-translate-x) var(--tw-translate-y);
-translate-y-1/2--tw-translate-y: calc(calc(1/2 * 100%) * -1); translate: var(--tw-translate-x) var(--tw-translate-y);
Interatividade
cursor-pointercursor: pointer; /* v4 buttons default to cursor: default */
cursor-not-allowedcursor: not-allowed;
pointer-events-nonepointer-events: none;
select-noneuser-select: none;
appearance-noneappearance: none;
scroll-smoothscroll-behavior: smooth;
snap-xscroll-snap-type: x var(--tw-scroll-snap-strictness);
snap-startscroll-snap-align: start;
scroll-mt-20scroll-margin-top: calc(var(--spacing) * 20);
resize-yresize: vertical;
touch-manipulationtouch-action: manipulation;
Variantes de estado e de mídia
hover:bg-blue-700@media (hover: hover) { &:hover { background-color: var(--color-blue-700); } }
focus-visible:outline-2&:focus-visible { outline-width: 2px; ... }
active:scale-95&:active { scale: 95%; }
disabled:opacity-50&:disabled { opacity: 50%; }
aria-disabled:opacity-50&[aria-disabled="true"] { opacity: 50%; }
group-hover:underline.group:hover & { text-decoration-line: underline; } (inside @media (hover: hover))
peer-checked:bg-blue-600.peer:checked ~ & { background-color: var(--color-blue-600); }
md:flex@media (width >= 48rem) { display: flex; }
max-md:hidden@media (width < 48rem) { display: none; }
@md:flex-row@container (width >= 28rem) { flex-direction: row; }
dark:bg-slate-900@media (prefers-color-scheme: dark) { background-color: var(--color-slate-900); }
print:hidden@media print { display: none; }
motion-safe:animate-spin@media (prefers-reduced-motion: no-preference) { ... }
*:p-2:where(& > *) { padding: calc(var(--spacing) * 2); }
not-last:mb-2&:not(:last-child) { margin-bottom: ... }
supports-[display:grid]:grid@supports (display: grid) { display: grid; }
bg-red-500!background-color: var(--color-red-500) !important;

Como ler a tabela: calc(var(--spacing) * 4) equivale a 1rem porque o --spacing padrão é 0.25rem. Mude essa única variável no @theme e todo padding, margin, gap, largura e altura que usa a escala numérica muda junto. Onde o CSS gerado é longo (gradientes, rings, transições), a tabela mostra uma versão simplificada e avisa.

Como a v4 transforma uma classe em um valor

Há quatro formas de dar um valor a um utilitário na v4, e saber qual delas você está usando explica a maioria das surpresas:

Frações como w-1/2 viram calc(1/2 * 100%), e um sufixo de opacidade como bg-black/50 vira um color-mix() com transparent, então funciona com qualquer formato de cor.

Tokens do @theme (o substituto do tailwind.config.js na v4)

Na v4 você configura o design system em CSS. Variáveis declaradas dentro de @theme viram ao mesmo tempo propriedades personalizadas CSS em :root e a fonte das classes utilitárias. O prefixo da variável decide quais utilitários ela alimenta:

@import "tailwindcss";

@theme {
  --font-display: "Satoshi", sans-serif;   /* font-display */
  --color-brand-500: oklch(65% 0.17 255);  /* bg-brand-500, text-brand-500 ... */
  --breakpoint-3xl: 120rem;                /* 3xl: variant */
  --spacing: 0.25rem;                      /* p-4 = 1rem */
  --radius-card: 0.875rem;                 /* rounded-card */
}
NamespaceAlimentaExemplo
--color-*todos os utilitários de cor (bg, text, border, fill, ring, cor de shadow...)bg-red-500
--spacingpadding, margin, gap, largura, altura, inset, translatepx-4
--font-*família de fontefont-sans
--text-*tamanho de fonte (mais o opcional --text-*--line-height)text-xl
--font-weight-*peso de fontefont-bold
--tracking-* / --leading-*espaçamento entre letras / altura de linhatracking-wide
--breakpoint-*variantes responsivassm:*
--container-*variantes de container query e max-w-*@sm:*, max-w-md
--radius-*raio da bordarounded-sm
--shadow-*, --inset-shadow-*, --drop-shadow-*sombrasshadow-md
--blur-*blur e backdrop blurblur-md
--ease-* / --animate-*funções de timing / animaçõesease-out, animate-spin
--perspective-* / --aspect-*perspectiva 3D / proporçãoperspective-near, aspect-video

Para descartar um namespace padrão inteiro, defina-o primeiro como initial, por exemplo --color-*: initial;, e depois declare apenas as suas cores. Se você ainda tem uma configuração em JavaScript, a v4 pode carregá-la com @config "./tailwind.config.js";, mas as opções corePlugins, safelist e separator não são suportadas.

Breakpoints

Os breakpoints são mobile first: uma classe sem prefixo vale em qualquer largura, e md:flex vale a partir de 48rem. A v4 os escreve com a sintaxe de intervalo width >= ....

PrefixoLargura mínimaCSSAbaixo dele (max-*)
sm:40rem (640px)@media (width >= 40rem)max-sm: = @media (width < 40rem)
md:48rem (768px)@media (width >= 48rem)max-md:
lg:64rem (1024px)@media (width >= 64rem)max-lg:
xl:80rem (1280px)@media (width >= 80rem)max-xl:
2xl:96rem (1536px)@media (width >= 96rem)max-2xl:

Empilhe-os para mirar um intervalo: md:max-xl:flex vale apenas de 48rem até 80rem (sem incluir). Para um breakpoint pontual, use min-[900px]:grid ou max-[600px]:hidden. Adicione ou altere breakpoints com --breakpoint-* no @theme e mantenha todos em rem para que sejam ordenados corretamente.

Container queries

As container queries vêm embutidas na v4 (na v3 elas precisavam de um plugin). Marque um elemento pai com @container e estilize os filhos com @sm:, @md: e assim por diante. Elas reagem à largura do pai, e não à da janela, que é o que você quer para um card que aparece tanto numa barra lateral quanto numa coluna principal larga.

<div class="@container">
  <article class="flex flex-col @md:flex-row gap-4">
    <img class="w-full @md:w-48 rounded-lg" src="..." alt="">
    <div>...</div>
  </article>
</div>
VarianteLargura do containerVarianteLargura do container
@3xs16rem (256px)@2xl42rem (672px)
@2xs18rem (288px)@3xl48rem (768px)
@xs20rem (320px)@4xl56rem (896px)
@sm24rem (384px)@5xl64rem (1024px)
@md28rem (448px)@6xl72rem (1152px)
@lg32rem (512px)@7xl80rem (1280px)
@xl36rem (576px)

Cada uma compila para @container (width >= ...). Use @max-md: para "abaixo de", empilhe @sm:@max-md: para um intervalo, dê nome aos containers com @container/sidebar e mire neles com @md/sidebar:, e use tamanhos arbitrários como @min-[475px]:. Observe que os tamanhos de container não são os mesmos números dos breakpoints: @md é 28rem, enquanto md: é 48rem.

Referência rápida de flex e grid

Escolha um layout abaixo e veja as caixas se moverem. A string de classes é atualizada a cada clique, então você pode copiá-la direto para o seu markup.

Os padrões que você vai usar com mais frequência:

flex items-center justify-between: linha de navbar
flex items-center justify-center (ou grid place-items-center): centralizar um elemento
grid grid-cols-3 gap-2 com col-span-2
shrink-0 no item fixo, flex-1 no item que preenche
ObjetivoClasses
Grade de cards responsiva sem breakpointsgrid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-6
Barra lateral mais conteúdogrid md:grid-cols-[16rem_1fr] gap-8
Rodapé preso no fim de uma página curtaflex min-h-dvh flex-col no wrapper, flex-1 no main
Texto que é truncado dentro de uma linha flexmin-w-0 no filho flex, truncate no texto
Empilhado no celular, em linha no desktopflex flex-col md:flex-row gap-4
Empurrar o último item para a direitams-auto (ou ml-auto) nesse item

Paleta de cores padrão (OKLCH), clique para copiar

A v4 define a paleta padrão em OKLCH, que consegue exibir cores mais saturadas em telas de gama ampla. Cada amostra abaixo é pintada com o valor exato do próprio arquivo de tema do Tailwind; clique em uma para copiar o valor oklch(). Os tons vão de 50 a 950. As paletas marcadas com * (mauve, olive, mist e taupe) foram adicionadas na v4.2.0, então não existem nas versões anteriores da v4. Preto e branco são #000 e #fff.

Mostrando todas as 26
50100200300400500600700800900950
red
orange
amber
yellow
lime
green
emerald
teal
cyan
sky
blue
indigo
violet
purple
fuchsia
pink
rose
slate
gray
zinc
neutral
stone
mauve*
olive*
mist*
taupe*

Use-as como bg-sky-500, text-sky-500/80 ou, no seu próprio CSS, var(--color-sky-500). Para conferir se uma combinação é legível, passe-a pelo verificador de contraste de cores, e para uma escala personalizada no mesmo formato experimente o gerador de paleta de cores Tailwind.

Modo escuro na v4

Por padrão, dark: segue o sistema operacional por meio de @media (prefers-color-scheme: dark). Para controlá-lo por uma classe ou atributo (para um botão manual), sobrescreva a variante no seu CSS com @custom-variant. Não existe mais a chave de configuração darkMode.

/* Class strategy: <html class="dark"> */
@custom-variant dark (&:where(.dark, .dark *));

/* Or a data attribute: <html data-theme="dark"> */
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
<div class="bg-white text-slate-900 dark:bg-slate-900 dark:text-slate-100">...</div>

Com um botão manual, defina a classe antes de a página ser pintada (um pequeno script inline no <head> que lê a escolha salva) para que os visitantes não vejam um piscar do tema errado. Uma terceira opção é dispensar totalmente as classes dark:: defina tokens semânticos como --color-surface no @theme e troque os valores deles em .dark, para que uma única classe como bg-surface funcione nos dois temas.

Da v3 para a v4: classes renomeadas e alteradas

Estas vêm do guia oficial de atualização. As renomeações são as mais importantes porque os nomes antigos ainda existem e produzem silenciosamente um resultado diferente (menor).

v3v4Por quê
shadow-smshadow-xsA escala desceu um passo para que todo tamanho tenha um nome
shadowshadow-smMesmo deslocamento
drop-shadow-sm / drop-shadowdrop-shadow-xs / drop-shadow-smMesmo deslocamento
blur-sm / blurblur-xs / blur-smMesmo deslocamento (também backdrop-blur-*)
rounded-smrounded-xsMesmo deslocamento
roundedrounded-smMesmo deslocamento
outline-noneoutline-hiddenNa v4, outline-none agora define de fato outline-style: none
ring (3px, blue-500)ring-3 mais uma corring sozinho agora tem 1px em currentColor
outline outline-2outline-2Os utilitários de largura agora definem um estilo sólido por conta própria
bg-opacity-50 (e text-, border-, ring-, divide-, placeholder-opacity)bg-black/50Removido; use o modificador com barra
flex-shrink-0 / flex-growshrink-0 / growAliases removidos
overflow-ellipsistext-ellipsisAlias removido
decoration-slice / decoration-clonebox-decoration-slice / box-decoration-cloneAliases removidos
bg-[--brand]bg-(--brand)Nova forma abreviada para variáveis CSS
!bg-red-500bg-red-500!O important vai no final (a forma antiga está obsoleta)
first:*:pt-0*:first:pt-0Variantes empilhadas agora são lidas da esquerda para a direita
tw-flex (prefixo)tw:flexPrefixos parecem uma variante e vêm primeiro

Mudanças de comportamento sem renomeação, que pegam muita gente durante a atualização:

A ferramenta oficial npx @tailwindcss/upgrade cuida automaticamente da maioria das renomeações. Rode-a em um branch limpo e revise o diff, já que ela não tem como saber quais classes shadow você queria que continuassem com a mesma aparência.

Imprimindo este guia

Esta página tem estilos de impressão: as caixas de busca e os botões ficam ocultos, as tabelas encolhem para uma fonte menor e a grade de cores mantém as amostras juntas. Na maioria dos navegadores, ative "Gráficos de plano de fundo" na caixa de diálogo de impressão, ou as amostras saem em branco. Se você filtrou a tabela antes, só as linhas visíveis são impressas, o que é um jeito rápido de montar uma folha de uma página só com os utilitários que você usa.

A mesma variante print: funciona nos seus próprios projetos: print:hidden na navegação, print:text-black em textos claros e print:break-inside-avoid em cards mantêm as páginas impressas legíveis.

Perguntas frequentes

Onde fica o tailwind.config.js no Tailwind v4?

A v4 é configurada em CSS. Você importa o Tailwind com @import "tailwindcss" e declara os design tokens dentro de um bloco @theme, como --color-brand-500 ou --breakpoint-3xl. Uma configuração em JavaScript ainda pode ser carregada com a diretiva @config, mas as opções corePlugins, safelist e separator não são suportadas.

Quais são os breakpoints padrão do Tailwind v4?

sm é 40rem (640px), md é 48rem (768px), lg é 64rem (1024px), xl é 80rem (1280px) e 2xl é 96rem (1536px). Eles são mobile first, então md:flex vale a partir de 48rem. Use max-md: para estilos abaixo de um breakpoint e empilhe-os, como em md:max-xl:, para um intervalo.

Por que minhas sombras e cantos arredondados parecem menores depois de atualizar para a v4?

As escalas de shadow, radius e blur desceram um passo. O shadow-sm da v3 é o shadow-xs da v4, o shadow da v3 é o shadow-sm da v4, o rounded-sm da v3 é o rounded-xs da v4 e o rounded da v3 é o rounded-sm da v4. Os nomes antigos ainda compilam, então nada dá erro; eles só produzem o tamanho imediatamente menor.

Como faço o modo escuro usar uma classe em vez da configuração do sistema na v4?

Adicione @custom-variant dark (&:where(.dark, .dark *)); ao seu CSS. Os utilitários dark: passam a valer sempre que um ancestral tiver a classe dark. Use [data-theme=dark] no seletor se preferir um atributo data.

O Tailwind v4 precisa de um plugin para container queries?

Não. As container queries vêm embutidas. Coloque @container no elemento pai e use variantes como @sm:, @md: e @max-md: nos filhos. Os tamanhos de container começam em @3xs (16rem) e são diferentes dos breakpoints da página; por exemplo, @md é 28rem.

Para que compila p-4 no Tailwind v4?

padding: calc(var(--spacing) * 4). Com o --spacing padrão de 0.25rem, isso dá 1rem (16px no tamanho de fonte padrão). Qualquer número inteiro funciona na escala de espaçamento sem configuração, e mudar --spacing redimensiona todos de uma vez.

Display

Itens

Direção

Quebra

Eixo principal

Colunas

Eixo transversal

Gap

Copiado

Copiar classes

Imprimir este cheat sheet

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site