Ściągawka Tailwind CSS v4 (z wyszukiwarką)

Ś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

KlasaCSS generowany w v4
Układ i wyświetlanie
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;
Wyrównanie i odstępy
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;
Odstępy
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
Wymiary
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);
Typografia
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;
Kolory i tła
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;
Obramowania, zaokrąglenia, pierścienie i kontury
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;
Efekty i filtry
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%);
Przejścia, animacje i transformacje
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);
Interaktywność
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;
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.

Jak v4 zamienia klasę w wartość

W v4 są cztery sposoby nadania klasie narzędziowej wartości, a wiedza, z którego korzystasz, wyjaśnia większość niespodzianek:

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.

Tokeny @theme (następca tailwind.config.js w v4)

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ń nazwZasilaPrzykład
--color-*wszystkie klasy kolorów (bg, text, border, fill, ring, kolor cienia...)bg-red-500
--spacingpadding, margin, gap, width, height, inset, translatepx-4
--font-*rodzina fontówfont-sans
--text-*rozmiar fontu (plus opcjonalnie --text-*--line-height)text-xl
--font-weight-*grubość fontufont-bold
--tracking-* / --leading-*odstęp między literami / wysokość liniitracking-wide
--breakpoint-*warianty responsywnesm:*
--container-*warianty container queries i max-w-*@sm:*, max-w-md
--radius-*zaokrąglenie obramowaniarounded-sm
--shadow-*, --inset-shadow-*, --drop-shadow-*cienieshadow-md
--blur-*rozmycie i rozmycie tłablur-md
--ease-* / --animate-*funkcje czasowe / animacjeease-out, animate-spin
--perspective-* / --aspect-*perspektywa 3D / proporcjeperspective-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

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 >= ....

PrefiksMin. szerokośćCSSPoniż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

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>
WariantSzerokość konteneraWariantSzerokość kontenera
@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)

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.

Flex i grid w pigułce

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 nawigacji
flex items-center justify-center (lub grid place-items-center): wyśrodkowanie jednego elementu
grid grid-cols-3 gap-2 z col-span-2
shrink-0 na elemencie o stałej szerokości, flex-1 na elemencie, który wypełnia resztę
CelKlasy
Responsywna siatka kart bez breakpointówgrid 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 stronyflex min-h-dvh flex-col na wrapperze, flex-1 na main
Tekst ucinany wewnątrz wiersza flexmin-w-0 na dziecku flex, truncate na tekście
Pionowo na telefonie, w wierszu na komputerzeflex flex-col md:flex-row gap-4
Przesuń ostatni element do prawejms-auto (lub ml-auto) na tym elemencie

Domyślna paleta kolorów (OKLCH), kliknij, aby skopiować

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.

Pokazano wszystkie 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*

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.

Tryb ciemny w v4

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.

Z v3 na v4: klasy o zmienionych nazwach i działaniu

Pochodzą z oficjalnego przewodnika aktualizacji. Zmiany nazw są najważniejsze, bo stare nazwy wciąż istnieją i po cichu dają inny (mniejszy) efekt.

v3v4Dlaczego
shadow-smshadow-xsSkala przesunęła się o jeden stopień w dół, żeby każdy rozmiar miał nazwę
shadowshadow-smTo samo przesunięcie
drop-shadow-sm / drop-shadowdrop-shadow-xs / drop-shadow-smTo samo przesunięcie
blur-sm / blurblur-xs / blur-smTo samo przesunięcie (także backdrop-blur-*)
rounded-smrounded-xsTo samo przesunięcie
roundedrounded-smTo samo przesunięcie
outline-noneoutline-hiddenoutline-none w v4 naprawdę ustawia teraz outline-style: none
ring (3px, blue-500)ring-3 plus kolorSamo ring ma teraz 1px w kolorze currentColor
outline outline-2outline-2Klasy szerokości same ustawiają teraz styl solid
bg-opacity-50 (oraz text-, border-, ring-, divide-, placeholder-opacity)bg-black/50Usunięte; użyj modyfikatora z ukośnikiem
flex-shrink-0 / flex-growshrink-0 / growUsunięte aliasy
overflow-ellipsistext-ellipsisUsunięty alias
decoration-slice / decoration-clonebox-decoration-slice / box-decoration-cloneUsunięte aliasy
bg-[--brand]bg-(--brand)Nowy skrót dla zmiennych CSS
!bg-red-500bg-red-500!Important trafia na koniec (stara forma jest przestarzała)
first:*:pt-0*:first:pt-0Połączone warianty czyta się teraz od lewej do prawej
tw-flex (prefiks)tw:flexPrefiksy wyglądają jak wariant i stoją na początku

Zmiany działania bez zmiany nazwy, które zaskakują ludzi przy aktualizacji:

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.

Drukowanie tej ściągawki

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.

Najczęściej zadawane pytania

Gdzie jest tailwind.config.js w Tailwind v4?

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.

Jakie są domyślne breakpointy w Tailwind v4?

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.

Dlaczego cienie i zaokrąglone rogi wyglądają na mniejsze po aktualizacji do v4?

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.

Jak w v4 sprawić, żeby tryb ciemny używał klasy zamiast ustawienia systemowego?

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].

Czy Tailwind v4 potrzebuje wtyczki do container queries?

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.

Do czego kompiluje się p-4 w Tailwind v4?

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

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony