Aide-mémoire Tailwind CSS v4 (avec recherche)

Un aide-mémoire Tailwind CSS v4 avec recherche : tapez n'importe quelle classe ou un simple mot et voyez le CSS exact généré par la v4, des multiples de var(--spacing) aux tokens de couleur OKLCH. Il couvre aussi les tokens @theme, les breakpoints, les container queries, des blocs flex et grid interactifs, la palette de couleurs complète, le mode sombre et les renommages de v3 à v4.

Questions fréquentes

Où est passé tailwind.config.js dans Tailwind v4 ?

La v4 se configure en CSS. Vous importez Tailwind avec @import "tailwindcss" et déclarez les design tokens dans un bloc @theme, comme --color-brand-500 ou --breakpoint-3xl. Une configuration JavaScript peut encore être chargée avec la directive @config, mais les options corePlugins, safelist et separator ne sont pas prises en charge.

Quels sont les breakpoints par défaut de Tailwind v4 ?

sm vaut 40rem (640px), md 48rem (768px), lg 64rem (1024px), xl 80rem (1280px) et 2xl 96rem (1536px). Ils sont mobile first, donc md:flex s'applique à partir de 48rem et au-delà. Utilisez max-md: pour les styles en dessous d'un breakpoint et combinez-les, comme md:max-xl:, pour une plage.

Pourquoi mes ombres et mes coins arrondis paraissent plus petits après la migration vers la v4 ?

Les échelles d'ombre, de radius et de flou ont été décalées d'un cran vers le bas. shadow-sm en v3 correspond à shadow-xs en v4, shadow en v3 à shadow-sm en v4, rounded-sm en v3 à rounded-xs en v4 et rounded en v3 à rounded-sm en v4. Les anciens noms se compilent toujours, donc aucune erreur n'apparaît ; ils produisent simplement la taille inférieure.

Comment faire en sorte que le mode sombre utilise une classe plutôt que le réglage système en v4 ?

Ajoutez @custom-variant dark (&:where(.dark, .dark *)); à votre CSS. Les utilitaires dark: s'appliquent alors dès qu'un ancêtre possède la classe dark. Utilisez plutôt [data-theme=dark] dans le sélecteur si vous préférez un attribut data.

Tailwind v4 a-t-il besoin d'un plugin pour les container queries ?

Non. Les container queries sont intégrées. Placez @container sur le parent et utilisez des variantes comme @sm:, @md: et @max-md: sur ses enfants. Les tailles de conteneur commencent à @3xs (16rem) et diffèrent des breakpoints de page, par exemple @md vaut 28rem.

En quoi p-4 se compile-t-il dans Tailwind v4 ?

padding: calc(var(--spacing) * 4). Avec la valeur par défaut de --spacing, 0.25rem, cela donne 1rem (16px avec la taille de police par défaut). Tout nombre entier fonctionne sur l'échelle d'espacement sans configuration, et modifier --spacing les redimensionne tous d'un coup.

Affichage

Éléments

Direction

Retour à la ligne

Axe principal

Colonnes

Axe secondaire

Espacement

Copié

Copier les classes

Imprimer cet aide-mémoire

Cet aide-mémoire couvre Tailwind CSS v4 (la v4.3 est la version actuelle au moment de la rédaction, en octobre 2026). Pour chaque classe, il montre le CSS que la v4 génère réellement, ce qui compte car la v4 a changé la façon dont les valeurs sont produites : l'espacement est un multiple d'une seule variable --spacing , les couleurs sont des variables --color-* définies en OKLCH, et les tailles comme le radius, l'ombre et le texte proviennent de variables de thème nommées. Tapez dans le champ pour filtrer. La recherche porte sur les noms de classes, le CSS qu'elles produisent et des mots courants comme "center", "gradient" ou "sticky".

Les 243 sont affichées

ClasseCSS produit en v4
Mise en page et affichage
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;
Alignement et 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;
Espacement
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
Dimensions
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);
Typographie
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;
Couleurs et arrière-plans
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;
Bordures, radius, rings et 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;
Effets et filtres
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%);
Transitions, animations et transformations
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);
Interactivité
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 d'état et 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;

Pour bien lire le tableau : calc(var(--spacing) * 4) vaut 1rem car la valeur par défaut de --spacing est 0.25rem. Modifiez cette seule variable dans @theme et tous les padding, margin, gap, width et height qui utilisent l'échelle numérique changent avec elle. Lorsque le CSS généré est long (dégradés, rings, transitions), le tableau en montre une version simplifiée et le signale.

Comment la v4 transforme une classe en valeur

