Ściągawka Tailwind CSS v4 z wyszukiwarką: wpisz dowolną klasę lub zwykłe słowo i zobacz dokładny CSS, który generuje v4, od wielokrotności var(--spacing) po tokeny kolorów OKLCH. Obejmuje też tokeny @theme, breakpointy, container queries, interaktywne pudełka flex i grid, pełną paletę kolorów, tryb ciemny oraz zmiany nazw z v3 na v4.
Ta ściągawka dotyczy Tailwind CSS v4 (w chwili pisania, w październiku 2026, aktualnym wydaniem jest v4.3). Przy każdej klasie pokazuje CSS, który v4 faktycznie generuje, a to ma znaczenie, bo v4 zmieniło sposób tworzenia wartości: odstępy są wielokrotnością jednej zmiennej --spacing, kolory to zmienne --color-* zdefiniowane w OKLCH, a rozmiary, takie jak zaokrąglenie, cień i tekst, pochodzą z nazwanych zmiennych motywu. Wpisz coś w pole, aby filtrować. Wyszukiwanie działa po nazwach klas, po generowanym CSS i po zwykłych słowach, takich jak "center", "gradient" czy "sticky".
Pokazano wszystkie 243
| Klasa | CSS generowany w v4 |
|---|---|
| Układ i wyświetlanie | |
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; |
| Wyrównanie i odstępy | |
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; |
| Odstępy | |
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 |
| Wymiary | |
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); |
| Typografia | |
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; |
| Kolory i tła | |
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; |
| Obramowania, zaokrąglenia, pierścienie i kontury | |
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; |
| Efekty i filtry | |
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%); |
| Przejścia, animacje i transformacje | |
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); |
| Interaktywność | |
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; |
| Warianty stanów i mediów | |
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; |
Jak czytać tabelę: calc(var(--spacing) * 4) to 1rem, ponieważ domyślne --spacing wynosi 0.25rem. Zmień tę jedną zmienną w @theme, a razem z nią zmienią się wszystkie paddingi, marginesy, odstępy, szerokości i wysokości korzystające ze skali liczbowej. Tam, gdzie generowany CSS jest długi (gradienty, pierścienie, przejścia), tabela pokazuje wersję uproszczoną i o tym informuje.
W v4 są cztery sposoby nadania klasie narzędziowej wartości, a wiedza, z którego korzystasz, wyjaśnia większość niespodzianek:
p-4, w-64, gap-3. Działa każda liczba całkowita, a także ćwiartki, takie jak p-2.5, bez żadnej konfiguracji. Wartość to calc(var(--spacing) * n).rounded-lg, shadow-md, text-xl, max-w-md. Każda odczytuje zmienną, taką jak --radius-lg czy --container-md.p-[13px], grid-cols-[200px_1fr], bg-[#4f98fb]. Podkreślniki zastępują spacje.bg-(--brand) to w v4 skrót od bg-[var(--brand)]. W v3 pisało się bg-[--brand].Ułamki, takie jak w-1/2, zamieniają się w calc(1/2 * 100%), a przyrostek krycia, taki jak bg-black/50, zamienia się w color-mix() z przezroczystością, więc działa z każdym formatem koloru.
W v4 system projektowy konfigurujesz w CSS. Zmienne zadeklarowane wewnątrz @theme stają się jednocześnie właściwościami niestandardowymi CSS na :root i źródłem klas narzędziowych. Prefiks zmiennej decyduje, które klasy zasila:
@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 */
}
| Przestrzeń nazw | Zasila | Przykład |
|---|---|---|
--color-* | wszystkie klasy kolorów (bg, text, border, fill, ring, kolor cienia...) | bg-red-500 |
--spacing | padding, margin, gap, width, height, inset, translate | px-4 |
--font-* | rodzina fontów | font-sans |
--text-* | rozmiar fontu (plus opcjonalnie --text-*--line-height) | text-xl |
--font-weight-* | grubość fontu | font-bold |
--tracking-* / --leading-* | odstęp między literami / wysokość linii | tracking-wide |
--breakpoint-* | warianty responsywne | sm:* |
--container-* | warianty container queries i max-w-* | @sm:*, max-w-md |
--radius-* | zaokrąglenie obramowania | rounded-sm |
--shadow-*, --inset-shadow-*, --drop-shadow-* | cienie | shadow-md |
--blur-* | rozmycie i rozmycie tła | blur-md |
--ease-* / --animate-* | funkcje czasowe / animacje | ease-out, animate-spin |
--perspective-* / --aspect-* | perspektywa 3D / proporcje | perspective-near, aspect-video |
Aby usunąć całą domyślną przestrzeń nazw, najpierw ustaw ją na initial, na przykład --color-*: initial;, a potem zadeklaruj tylko własne kolory. Jeśli nadal masz konfigurację w JavaScripcie, v4 może ją wczytać przez @config "./tailwind.config.js";, ale opcje corePlugins, safelist i separator nie są obsługiwane.
Breakpointy działają w podejściu mobile first: klasa bez prefiksu obowiązuje przy każdej szerokości, a md:flex obowiązuje od 48rem w górę. v4 zapisuje je składnią zakresów width >= ....
| Prefiks | Min. szerokość | CSS | Poniżej (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: |
Połącz je, aby objąć zakres: md:max-xl:flex działa tylko od 48rem do 80rem (bez 80rem). Dla jednorazowego breakpointu użyj min-[900px]:grid lub max-[600px]:hidden. Breakpointy dodasz lub zmienisz przez --breakpoint-* w @theme; trzymaj je wszystkie w rem, żeby sortowały się poprawnie.
Container queries są wbudowane w v4 (w v3 wymagały wtyczki). Oznacz rodzica przez @container, a potem stylizuj dzieci przez @sm:, @md: i tak dalej. Reagują na szerokość rodzica, a nie okna, i właśnie tego potrzebujesz dla karty, która pojawia się zarówno w pasku bocznym, jak i w szerokiej kolumnie głównej.
<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>
| Wariant | Szerokość kontenera | Wariant | Szerokość kontenera |
|---|---|---|---|
@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) |
Każdy z nich kompiluje się do @container (width >= ...). Użyj @max-md: dla "poniżej", połącz @sm:@max-md: dla zakresu, nazywaj kontenery przez @container/sidebar i kieruj do nich style przez @md/sidebar:, a także używaj dowolnych rozmiarów, takich jak @min-[475px]:. Uwaga: rozmiary kontenerów to nie te same liczby co breakpointy: @md to 28rem, a md: to 48rem.
Wybierz układ poniżej i patrz, jak przesuwają się pudełka. Ciąg klas aktualizuje się przy każdym kliknięciu, więc możesz go skopiować prosto do swojego kodu.
Wzorce, po które będziesz sięgać najczęściej:
flex items-center justify-between: wiersz paska nawigacjiflex items-center justify-center (lub grid place-items-center): wyśrodkowanie jednego elementugrid grid-cols-3 gap-2 z col-span-2shrink-0 na elemencie o stałej szerokości, flex-1 na elemencie, który wypełnia resztę| Cel | Klasy |
|---|---|
| Responsywna siatka kart bez breakpointów | grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-6 |
| Pasek boczny plus treść | grid md:grid-cols-[16rem_1fr] gap-8 |
| Stopka przyklejona do dołu krótkiej strony | flex min-h-dvh flex-col na wrapperze, flex-1 na main |
| Tekst ucinany wewnątrz wiersza flex | min-w-0 na dziecku flex, truncate na tekście |
| Pionowo na telefonie, w wierszu na komputerze | flex flex-col md:flex-row gap-4 |
| Przesuń ostatni element do prawej | ms-auto (lub ml-auto) na tym elemencie |
v4 definiuje domyślną paletę w OKLCH, co pozwala pokazać bardziej nasycone kolory na ekranach o szerokim gamucie. Każda próbka poniżej jest pomalowana dokładną wartością z pliku motywu Tailwind; kliknij ją, aby skopiować wartość oklch(). Odcienie mają numery od 50 do 950. Palety oznaczone * (mauve, olive, mist i taupe) dodano w v4.2.0, więc nie ma ich we wcześniejszych wydaniach v4. Czerń i biel to #000 i #fff.
Używaj ich jako bg-sky-500, text-sky-500/80 albo we własnym CSS jako var(--color-sky-500). Aby sprawdzić, czy zestawienie jest czytelne, przepuść je przez sprawdzarkę kontrastu kolorów, a jeśli potrzebujesz własnej skali w tym samym formacie, wypróbuj generator palet kolorów Tailwind.
Domyślnie dark: podąża za systemem operacyjnym przez @media (prefers-color-scheme: dark). Aby sterować nim klasą lub atrybutem (na potrzeby ręcznego przełącznika), nadpisz wariant w swoim CSS przez @custom-variant. Klucza konfiguracji darkMode już nie ma.
/* 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>
Przy ręcznym przełączniku ustaw klasę, zanim strona się wyrenderuje (mały skrypt inline w <head>, który odczytuje zapisany wybór), żeby odwiedzający nie zobaczyli mignięcia niewłaściwego motywu. Trzecia możliwość to całkowita rezygnacja z klas dark:: zdefiniuj semantyczne tokeny, takie jak --color-surface, w @theme i podmieniaj ich wartości pod .dark, tak by jedna klasa, np. bg-surface, działała w obu motywach.
Pochodzą z oficjalnego przewodnika aktualizacji. Zmiany nazw są najważniejsze, bo stare nazwy wciąż istnieją i po cichu dają inny (mniejszy) efekt.
| v3 | v4 | Dlaczego |
|---|---|---|
shadow-sm | shadow-xs | Skala przesunęła się o jeden stopień w dół, żeby każdy rozmiar miał nazwę |
shadow | shadow-sm | To samo przesunięcie |
drop-shadow-sm / drop-shadow | drop-shadow-xs / drop-shadow-sm | To samo przesunięcie |
blur-sm / blur | blur-xs / blur-sm | To samo przesunięcie (także backdrop-blur-*) |
rounded-sm | rounded-xs | To samo przesunięcie |
rounded | rounded-sm | To samo przesunięcie |
outline-none | outline-hidden | outline-none w v4 naprawdę ustawia teraz outline-style: none |
ring (3px, blue-500) | ring-3 plus kolor | Samo ring ma teraz 1px w kolorze currentColor |
outline outline-2 | outline-2 | Klasy szerokości same ustawiają teraz styl solid |
bg-opacity-50 (oraz text-, border-, ring-, divide-, placeholder-opacity) | bg-black/50 | Usunięte; użyj modyfikatora z ukośnikiem |
flex-shrink-0 / flex-grow | shrink-0 / grow | Usunięte aliasy |
overflow-ellipsis | text-ellipsis | Usunięty alias |
decoration-slice / decoration-clone | box-decoration-slice / box-decoration-clone | Usunięte aliasy |
bg-[--brand] | bg-(--brand) | Nowy skrót dla zmiennych CSS |
!bg-red-500 | bg-red-500! | Important trafia na koniec (stara forma jest przestarzała) |
first:*:pt-0 | *:first:pt-0 | Połączone warianty czyta się teraz od lewej do prawej |
tw-flex (prefiks) | tw:flex | Prefiksy wyglądają jak wariant i stoją na początku |
Zmiany działania bez zmiany nazwy, które zaskakują ludzi przy aktualizacji:
currentColor zamiast gray-200, więc samo border wygląda ciemno. Dodaj kolor, np. border-gray-200.hover: jest opakowany w @media (hover: hover), więc stuknięcie nie wywołuje już przyklejonych stylów hover.cursor: default, tak jak przeglądarka. Dodaj cursor-pointer, jeśli chcesz kursor w kształcie dłoni.> :not(:last-child), a margines przeniósł się na stronę końcową. Jeśli odstępy wyglądają źle, przejdź na flex lub grid z gap.center i padding już nie ma; rozszerz go przez @utility container { margin-inline: auto; padding-inline: 2rem; }.bg-linear-to-r i dodaje bg-radial oraz bg-conic.Oficjalne narzędzie npx @tailwindcss/upgrade automatycznie obsługuje większość zmian nazw. Uruchom je na czystej gałęzi i przejrzyj diff, bo nie może wiedzieć, które klasy shadow miały wyglądać tak samo jak wcześniej.
Ta strona ma style do druku: pola wyszukiwania i przyciski są ukryte, tabele dostają mniejszy font, a siatka kolorów trzyma próbki razem. W większości przeglądarek włącz w oknie drukowania opcję "Grafika tła", bo inaczej próbki wydrukują się puste. Jeśli wcześniej przefiltrujesz tabelę, wydrukują się tylko widoczne wiersze, co jest szybkim sposobem na jednostronicową ściągawkę z samymi klasami, których używasz.
Ten sam wariant print: działa w Twoich projektach: print:hidden na nawigacji, print:text-black na jasnym tekście i print:break-inside-avoid na kartach utrzymują czytelność wydruków.
v4 konfiguruje się w CSS. Importujesz Tailwind przez @import "tailwindcss" i deklarujesz tokeny projektu w bloku @theme, np. --color-brand-500 czy --breakpoint-3xl. Konfigurację w JavaScripcie wciąż można wczytać dyrektywą @config, ale opcje corePlugins, safelist i separator nie są obsługiwane.
sm to 40rem (640px), md to 48rem (768px), lg to 64rem (1024px), xl to 80rem (1280px), a 2xl to 96rem (1536px). Działają w podejściu mobile first, więc md:flex obowiązuje od 48rem w górę. Użyj max-md: dla stylów poniżej breakpointu, a połącz je, np. md:max-xl:, aby objąć zakres.
Skale cieni, zaokrągleń i rozmycia przesunęły się o jeden stopień w dół. shadow-sm z v3 to shadow-xs w v4, shadow z v3 to shadow-sm w v4, rounded-sm z v3 to rounded-xs w v4, a rounded z v3 to rounded-sm w v4. Stare nazwy nadal się kompilują, więc nie pojawia się żaden błąd; po prostu dają o jeden rozmiar mniej.
Dodaj do swojego CSS @custom-variant dark (&:where(.dark, .dark *));. Klasy dark: zadziałają wtedy, gdy którykolwiek przodek ma klasę dark. Jeśli wolisz atrybut data, użyj w selektorze [data-theme=dark].
Nie. Container queries są wbudowane. Dodaj @container do rodzica i używaj na jego dzieciach wariantów, takich jak @sm:, @md: i @max-md:. Rozmiary kontenerów zaczynają się od @3xs (16rem) i różnią się od breakpointów strony, na przykład @md to 28rem.
padding: calc(var(--spacing) * 4). Przy domyślnym --spacing równym 0.25rem daje to 1rem (16px przy domyślnym rozmiarze fontu). Na skali odstępów działa każda liczba całkowita bez konfiguracji, a zmiana --spacing przeskalowuje je wszystkie naraz.
Display
Elementy
Kierunek
Zawijanie
Oś główna
Kolumny
Oś poprzeczna
Odstęp
Skopiowano
Skopiuj klasy
Wydrukuj tę ściągawkę
Zacznij za darmo · Bez karty kredytowej