Een doorzoekbare Tailwind CSS v4 cheat sheet: typ een class of een gewoon woord en zie de exacte CSS die v4 genereert, van veelvouden van var(--spacing) tot OKLCH-kleurtokens. Ook behandeld: @theme-tokens, breakpoints, container queries, live flex- en gridvakken, het volledige kleurenpalet, dark mode en de hernoemingen van v3 naar v4.
Dit overzicht behandelt Tailwind CSS v4 (v4.3 is de actuele versie op het moment van schrijven, oktober 2026). Voor elke class ziet u de CSS die v4 werkelijk schrijft. Dat is belangrijk, want v4 heeft veranderd hoe waarden tot stand komen: spacing is een veelvoud van één --spacing-variabele, kleuren zijn --color-*-variabelen in OKLCH, en maten zoals radius, schaduw en tekst komen uit benoemde themavariabelen. Typ in het vak om te filteren. U kunt zoeken op classnamen, op de CSS die ze opleveren en op gewone woorden zoals "center", "gradient" of "sticky".
Alle 243 zichtbaar
| Class | CSS-uitvoer in v4 |
|---|---|
| Layout en weergave | |
block | display: block; |
inline-block | display: inline-block; |
inline | display: inline; |
flex | display: flex; |
inline-flex | display: inline-flex; |
grid | display: grid; |
inline-grid | display: inline-grid; |
contents | display: contents; |
hidden | display: none; |
container | width: 100%; plus max-width: var(--breakpoint-sm) at sm, and so on for each breakpoint |
box-border | box-sizing: border-box; |
box-content | box-sizing: content-box; |
static | position: static; |
relative | position: relative; |
absolute | position: absolute; |
fixed | position: fixed; |
sticky | position: sticky; |
inset-0 | inset: calc(var(--spacing) * 0); |
inset-x-0 | inset-inline: calc(var(--spacing) * 0); |
top-4 | top: calc(var(--spacing) * 4); /* 1rem */ |
-top-2 | top: calc(var(--spacing) * -2); |
left-1/2 | left: calc(1/2 * 100%); |
z-10 | z-index: 10; |
z-50 | z-index: 50; |
isolate | isolation: isolate; |
overflow-hidden | overflow: hidden; |
overflow-auto | overflow: auto; |
overflow-x-auto | overflow-x: auto; |
aspect-video | aspect-ratio: var(--aspect-video); /* 16 / 9 */ |
aspect-square | aspect-ratio: 1 / 1; |
object-cover | object-fit: cover; |
object-contain | object-fit: contain; |
visible | visibility: visible; |
invisible | visibility: hidden; |
sr-only | position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border-width: 0; |
| Flexbox | |
flex-row | flex-direction: row; |
flex-col | flex-direction: column; |
flex-row-reverse | flex-direction: row-reverse; |
flex-wrap | flex-wrap: wrap; |
flex-nowrap | flex-wrap: nowrap; |
flex-1 | flex: 1; |
flex-auto | flex: auto; |
flex-initial | flex: 0 auto; |
flex-none | flex: none; |
grow | flex-grow: 1; |
grow-0 | flex-grow: 0; |
shrink-0 | flex-shrink: 0; |
basis-64 | flex-basis: calc(var(--spacing) * 64); |
basis-1/3 | flex-basis: calc(1/3 * 100%); |
order-2 | order: 2; |
order-first | order: -9999; |
order-last | order: 9999; |
| Uitlijning en gap | |
justify-start | justify-content: flex-start; |
justify-center | justify-content: center; |
justify-end | justify-content: flex-end; |
justify-between | justify-content: space-between; |
justify-around | justify-content: space-around; |
justify-evenly | justify-content: space-evenly; |
items-start | align-items: flex-start; |
items-center | align-items: center; |
items-end | align-items: flex-end; |
items-baseline | align-items: baseline; |
items-stretch | align-items: stretch; |
self-center | align-self: center; |
self-end | align-self: flex-end; |
content-center | align-content: center; |
place-items-center | place-items: center; |
place-content-center | place-content: center; |
justify-items-center | justify-items: center; |
gap-4 | gap: calc(var(--spacing) * 4); /* 1rem */ |
gap-x-6 | column-gap: calc(var(--spacing) * 6); |
gap-y-2 | row-gap: calc(var(--spacing) * 2); |
| Grid | |
grid-cols-3 | grid-template-columns: repeat(3, minmax(0, 1fr)); |
grid-cols-12 | grid-template-columns: repeat(12, minmax(0, 1fr)); |
grid-cols-[200px_1fr] | grid-template-columns: 200px 1fr; |
grid-cols-subgrid | grid-template-columns: subgrid; |
grid-rows-3 | grid-template-rows: repeat(3, minmax(0, 1fr)); |
col-span-2 | grid-column: span 2 / span 2; |
col-span-full | grid-column: 1 / -1; |
col-start-2 | grid-column-start: 2; |
row-span-2 | grid-row: span 2 / span 2; |
grid-flow-col | grid-auto-flow: column; |
grid-flow-dense | grid-auto-flow: dense; |
auto-rows-fr | grid-auto-rows: minmax(0, 1fr); |
auto-cols-max | grid-auto-columns: max-content; |
| Spacing | |
p-4 | padding: calc(var(--spacing) * 4); /* 1rem */ |
p-px | padding: 1px; |
p-[13px] | padding: 13px; |
p-(--card-pad) | padding: var(--card-pad); |
px-6 | padding-inline: calc(var(--spacing) * 6); |
py-2 | padding-block: calc(var(--spacing) * 2); |
pt-8 | padding-top: calc(var(--spacing) * 8); |
ps-4 | padding-inline-start: calc(var(--spacing) * 4); |
m-0 | margin: calc(var(--spacing) * 0); |
mx-auto | margin-inline: auto; |
mt-6 | margin-top: calc(var(--spacing) * 6); |
-mt-2 | margin-top: calc(var(--spacing) * -2); |
ms-auto | margin-inline-start: auto; |
space-y-4 | margin-block-end: calc(var(--spacing) * 4) on every child except the last (selector: > :not(:last-child)) |
space-x-2 | margin-inline-end: calc(var(--spacing) * 2) on every child except the last |
| Afmetingen | |
w-64 | width: calc(var(--spacing) * 64); /* 16rem */ |
w-full | width: 100%; |
w-1/2 | width: calc(1/2 * 100%); |
w-screen | width: 100vw; |
w-fit | width: fit-content; |
w-auto | width: auto; |
size-10 | width: calc(var(--spacing) * 10); height: calc(var(--spacing) * 10); |
h-12 | height: calc(var(--spacing) * 12); |
h-dvh | height: 100dvh; |
h-screen | height: 100vh; |
min-h-screen | min-height: 100vh; |
min-w-0 | min-width: calc(var(--spacing) * 0); |
max-w-md | max-width: var(--container-md); /* 28rem */ |
max-w-7xl | max-width: var(--container-7xl); /* 80rem */ |
max-w-prose | max-width: 65ch; |
max-w-screen-lg | max-width: var(--breakpoint-lg); |
| Typografie | |
text-xs | font-size: var(--text-xs); /* 0.75rem */ line-height: var(--tw-leading, var(--text-xs--line-height)); |
text-sm | font-size: var(--text-sm); /* 0.875rem */ line-height: var(--tw-leading, var(--text-sm--line-height)); |
text-base | font-size: var(--text-base); /* 1rem */ line-height: var(--tw-leading, var(--text-base--line-height)); |
text-xl | font-size: var(--text-xl); /* 1.25rem */ line-height: var(--tw-leading, var(--text-xl--line-height)); |
text-4xl | font-size: var(--text-4xl); /* 2.25rem */ line-height: var(--tw-leading, var(--text-4xl--line-height)); |
text-sm/6 | font-size: var(--text-sm); line-height: calc(var(--spacing) * 6); |
font-sans | font-family: var(--font-sans); |
font-mono | font-family: var(--font-mono); |
font-medium | font-weight: var(--font-weight-medium); /* 500 */ |
font-semibold | font-weight: var(--font-weight-semibold); /* 600 */ |
font-bold | font-weight: var(--font-weight-bold); /* 700 */ |
leading-tight | line-height: var(--leading-tight); /* 1.25 */ |
leading-6 | line-height: calc(var(--spacing) * 6); |
tracking-tight | letter-spacing: var(--tracking-tight); /* -0.025em */ |
tracking-wide | letter-spacing: var(--tracking-wide); |
text-left | text-align: left; |
text-center | text-align: center; |
text-right | text-align: right; |
uppercase | text-transform: uppercase; |
capitalize | text-transform: capitalize; |
italic | font-style: italic; |
underline | text-decoration-line: underline; |
no-underline | text-decoration-line: none; |
underline-offset-4 | text-underline-offset: 4px; |
decoration-2 | text-decoration-thickness: 2px; |
truncate | overflow: hidden; text-overflow: ellipsis; white-space: nowrap; |
line-clamp-3 | overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; |
text-balance | text-wrap: balance; |
text-pretty | text-wrap: pretty; |
whitespace-nowrap | white-space: nowrap; |
wrap-break-word | overflow-wrap: break-word; /* added in v4.1 */ |
tabular-nums | font-variant-numeric: tabular-nums; |
antialiased | -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; |
| Kleur en achtergronden | |
text-blue-600 | color: var(--color-blue-600); /* oklch(54.6% 0.245 262.881) */ |
bg-white | background-color: var(--color-white); /* #fff */ |
bg-slate-900 | background-color: var(--color-slate-900); |
bg-black/50 | background-color: color-mix(in oklab, var(--color-black) 50%, transparent); |
bg-[#4f98fb] | background-color: #4f98fb; |
bg-(--brand) | background-color: var(--brand); |
text-current | color: currentColor; |
bg-transparent | background-color: transparent; |
border-gray-200 | border-color: var(--color-gray-200); |
fill-current | fill: currentColor; |
accent-blue-600 | accent-color: var(--color-blue-600); |
caret-pink-500 | caret-color: var(--color-pink-500); |
bg-linear-to-r | background-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-radial | background-image: radial-gradient(...stops); /* new in v4 */ |
bg-cover | background-size: cover; |
bg-center | background-position: center; |
bg-no-repeat | background-repeat: no-repeat; |
bg-clip-text | background-clip: text; |
| Randen, radius, rings en outlines | |
border | border-style: var(--tw-border-style); border-width: 1px; /* color is currentColor in v4 */ |
border-2 | border-style: var(--tw-border-style); border-width: 2px; |
border-t | border-top-style: var(--tw-border-style); border-top-width: 1px; |
border-dashed | --tw-border-style: dashed; border-style: dashed; |
rounded-xs | border-radius: var(--radius-xs); /* 0.125rem */ |
rounded-sm | border-radius: var(--radius-sm); /* 0.25rem */ |
rounded-md | border-radius: var(--radius-md); /* 0.375rem */ |
rounded-lg | border-radius: var(--radius-lg); /* 0.5rem */ |
rounded-2xl | border-radius: var(--radius-2xl); /* 1rem */ |
rounded-full | border-radius: calc(infinity * 1px); |
rounded-t-lg | border-top-left-radius: var(--radius-lg); border-top-right-radius: var(--radius-lg); |
divide-y | border-bottom-width: 1px on every child except the last (selector: > :not(:last-child)) |
ring-1 | box-shadow: 0 0 0 1px currentColor; /* simplified; v4 default ring width is 1px */ |
ring-3 | box-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; |
outline | outline-style: var(--tw-outline-style); outline-width: 1px; |
outline-2 | outline-style: var(--tw-outline-style); outline-width: 2px; |
outline-offset-2 | outline-offset: 2px; |
outline-hidden | outline: 2px solid transparent; outline-offset: 2px; /* still visible in forced colors */ |
outline-none | --tw-outline-style: none; outline-style: none; |
| Effecten en filters | |
shadow-2xs | box-shadow: 0 1px rgb(0 0 0 / 0.05); |
shadow-xs | box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); |
shadow-sm | box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); |
shadow-md | box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); |
shadow-lg | box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); |
shadow-2xl | box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); |
shadow-none | box-shadow: 0 0 #0000; |
inset-shadow-sm | box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.05); /* new in v4 */ |
opacity-50 | opacity: 50%; |
mix-blend-multiply | mix-blend-mode: multiply; |
blur-sm | filter: blur(var(--blur-sm)); /* 8px */ |
blur-xs | filter: blur(var(--blur-xs)); /* 4px */ |
backdrop-blur-md | backdrop-filter: blur(var(--blur-md)); /* 12px, frosted glass */ |
grayscale | filter: grayscale(100%); |
| Transities, animatie en transformaties | |
transition | transition-property: color, background-color, border-color, outline-color, opacity, box-shadow, transform, translate, scale, rotate, filter and more; transition-duration: 150ms; |
transition-colors | transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke and gradient stops; 150ms |
duration-200 | transition-duration: 200ms; |
ease-out | transition-timing-function: var(--ease-out); /* cubic-bezier(0, 0, 0.2, 1) */ |
animate-spin | animation: var(--animate-spin); /* spin 1s linear infinite */ |
animate-pulse | animation: 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-45 | rotate: 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); |
| Interactiviteit | |
cursor-pointer | cursor: pointer; /* v4 buttons default to cursor: default */ |
cursor-not-allowed | cursor: not-allowed; |
pointer-events-none | pointer-events: none; |
select-none | user-select: none; |
appearance-none | appearance: none; |
scroll-smooth | scroll-behavior: smooth; |
snap-x | scroll-snap-type: x var(--tw-scroll-snap-strictness); |
snap-start | scroll-snap-align: start; |
scroll-mt-20 | scroll-margin-top: calc(var(--spacing) * 20); |
resize-y | resize: vertical; |
touch-manipulation | touch-action: manipulation; |
| State- en media-varianten | |
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; |
Zo leest u de tabel: calc(var(--spacing) * 4) is 1rem, omdat de standaardwaarde van --spacing 0.25rem is. Wijzig die ene variabele in @theme en elke padding, margin, gap, breedte en hoogte die de getallenschaal gebruikt, verandert mee. Waar de gegenereerde CSS lang is (gradients, rings, transities), toont de tabel een vereenvoudigde versie en staat dat erbij.
Er zijn in v4 vier manieren om een utility een waarde te geven, en wie weet welke hij gebruikt, begrijpt de meeste verrassingen:
p-4, w-64, gap-3. Elk heel getal werkt, en kwartstappen zoals p-2.5 ook, zonder configuratie. De waarde is calc(var(--spacing) * n).rounded-lg, shadow-md, text-xl, max-w-md. Elk leest een variabele zoals --radius-lg of --container-md.p-[13px], grid-cols-[200px_1fr], bg-[#4f98fb]. Underscores staan voor spaties.bg-(--brand) is de v4-verkorting van bg-[var(--brand)]. In v3 schreef u bg-[--brand].Breuken zoals w-1/2 worden calc(1/2 * 100%), en een opacity-achtervoegsel zoals bg-black/50 wordt een color-mix() met transparent, zodat het met elk kleurformaat werkt.
In v4 configureert u het designsysteem in CSS. Variabelen die u binnen @theme declareert, worden zowel CSS custom properties op :root als de bron voor utility-classes. Het voorvoegsel van de variabele bepaalt welke utilities ermee gevoed worden:
@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 */
}
| Namespace | Voedt | Voorbeeld |
|---|---|---|
--color-* | elke kleur-utility (bg, text, border, fill, ring, schaduwkleur...) | bg-red-500 |
--spacing | padding, margin, gap, breedte, hoogte, inset, translate | px-4 |
--font-* | lettertypefamilie | font-sans |
--text-* | lettergrootte (plus optioneel --text-*--line-height) | text-xl |
--font-weight-* | lettergewicht | font-bold |
--tracking-* / --leading-* | letterafstand / regelhoogte | tracking-wide |
--breakpoint-* | responsive varianten | sm:* |
--container-* | container query-varianten en max-w-* | @sm:*, max-w-md |
--radius-* | hoekradius | rounded-sm |
--shadow-*, --inset-shadow-*, --drop-shadow-* | schaduwen | shadow-md |
--blur-* | blur en backdrop blur | blur-md |
--ease-* / --animate-* | timingfuncties / animaties | ease-out, animate-spin |
--perspective-* / --aspect-* | 3D-perspectief / beeldverhouding | perspective-near, aspect-video |
Wilt u een hele standaard-namespace laten vallen, zet die dan eerst op initial, bijvoorbeeld --color-*: initial;, en declareer daarna alleen uw eigen kleuren. Hebt u nog een JavaScript-config, dan kan v4 die laden met @config "./tailwind.config.js";, maar de opties corePlugins, safelist en separator worden niet ondersteund.
Breakpoints zijn mobile first: een class zonder voorvoegsel geldt op elke breedte, en md:flex geldt vanaf 48rem. v4 schrijft ze met de bereiksyntaxis width >= ....
| Voorvoegsel | Minimale breedte | CSS | Eronder (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: |
Combineer ze om een bereik te raken: md:max-xl:flex geldt alleen vanaf 48rem tot (niet tot en met) 80rem. Voor een eenmalig breakpoint gebruikt u min-[900px]:grid of max-[600px]:hidden. Voeg breakpoints toe of wijzig ze met --breakpoint-* in @theme, en houd ze allemaal in rem, zodat ze juist gesorteerd worden.
Container queries zitten in v4 ingebouwd (in v3 was er een plugin voor nodig). Markeer een ouderelement met @container en style de kinderen dan met @sm:, @md: enzovoort. Ze reageren op de breedte van de ouder in plaats van het venster, en dat wilt u voor een kaart die zowel in een zijbalk als in een brede hoofdkolom staat.
<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>
| Variant | Containerbreedte | Variant | Containerbreedte |
|---|---|---|---|
@3xs | 16rem (256px) | @2xl | 42rem (672px) |
@2xs | 18rem (288px) | @3xl | 48rem (768px) |
@xs | 20rem (320px) | @4xl | 56rem (896px) |
@sm | 24rem (384px) | @5xl | 64rem (1024px) |
@md | 28rem (448px) | @6xl | 72rem (1152px) |
@lg | 32rem (512px) | @7xl | 80rem (1280px) |
@xl | 36rem (576px) |
Elk ervan compileert naar @container (width >= ...). Gebruik @max-md: voor "eronder", combineer @sm:@max-md: voor een bereik, geef containers een naam met @container/sidebar en richt u erop met @md/sidebar:, en gebruik willekeurige maten zoals @min-[475px]:. Let op: de containermaten zijn niet dezelfde getallen als de breakpoints: @md is 28rem, terwijl md: 48rem is.
Kies hieronder een layout en zie de vakken verschuiven. De classreeks wordt bijgewerkt terwijl u klikt, zodat u hem direct in uw markup kunt kopiëren.
De patronen die u het vaakst nodig hebt:
flex items-center justify-between: navigatiebalkflex items-center justify-center (of grid place-items-center): één element centrerengrid grid-cols-3 gap-2 met col-span-2shrink-0 op het vaste element, flex-1 op het element dat de ruimte vult| Doel | Classes |
|---|---|
| Responsief kaartenraster zonder breakpoints | grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-6 |
| Zijbalk plus inhoud | grid md:grid-cols-[16rem_1fr] gap-8 |
| Footer vast onderaan een korte pagina | flex min-h-dvh flex-col op de wrapper, flex-1 op main |
| Tekst die wordt afgekapt binnen een flexrij | min-w-0 op het flexkind, truncate op de tekst |
| Gestapeld op mobiel, naast elkaar op desktop | flex flex-col md:flex-row gap-4 |
| Het laatste element naar rechts duwen | ms-auto (of ml-auto) op dat element |
v4 definieert het standaardpalet in OKLCH, waarmee op wide-gamut-schermen verzadigdere kleuren zichtbaar zijn. Elk staaltje hieronder is geschilderd met de exacte waarde uit het eigen themabestand van Tailwind; klik erop om de oklch()-waarde te kopiëren. De tinten lopen van 50 tot 950. Paletten met een * (mauve, olive, mist en taupe) zijn toegevoegd in v4.2.0 en ontbreken dus in eerdere v4-versies. Zwart en wit zijn #000 en #fff.
Gebruik ze als bg-sky-500, text-sky-500/80 of, in uw eigen CSS, var(--color-sky-500). Wilt u weten of een combinatie leesbaar is, haal hem dan door de kleurcontrastchecker, en voor een eigen schaal in hetzelfde formaat probeert u de Tailwind-kleurenpaletgenerator.
Standaard volgt dark: het besturingssysteem via @media (prefers-color-scheme: dark). Wilt u het in plaats daarvan via een class of attribuut aansturen (voor een handmatige schakelaar), overschrijf de variant dan in uw CSS met @custom-variant. Er is geen darkMode-configsleutel meer.
/* 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>
Bij een handmatige schakelaar zet u de class voordat de pagina wordt getekend (een klein inline script in <head> dat de opgeslagen keuze leest), zodat bezoekers geen flits van het verkeerde thema zien. Een derde optie is dark:-classes helemaal over te slaan: definieer semantische tokens zoals --color-surface in @theme en wissel hun waarden onder .dark, zodat één class als bg-surface in beide thema's werkt.
Deze komen uit de officiële upgradegids. De hernoemingen zijn het belangrijkst, omdat de oude namen nog bestaan en stilletjes een ander (kleiner) resultaat geven.
| v3 | v4 | Waarom |
|---|---|---|
shadow-sm | shadow-xs | Schaal één stap omlaag geschoven, zodat elke maat een naam heeft |
shadow | shadow-sm | Dezelfde verschuiving |
drop-shadow-sm / drop-shadow | drop-shadow-xs / drop-shadow-sm | Dezelfde verschuiving |
blur-sm / blur | blur-xs / blur-sm | Dezelfde verschuiving (ook backdrop-blur-*) |
rounded-sm | rounded-xs | Dezelfde verschuiving |
rounded | rounded-sm | Dezelfde verschuiving |
outline-none | outline-hidden | v4 outline-none zet nu echt outline-style: none |
ring (3px, blue-500) | ring-3 plus een kleur | Kale ring is nu 1px in currentColor |
outline outline-2 | outline-2 | Breedte-utilities zetten nu zelf een solid stijl |
bg-opacity-50 (en text-, border-, ring-, divide-, placeholder-opacity) | bg-black/50 | Verwijderd; gebruik de slash-modifier |
flex-shrink-0 / flex-grow | shrink-0 / grow | Verwijderde aliassen |
overflow-ellipsis | text-ellipsis | Verwijderde alias |
decoration-slice / decoration-clone | box-decoration-slice / box-decoration-clone | Verwijderde aliassen |
bg-[--brand] | bg-(--brand) | Nieuwe verkorting voor CSS-variabelen |
!bg-red-500 | bg-red-500! | Important komt aan het eind (oude vorm verouderd) |
first:*:pt-0 | *:first:pt-0 | Gestapelde varianten lezen nu van links naar rechts |
tw-flex (voorvoegsel) | tw:flex | Voorvoegsels zien eruit als een variant en komen vooraan |
Gedragswijzigingen zonder hernoeming, waar mensen bij upgrades over struikelen:
currentColor in plaats van gray-200, dus een kale border ziet er donker uit. Voeg een kleur toe, zoals border-gray-200.hover: zit binnen @media (hover: hover), zodat een tik geen blijvende hoverstijlen meer activeert.cursor: default, net als de browser. Voeg cursor-pointer toe als u het handje wilt.> :not(:last-child) en de margin is naar de eindzijde verhuisd. Ziet de spacing er vreemd uit, stap dan over op flex of grid met gap.center en padding zijn verdwenen; breid hem uit met @utility container { margin-inline: auto; padding-inline: 2rem; }.bg-linear-to-r en voegt bg-radial en bg-conic toe.De officiële tool npx @tailwindcss/upgrade regelt de meeste hernoemingen automatisch. Draai hem op een schone branch en bekijk de diff, want de tool kan niet weten welke shadow-classes er volgens u hetzelfde uit moesten blijven zien.
Deze pagina heeft printstijlen: de zoekvakken en knoppen worden verborgen, de tabellen krijgen een kleiner lettertype en het kleurenraster houdt de staaltjes bij elkaar. Zet in de meeste browsers "Achtergrondafbeeldingen" aan in het printvenster, anders worden de staaltjes blanco afgedrukt. Hebt u de tabel eerst gefilterd, dan worden alleen de zichtbare rijen afgedrukt. Zo maakt u snel een overzicht van één pagina met alleen de utilities die u gebruikt.
Dezelfde print:-variant werkt in uw eigen projecten: print:hidden op de navigatie, print:text-black op lichte tekst en print:break-inside-avoid op kaarten houden afgedrukte pagina's leesbaar.
v4 wordt in CSS geconfigureerd. U importeert Tailwind met @import "tailwindcss" en declareert designtokens in een @theme-blok, zoals --color-brand-500 of --breakpoint-3xl. Een JavaScript-config kan nog steeds worden geladen met de @config-directive, maar de opties corePlugins, safelist en separator worden niet ondersteund.
sm is 40rem (640px), md is 48rem (768px), lg is 64rem (1024px), xl is 80rem (1280px) en 2xl is 96rem (1536px). Ze zijn mobile first, dus md:flex geldt vanaf 48rem en breder. Gebruik max-md: voor stijlen onder een breakpoint en combineer ze, zoals md:max-xl:, voor een bereik.
De schalen voor shadow, radius en blur zijn één stap omlaag geschoven. v3 shadow-sm is v4 shadow-xs, v3 shadow is v4 shadow-sm, v3 rounded-sm is v4 rounded-xs en v3 rounded is v4 rounded-sm. De oude namen compileren nog, dus er komt geen foutmelding; ze leveren gewoon de eerstvolgende kleinere maat op.
Voeg @custom-variant dark (&:where(.dark, .dark *)); toe aan uw CSS. dark:-utilities gelden dan zodra een voorouderelement de class dark heeft. Gebruik in plaats daarvan [data-theme=dark] in de selector als u liever een data-attribuut hebt.
Nee. Container queries zijn ingebouwd. Zet @container op het ouderelement en gebruik varianten zoals @sm:, @md: en @max-md: op de kinderen. De containermaten beginnen bij @3xs (16rem) en verschillen van de breakpoints van de pagina, zo is @md 28rem.
padding: calc(var(--spacing) * 4). Met de standaard --spacing van 0.25rem is dat 1rem (16px bij de standaard lettergrootte). Elk heel getal op de spacingschaal werkt zonder configuratie, en als u --spacing wijzigt, schalen ze allemaal tegelijk mee.
Display
Items
Richting
Omloop
Hoofdas
Kolommen
Dwarsas
Gap
Gekopieerd
Classes kopiëren
Dit overzicht afdrukken
Gratis beginnen · Geen creditcard nodig