Mike Codeur Formations
Se connecter
Mike Codeur Formations

By Mike Codeur

© 2026 Mike Codeur Formations. Tous droits réservés.

Produit

  • Formations
  • Documentation
  • Blog

Légal & Contact

  • Mentions légales
  • Politique de confidentialité
  • Contact
Commencer

Prêt à commencer ?

Rejoignez des milliers d'utilisateurs qui créent des choses incroyables avec notre plateforme.

Commencer gratuitement

Pas de carte de crédit requise

Newsletter

Restez informé de nos derniers articles et actualités du développement web.

Pas de spam, désabonnement à tout moment

Retour aux articlesDesign

Tailwind CSS v4 : la configuration passe dans le CSS

Fini le tailwind.config.js. La v4 déplace toute la configuration dans votre feuille de style, avec @theme, @plugin et @custom-variant.

#tailwindcss#css#frontend#design
Mike Codeur
02 août 20265 min
Design
…
Écrit par
MC
Mike Codeur
Auteur
Publié le 02 août 2026

Articles connexes

Introduction à Next.js 16Development

Introduction à Next.js 16

Ce qui change concrètement quand on développe avec Next.js 16 et React 19 : params asynchrones, Server Components, Server Actions et Turbopack.

03 août 20265 min
Lire la suite
Tutorial
Tutorial

Le Proxy Component en React

Un pattern simple pour isoler vos composants du changement : centraliser une implémentation au lieu de la dupliquer partout dans votre code.

01 août 20266 min
Lire la suite
Le changement le plus visible de Tailwind CSS v4 n'est pas une nouvelle classe utilitaire : c'est la disparition de tailwind.config.js. La configuration vit désormais dans votre CSS, et ça change la façon dont on branche un design system sur un projet.

Le nouveau point d'entrée

Là où la v3 demandait trois directives et un fichier de config JavaScript, la v4 tient sur une ligne :
@import 'tailwindcss';
@tailwind base;
@tailwind components;
@tailwind utilities;
Plus un tailwind.config.js à maintenir en parallèle.
Un projet v4 typique n'a plus du tout de tailwind.config.js à la racine. Si vous en gardez un après migration, c'est généralement le signe qu'il reste quelque chose à déplacer dans le CSS.

@theme : vos tokens deviennent des utilities

C'est le cœur de la v4. Ce que vous déclarez dans @theme sert deux fois : les variables CSS sont exposées au runtime, et Tailwind génère les classes correspondantes.
@import 'tailwindcss';

@theme {
  --color-background: var(--background);
  --color-foreground: var(--foreground);
}
Déclarer --color-background suffit à obtenir bg-background, text-background, border-background. Le nom du token dicte les utilities disponibles : le préfixe --color-* produit les classes de couleur, --spacing-* les espacements, --font-* les familles de police.
L'intérêt sur un vrai projet : vos tokens de design system ne sont plus recopiés d'un fichier JS vers du CSS. Il y a une seule déclaration, et les classes en découlent automatiquement.

Le mode sombre piloté par une variante

En v4, le dark mode par classe se déclare avec @custom-variant :
@custom-variant dark (&:is(.dark *));
Cette ligne indique que le préfixe dark: s'applique dès qu'un ancêtre porte la classe .dark. C'est exactement ce qu'il faut quand le thème est piloté par du JavaScript (un sélecteur de thème, une préférence stockée) plutôt que par la seule préférence système. Combiné à @theme, on obtient un système propre : les composants n'écrivent jamais une couleur en dur, seulement des tokens.
:root {
  --background: oklch(1 0 0);
  --foreground: oklch(0.15 0 0);
}

.dark {
  --background: oklch(0.15 0 0);
  --foreground: oklch(0.98 0 0);
}
<div class="bg-background text-foreground">
  Ce bloc suit le thème sans une seule classe dark:
</div>
Le piège classique : écrire bg-white dark:bg-slate-900 partout. Ça marche, mais chaque nouvelle couleur devient une double décision à maintenir. Passez par un token, et le mode sombre devient gratuit.

Les plugins aussi passent dans le CSS

Plus besoin de les enregistrer dans un fichier de config :
@plugin 'tailwindcss-animate';
@plugin '@tailwindcss/typography';

OKLCH par défaut

La v4 s'appuie sur oklch plutôt que sur l'hexadécimal. L'avantage est concret : la clarté est perceptuellement uniforme, donc une palette générée en faisant varier le premier paramètre reste cohérente à l'œil, ce qui n'est jamais le cas en HSL.
@theme {
  --color-primary: oklch(0.62 0.19 260);
}
L'hexadécimal continue de fonctionner. Inutile de convertir toute une palette existante le jour de la migration : faites-le quand vous retravaillez les couleurs.

Container queries intégrées

Elles ne demandent plus de plugin : un composant peut réagir à la largeur de son conteneur plutôt qu'à celle de l'écran.
<div class="@container">
  <div class="@sm:text-lg @md:flex @md:gap-6">
    Responsive selon la place disponible, pas selon la fenêtre
  </div>
</div>
C'est la bonne réponse au composant qui doit s'afficher aussi bien en pleine largeur que dans une colonne latérale étroite — un cas que les breakpoints d'écran n'ont jamais su traiter correctement.

Migrer depuis la v3

1

Remplacer les directives

Les trois @tailwind deviennent un unique @import 'tailwindcss'.
2

Déplacer le thème

Ce qui vivait dans theme.extend du fichier JS part dans @theme, sous forme de variables CSS.
3

Déclarer les plugins

Chaque plugin devient une ligne @plugin dans le CSS.
4

Redéclarer le dark mode

L'option darkMode: 'class' devient une ligne @custom-variant.
5

Supprimer le fichier de config

Une fois tout déplacé, tailwind.config.js n'a plus de raison d'exister.
Ce qui vivait en v3Où ça va en v4
theme.extend.colors@theme { --color-* }
theme.extend.spacing@theme { --spacing-* }
plugins: [...]@plugin '...'
darkMode: 'class'@custom-variant dark (...)
content: [...]Détection automatique
Ne migrez pas en deux fois. Une config à moitié en JS et à moitié en CSS produit des utilities absentes sans message d'erreur clair — le genre de problème qu'on met une heure à diagnostiquer pour une ligne oubliée.

À retenir

La v4 ne se contente pas de déplacer un fichier : elle supprime la frontière entre « configurer Tailwind » et « écrire du CSS ». Un design system se déclare une fois, dans une feuille de style, et alimente à la fois les variables CSS et les classes utilitaires. Pour un projet qui doit tenir dans le temps, c'est surtout une source de vérité en moins à synchroniser.