Il existe quatre façons de donner une valeur à un utilitaire en v4, et savoir laquelle vous utilisez explique la plupart des surprises :

Les fractions comme w-1/2 deviennent calc(1/2 * 100%), et un suffixe d'opacité comme bg-black/50 devient un color-mix() avec transparent, il fonctionne donc avec n'importe quel format de couleur.

Tokens @theme (le remplaçant de tailwind.config.js en v4)

En v4, vous configurez le design system en CSS. Les variables déclarées dans @theme deviennent à la fois des propriétés personnalisées CSS sur :root et la source des classes utilitaires. Le préfixe de la variable détermine les utilitaires qu'elle alimente :

@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 */
}
Espace de nomsAlimenteExemple
--color-*tous les utilitaires de couleur (bg, text, border, fill, ring, couleur d'ombre...)bg-red-500
--spacingpadding, margin, gap, width, height, inset, translatepx-4
--font-*famille de policefont-sans
--text-*taille de police (plus un --text-*--line-height)text-xl
--font-weight-*graisse de policefont-bold
--tracking-* / --leading-*interlettrage / hauteur de lignetracking-wide
--breakpoint-*variantes responsivesm:*
--container-*variantes de container queries et max-w-*@sm:*, max-w-md
--radius-*rayon de bordurerounded-sm
--shadow-*, --inset-shadow-*, --drop-shadow-*ombresshadow-md
--blur-*flou et flou d'arrière-planblur-md
--ease-* / --animate-*fonctions de temporisation / animationsease-out, animate-spin
--perspective-* / --aspect-*perspective 3D / ratio d'aspectperspective-near, aspect-video

Pour supprimer tout un espace de noms par défaut, définissez-le d'abord sur initial , par exemple --color-*: initial;, puis déclarez uniquement vos propres couleurs. Si vous avez encore une configuration JavaScript, la v4 peut la charger avec @config "./tailwind.config.js";, mais les options corePlugins, safelist et separator ne sont pas prises en charge.

Breakpoints

Les breakpoints sont mobile first : une classe sans préfixe s'applique à toutes les largeurs, et md:flex s'applique à partir de 48rem. La v4 les écrit avec la syntaxe de plage width >= ....

PréfixeLargeur min.CSSEn dessous (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:

Combinez-les pour cibler une plage : md:max-xl:flex s'applique uniquement de 48rem jusqu'à 80rem (exclu). Pour un breakpoint ponctuel, utilisez min-[900px]:grid ou max-[600px]:hidden. Ajoutez ou modifiez des breakpoints avec --breakpoint-* dans @theme, et gardez-les tous en rem pour qu'ils soient triés correctement.

Container queries

Les container queries sont intégrées à la v4 (en v3, il fallait un plugin). Marquez un parent avec @container, puis stylez les enfants avec @sm:, @md: et ainsi de suite. Elles réagissent à la largeur du parent plutôt qu'à celle de la fenêtre, ce qui est idéal pour une carte qui apparaît à la fois dans une barre latérale et dans une large colonne principale.

<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>
VarianteLargeur du conteneurVarianteLargeur du conteneur
@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)

Chacune se compile en @container (width >= ...). Utilisez @max-md: pour "en dessous", combinez @sm:@max-md: pour une plage, nommez les conteneurs avec @container/sidebar et ciblez-les avec @md/sidebar:, et utilisez des tailles arbitraires comme @min-[475px]:. Notez que les tailles de conteneur ne correspondent pas aux valeurs des breakpoints : @md vaut 28rem alors que md: vaut 48rem.

Référence rapide flex et grid

Choisissez une mise en page ci-dessous et regardez les blocs bouger. La chaîne de classes se met à jour à chaque clic, vous pouvez donc la copier directement dans votre balisage.

Les patterns que vous utiliserez le plus souvent :

flex items-center justify-between : ligne de barre de navigation
flex items-center justify-center (ou grid place-items-center) : centrer un élément
grid grid-cols-3 gap-2 avec col-span-2
shrink-0 sur l'élément fixe, flex-1 sur l'élément qui remplit l'espace
ObjectifClasses
Grille de cartes responsive sans breakpointsgrid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-6
Barre latérale plus contenugrid md:grid-cols-[16rem_1fr] gap-8
Pied de page collé en bas d'une page courteflex min-h-dvh flex-col sur le conteneur, flex-1 sur main
Texte tronqué dans une ligne flexmin-w-0 sur l'enfant flex, truncate sur le texte
Empilé sur mobile, en ligne sur ordinateurflex flex-col md:flex-row gap-4
Pousser le dernier élément à droitems-auto (ou ml-auto) sur cet élément

Palette de couleurs par défaut (OKLCH), cliquez pour copier

La v4 définit la palette par défaut en OKLCH, qui peut afficher des couleurs plus saturées sur les écrans à large gamut. Chaque nuancier ci-dessous est peint avec la valeur exacte du fichier de thème de Tailwind ; cliquez sur l'un d'eux pour copier sa valeur oklch() . Les nuances vont de 50 à 950. Les palettes marquées * (mauve, olive, mist et taupe) ont été ajoutées en v4.2.0, elles sont donc absentes des versions v4 antérieures. Le noir et le blanc sont #000 et #fff.

Les 26 sont affichées
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*

Utilisez-les sous la forme bg-sky-500, text-sky-500/80 ou, dans votre propre CSS, var(--color-sky-500). Pour vérifier qu'une association est lisible, passez-la dans le vérificateur de contraste des couleurs, et pour une échelle personnalisée dans le même format, essayez le générateur de palette de couleurs Tailwind.

Le mode sombre en v4

Par défaut, dark: suit le système d'exploitation via @media (prefers-color-scheme: dark). Pour le piloter plutôt avec une classe ou un attribut (pour un bouton de bascule manuel), redéfinissez la variante dans votre CSS avec @custom-variant. Il n'y a plus de clé de configuration 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>

Avec une bascule manuelle, définissez la classe avant l'affichage de la page (un petit script inline dans <head> qui lit le choix enregistré) pour que les visiteurs ne voient pas un flash du mauvais thème. Une troisième option consiste à se passer complètement des classes dark: : définissez des tokens sémantiques comme --color-surface dans @theme et changez leurs valeurs sous .dark, ainsi une seule classe comme bg-surface fonctionne dans les deux thèmes.

De v3 à v4 : classes renommées et modifiées

Ces changements proviennent du guide de migration officiel. Les renommages comptent le plus, car les anciens noms existent toujours et produisent discrètement un résultat différent (plus petit).

v3v4Pourquoi
shadow-smshadow-xsÉchelle décalée d'un cran vers le bas pour que chaque taille ait un nom
shadowshadow-smMême décalage
drop-shadow-sm / drop-shadowdrop-shadow-xs / drop-shadow-smMême décalage
blur-sm / blurblur-xs / blur-smMême décalage (aussi backdrop-blur-*)
rounded-smrounded-xsMême décalage
roundedrounded-smMême décalage
outline-noneoutline-hiddenv4 outline-none définit désormais vraiment outline-style: none
ring (3px, blue-500)ring-3 plus une couleurSans suffixe, ring vaut désormais 1px en currentColor
outline outline-2outline-2Les utilitaires de largeur définissent désormais eux-mêmes un style solid
bg-opacity-50 (ainsi que text-, border-, ring-, divide-, placeholder-opacity)bg-black/50Supprimé ; utilisez le modificateur avec barre oblique
flex-shrink-0 / flex-growshrink-0 / growAlias supprimés
overflow-ellipsistext-ellipsisAlias supprimé
decoration-slice / decoration-clonebox-decoration-slice / box-decoration-cloneAlias supprimés
bg-[--brand]bg-(--brand)Nouveau raccourci pour les variables CSS
!bg-red-500bg-red-500!Le important se place à la fin (ancienne forme dépréciée)
first:*:pt-0*:first:pt-0Les variantes combinées se lisent désormais de gauche à droite
tw-flex (préfixe)tw:flexLes préfixes ressemblent à une variante et viennent en premier

Changements de comportement sans renommage, qui surprennent souvent lors des migrations :

L'outil officiel npx @tailwindcss/upgrade gère automatiquement la plupart des renommages. Lancez-le sur une branche propre et relisez le diff, car il ne peut pas savoir quelles classes shadow vous vouliez garder visuellement identiques.

Imprimer cet aide-mémoire

Cette page possède des styles d'impression : les champs de recherche et les boutons sont masqués, les tableaux passent à une police plus petite et la grille de couleurs garde ses nuanciers groupés. Dans la plupart des navigateurs, activez "Graphiques d'arrière-plan" dans la boîte de dialogue d'impression, sinon les nuanciers s'impriment en blanc. Si vous avez d'abord filtré le tableau, seules les lignes visibles s'impriment, ce qui permet de créer rapidement une fiche d'une page avec uniquement les utilitaires que vous utilisez.

La même variante print: fonctionne dans vos propres projets : print:hidden sur la navigation, print:text-black sur le texte clair, et print:break-inside-avoid sur les cartes gardent les pages imprimées lisibles.

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site