Tailwind CSS 45 termes

45 termes affichés

TypeConcept Method Pattern Principle Tool
Niveau 🟢 Junior 🟡 Mid 🔴 Senior

Mis à jour ces 90 derniers jours 6 nouvelles · 16 révisées

@apply

Tailwind CSS 🟡 Mid

Directive qui injecte des utilitaires Tailwind dans une classe CSS. En v4, dans un fichier séparé (CSS module, <style> Vue/Svelte), il faut d'abord @référence la feuille principale pour accéder au thème, sans dupliquer le CSS émis.

Créer un raccourci clavier qui exécute plusieurs commandes d'un coup.

/* Component.vue <style> ou styles.module.css */
@reference "../../app.css";

.btn-primary {
  @apply px-4 py-2 bg-blue-500 text-white rounded-lg
    hover:bg-blue-700 transition-colors;
}

Cas d'usage : Extraire un composant réutilisable quand les classes sont trop longues dans le HTML.

Anti-pattern : Abuser de @apply pour tout, annulant l'intérêt de l'approche utility-first.
#styling#interview#tailwind#tailwind4

@layer

Tailwind CSS 🟡 Mid

Organisation du CSS en couches natives (@layer base, components, utilities). En v4 les @tailwind base/components/utilities disparaissent au profit d'un seul @import ; @layer base et components restent valides, mais un utilitaire personnalisé se déclare avec @utility pour supporter les variantes.

Les étages d'un immeuble : base au sous-sol, composants au milieu, utilitaires au sommet (la plus haute priorité).

@import "tailwindcss";

@layer base {
  h1 { font-size: var(--text-2xl); }
}
@layer components {
  .card { padding: --spacing(4); box-shadow: var(--shadow-md); }
}
/* v3 : @layer utilities { .tab-4 {...} }  →  v4 : */
@utility tab-4 { tab-size: 4; }

Cas d'usage : Organiser ses styles custom pour qu'ils s'intègrent correctement dans le système de spécificité Tailwind.

#styling#tailwind#tailwind4

@source (détection des sources)

Tailwind CSS 🟡 Mid

Depuis Tailwind v4.0, la détection des classes est automatique et respecte .gitignore. @source ajoute un chemin ignoré (bibliothèque dans node_modules), @source not exclut un dossier, @import "tailwindcss" source(none) désactive l'automatique, et @source inline() remplace la safelist avec expansion d'accolades.

Dire au facteur quelles rues desservir en plus de sa tournée habituelle, et lesquelles éviter.

@import "tailwindcss";

@source "../node_modules/@acme/ui-lib";
@source not "../src/legacy";

/* safelist : bg-red-50 … bg-red-950 avec hover: */
@source inline("{hover:,}bg-red-{50,{100..900..100},950}");

Cas d'usage : Monorepos et bibliothèques de composants partagées, classes construites dynamiquement côté serveur.

Anti-pattern : Garder content: [...] dans un tailwind.config.js chargé par @config alors que @source fait le travail sans JavaScript.
#styling#tailwind#tailwind4

@tailwindcss/typography (Prose)

Tailwind CSS 🟡 Mid

Plugin officiel qui ajoute la classe prose pour styler du contenu riche (articles, markdown, CMS). En v4 il se charge avec la directive @plugin dans le CSS, plus via plugins: [] du fichier JS.

Un styliste personnel pour tes articles : il rend tout beau sans que tu touches a chaque élément.

<!-- app.css : @import "tailwindcss"; @plugin "@tailwindcss/typography"; -->
<article class="prose prose-lg dark:prose-invert max-w-none">
  <h1>Mon article</h1>
  <p>Le contenu est stylé automatiquement…</p>
</article>

Cas d'usage : Styler du contenu éditorial/markdown venant d'un CMS ou d'une base de données.

#styling#interview#tailwind#tailwind4

@theme (configuration CSS-first)

Tailwind CSS 🟡 Mid

Directive de Tailwind v4.0 (22 janvier 2025) qui remplace theme de tailwind.config.js. Chaque variable déclarée dans un espace de noms (--color-*, --font-*, --breakpoint-*, --spacing-*, --text-*…) génère les utilitaires et variantes correspondants, et reste disponible comme variable CSS native. --color-*: initial réinitialise un espace de noms ; @theme inline sert quand on référence d'autres variables.

Un tableau de bord où déplacer un curseur change toutes les pièces reliées d'un coup.

@import "tailwindcss";

@theme {
  --color-mint-500: oklch(0.72 0.11 178); /* bg-mint-500, text-mint-500… */
  --font-display: "Satoshi", sans-serif;  /* font-display */
  --breakpoint-3xl: 120rem;               /* 3xl:… */
}

@theme inline {
  --font-sans: var(--font-inter); /* référence une variable externe */
}

.custom { color: var(--color-mint-500); } /* utilisable en CSS pur */

Cas d'usage : Décrire la charte (couleurs, polices, points de rupture) dans la feuille principale et la partager avec le CSS maison.

Anti-pattern : Déclarer les tokens en CSS ordinaire (:root { --color-x }) : aucune classe utilitaire n'est générée sans @theme.
#styling#interview#tailwind#tailwind4

Directive de Tailwind v4 qui déclare un utilitaire maison compatible avec toutes les variantes (hover:, lg:, dark:). La forme fonctionnelle nom-* accepte des valeurs via --value() (thème, entier nu, littéral, arbitraire) et un modificateur via --modifier(), avec --default() comme repli (v4.3). Elle remplace @layer utilities et addUtilities().

Ajouter sa propre pièce au jeu de construction, taillée pour s'emboîter avec les autres.

@utility content-auto {
  content-visibility: auto;
}

/* tab-2, tab-4, tab-[7] */
@utility tab-* {
  tab-size: --value(--tab-size-*, integer, [integer]);
}

/* text-fluid-3/1.2 : valeur + modificateur */
@utility text-fluid-* {
  font-size: --value(integer, --default(2));
  line-height: --modifier(number, --default(1.2));
}

Cas d'usage : Étendre Tailwind avec des propriétés absentes (content-visibility, text-shadow…) ou des échelles métier, sans plugin JavaScript.

Anti-pattern : Définir l'utilitaire dans @layer utilities comme en v3 : il ne réagira pas aux variantes.
#styling#tailwind#tailwind4

@variant et @custom-variant

Tailwind CSS 🟡 Mid

Deux directives v4. @variant applique une variante Tailwind (dark, hover, md…) à l'intérieur d'une règle CSS maison ; v4.3 (8 mai 2026) accepte les variantes empilées (hover:focus) et composées (hover, focus). @custom-variant crée une nouvelle variante à partir d'un sélecteur, par exemple pour piloter le mode sombre par classe.

Un tampon « uniquement le week-end » qu'on appose sur n'importe quelle règle.

@import "tailwindcss";

@custom-variant dark (&:where(.dark, .dark *));
@custom-variant hocus (&:hover, &:focus);

.button {
  background: var(--color-sky-500);
  @variant hover:focus { background: var(--color-sky-600); } /* empilée */
  @variant dark { background: var(--color-sky-300); }
}

Cas d'usage : Écrire du CSS de composant qui réutilise les variantes du projet, et définir des variantes métier (theme-midnight, hocus).

Anti-pattern : Réécrire les média queries et sélecteurs à la main dans le CSS custom au lieu d'utiliser les variantes existantes.
#styling#tailwind#tailwind4

Animate & Transition

Tailwind CSS 🟢 Junior

Classes animate-* pour les animations prédéfinies (spin, ping, pulsé, bounce) et transition-* pour les transitions CSS avec durée et easing configurables.

animate c'est une chorégraphie complète, transition c'est juste un fondu entre deux poses.

<div class="animate-spin h-8 w-8 border-4
  border-blue-500 rounded-full border-t-transparent">
</div>
<button class="transition-all duration-300 ease-in-out
  hover:scale-105 hover:shadow-lg">Bouton</button>

Cas d'usage : Ajouter du mouvement subtil aux interactions utilisateur (loading spinners, hover effects).

#styling#tailwind

Arbitrary Values [...]

Tailwind CSS 🟡 Mid

Syntaxe entre crochets pour une valeur absente du thème. En v4, une variable CSS s'écrit entre parenthèses (bg-(--brand)) et non plus bg-[--brand] ; le modificateur important passe en fin de classe (flex!).

Un joker dans un jeu de cartes : tu l'utilises quand aucune carte standard ne convient.

<div class="top-[117px] w-[calc(100%-2rem)]
  bg-[#1da1f2] grid-cols-[1fr_2fr]
  bg-(--brand-color) flex!">
</div>
<!-- v3 : bg-[--brand-color] !flex -->

Cas d'usage : Respecter une maquette pixel-perfect avec des valeurs spécifiques sans polluer la config Tailwind.

Anti-pattern : Abuser des valeurs arbitraires au lieu d'étendre le theme pour des valeurs réutilisées.
#styling#interview#tailwind#tailwind4

Class Composition

Tailwind CSS 🟢 Junior

Technique consistant a combiner plusieurs classes utilitaires pour créer un style complet. L'ordre des classes n'affecte pas la spécificité.

Comme composer un plat en ajoutant des ingrédients un par un : sel, poivre, huile, chacun apporte sa touche.

<button class="px-4 py-2 bg-blue-500 text-white
  rounded-lg hover:bg-blue-600 transition-colors">
  Cliquer
</button>

Cas d'usage : Construire des composants UI en empilant des utilitaires sans écrire de CSS custom.

#styling#interview#tailwind

clsx / cn()

Tailwind CSS 🟡 Mid

Utilitaires pour construire des chaînés de classes conditionnelles. cn() combine clsx + twMerge pour gérer les conditions ET les conflits Tailwind.

Un assistant qui compose ta tenue selon la météo : si pluie alors parapluie, si froid alors manteau.

import { clsx } from 'clsx'
import { twMerge } from 'tailwind-merge'

const cn = (...inputs) => twMerge(clsx(inputs))

cn('p-4 bg-blue-500', isActive && 'bg-green-500',
  { 'opacity-50': isDisabled })
// => 'p-4 bg-green-500' si isActive

Cas d'usage : Gérer proprement les classes conditionnelles dans les composants React avec Tailwind.

#styling#interview#tailwind

Component Extraction

Tailwind CSS 🟡 Mid

Stratégie de factorisation des styles répétitifs en composants (React, Vue) ou en classes @apply. Le composant JS/TS est préféré a @apply.

Quand tu répètes la même recette, tu l'écris sur une fiche plutôt que de la réciter a chaque fois.

// Prefere: composant React
const Button = ({ children }) => (
  <button className="px-4 py-2 bg-blue-500
    text-white rounded hover:bg-blue-600">
    {children}
  </button>
);

Cas d'usage : Éviter la duplication de longues chaînés de classes dans les templates/JSX.

Anti-pattern : Extraire trop tôt : attendre d'avoir 3+ répétitions avant de créer un composant.
#styling#interview#tailwind

Container

Tailwind CSS 🟢 Junior

Classe qui fixe la largeur max d'un élément selon le breakpoint actif. Peut être centre automatiquement via la config.

Les bords d'une route : ils empêchent le contenu de s'étaler a l'infini sur grands écrans.

<div class="container mx-auto px-4">
  <!-- Contenu centre et contraint -->
</div>
// config: container: { center: true, padding: '1rem' }

Cas d'usage : Centrer le contenu principal et limiter sa largeur sur grands écrans.

#styling#interview#tailwind

Container Queries

Tailwind CSS 🔴 Senior

Variantes basées sur la taille du conteneur parent, pas du viewport. Natives depuis Tailwind v4.0 (22 janvier 2025), sans le plugin @tailwindcss/container-queries : @container sur le parent, puis @sm:, @md:, @max-md:, conteneurs nommés (@container/main) et tailles arbitraires (@min-[475px]).

Un meuble qui s'adapte a la taille de la pièce ou il se trouve, pas a la taille de la maison.

<div class="@container/main">
  <div class="flex flex-col @md/main:flex-row @max-sm:hidden">
    <!-- s'adapte à la largeur du parent -->
  </div>
</div>

Cas d'usage : Créer des composants vraiment responsifs qui s'adaptent a leur conteneur, pas au viewport.

#styling#interview#tailwind#tailwind4

Content Paths

Tailwind CSS 🟡 Mid

Chemins que Tailwind scanne pour trouver les classes. En v3 ils se déclarent dans content de tailwind.config.js. En v4.0 la détection est automatique ; @source enregistre explicitement une bibliothèque tierce, @source not exclut un dossier, et source(none) désactive l'automatique.

Dire au facteur quelles boites aux lettres existent pour qu'il ne distribue pas de courrier fantôme.

@import "tailwindcss" source(none);
@source "../src";
@source "../node_modules/flowbite";
@source not "../src/components/legacy";

Cas d'usage : Configurer correctement le scanning pour éviter que des classes soient manquantes en production.

Anti-pattern : Oublier d'inclure les fichiers d'une librairie tierce, causant des styles manquants en prod.
#styling#interview#tailwind#tailwind4

Custom Plugins

Tailwind CSS 🔴 Senior

Extension de Tailwind avec ses propres utilitaires et variantes. En v3 via plugin() et addUtilities/addVariant en JavaScript ; en v4 via @utility (y compris fonctionnel avec --value()) et @custom-variant, directement en CSS, sans code.

Fabriquer tes propres briques LEGO quand les formes standard ne suffisent plus.

/* variante hocus:bg-blue-500 */
@custom-variant hocus (&:hover, &:focus);

/* utilitaire fonctionnel tab-2, tab-4, tab-[7] */
@utility tab-* {
  tab-size: --value(integer, [integer]);
}

Cas d'usage : Ajouter des variantes custom (hocus, supports) ou des utilitaires métier au framework.

#styling#tailwind#tailwind4

DaisyUI

Tailwind CSS 🟢 Junior

Plugin Tailwind qui ajoute des classes de composants sémantiques (btn, card, modal). Fournit des themes pre-faits tout en restant personnalisable.

Un kit de meubles IKEA pre-assembles : prêts a l'emploi mais tu peux les customiser.

<button class="btn btn-primary">Cliquer</button>
<div class="card bg-base-100 shadow-xl">
  <div class="card-body">
    <h2 class="card-title">Titre</h2>
  </div>
</div>

Cas d'usage : Prototyper rapidement avec des composants pre-styles tout en gardant l'écosystème Tailwind.

#styling#tailwind

Dark Mode (dark:)

Tailwind CSS 🟢 Junior

Préfixe dark: qui applique des styles quand le mode sombre est actif. Par défaut il suit prefers-color-scheme. Pour un basculement manuel, la v4 redéfinit la variante avec @custom-variant dark, sur une classe ou un attribut data-theme.

Un interrupteur jour/nuit dans ta maison : les meubles restent, seul l'éclairage change.

@import "tailwindcss";
/* basculement par classe .dark */
@custom-variant dark (&:where(.dark, .dark *));

/* ou par attribut */
/* @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *)); */

/* HTML : <html class="dark"> ... <div class="bg-white dark:bg-black"> */

Cas d'usage : Implémenter un theme sombre sans dupliquer les composants ni gérer des variables CSS manuellement.

#styling#interview#tailwind#tailwind4

Flex Utilities

Tailwind CSS 🟢 Junior

Ensemble de classes utilitaires pour contrôler les layouts flexbox : direction, alignement, justification, wrap et grow/shrink.

Un chef d'orchestre qui place les musiciens en ligne, les espace et les aligne comme il veut.

<div class="flex flex-col md:flex-row
  items-center justify-between gap-4
  flex-wrap">
  <div class="flex-1">A</div>
  <div class="flex-shrink-0">B</div>
</div>

Cas d'usage : Créer des layouts flexibles et responsifs (navbars, cards, formulaires) sans CSS custom.

#styling#interview#tailwind

Flowbite

Tailwind CSS 🟢 Junior

Librairie de composants Tailwind avec du JavaScript interactif inclus. Disponible en version vanilla, React, Vue et Svelte.

Un catalogue de meubles avec la notice de montage et les outils fournis.

<div data-dial-init class="fixed end-6 bottom-6">
  <button data-dial-toggle="speed-dial"
    class="btn btn-primary rounded-full p-4">
    +
  </button>
</div>

Cas d'usage : Ajouter des composants interactifs (dropdowns, modals, carousels) dans un projet Tailwind.

#styling#tailwind

Font Utilities

Tailwind CSS 🟢 Junior

Classes pour contrôler la police (font-sans/serif/mono), le poids (font-bold), la taille (text-sm/lg/xl) et le style (italic, antialiased).

Les réglages d'un traitement de texte : police, taille, gras, italique.

<h1 class="font-display text-4xl font-extrabold
  tracking-tight leading-tight">
  Titre Principal
</h1>
<p class="font-sans text-base font-normal
  text-gray-600 leading-relaxed">Contenu</p>

Cas d'usage : Appliquer une typographie cohérente sur l'ensemble du projet via des classes utilitaires.

#styling#tailwind

Grid Utilities

Tailwind CSS 🟢 Junior

Classes pour créer des grilles CSS : nombre de colonnes, placement, gaps et zones. Simplifie les layouts complexes en quelques classes.

Un tableur Excel : tu définis colonnes et lignes, puis places tes contenus dans les cellules.

<div class="grid grid-cols-3 gap-6">
  <div class="col-span-2">Large</div>
  <div class="row-span-2">Haut</div>
  <div>Normal</div>
</div>

Cas d'usage : Construire des grilles de cards, galleries photo, ou dashboards avec un layout précis.

#styling#interview#tailwind

Group / Peer Modifiers

Tailwind CSS 🟡 Mid

Modificateurs qui permettent de styler un enfant (group-hover:) ou un élément frère (peer-checked:) en fonction de l'état d'un autre élément.

Quand papa sourit (group), les enfants changent de couleur. Quand ton voisin coche (peer), tu apparais.

<div class="group p-4 hover:bg-blue-50">
  <h3 class="group-hover:text-blue-600">Titre</h3>
</div>

<input type="checkbox" class="peer" />
<p class="hidden peer-checked:block">Visible si coche</p>

Cas d'usage : Créer des interactions parent-enfant ou frère-frère sans JavaScript.

#styling#interview#tailwind

Headless UI

Tailwind CSS 🟡 Mid

Librairie de composants accessibles et sans style par défaut, conçue par l'équipe Tailwind. Fournit la logique (modals, menus, tabs) sans imposer de design.

Un mannequin nu : il a la structure, tu choisis les vêtements (les styles).

import { Menu } from '@headlessui/react'
<Menu>
  <Menu.Button className="px-4 py-2">Options</Menu.Button>
  <Menu.Items className="absolute mt-2 bg-white shadow-lg">
    <Menu.Item>{({ active }) =>
      <a className={active ? 'bg-blue-100' : ''}>Edit</a>
    }</Menu.Item>
  </Menu.Items>
</Menu>

Cas d'usage : Implémenter des composants accessibles (ARIA) avec un style 100% custom en Tailwind.

#styling#tailwind

JIT Mode

Tailwind CSS 🟡 Mid

Génération des classes à la volée, uniquement pour celles trouvées dans les sources. Activée par défaut depuis Tailwind 3, elle est portée en v4.0 (22 janvier 2025) par le moteur Oxide, réécrit en Rust : builds complets 3,78× plus rapides, rebuilds incrémentaux jusqu'à 182× plus rapides selon l'annonce.

Un restaurant a la carte au lieu d'un buffet : on prépare uniquement ce que tu commandes.

<!-- Seules les classes rencontrées sont générées -->
<div class="top-[117px] grid-cols-[1fr_auto] grid-cols-15">
</div>
<!-- v4 : valeurs dynamiques sans config (grid-cols-15) -->

Cas d'usage : Avoir un build rapide et un fichier CSS minimal même avec des milliers de variantes possibles.

#styling#interview#tailwind#tailwind4

Keyframes Config

Tailwind CSS 🟡 Mid

Animations personnalisées utilisables via animate-*. En v4 elles se déclarent dans @theme : une variable --animate-<nom> crée l'utilitaire, et les @keyframes vivent dans le même bloc.

Écrire le script d'une scène de film, puis dire a l'acteur de la jouer avec animate-*.

@import "tailwindcss";

@theme {
  --animate-fade-in: fade-in 0.5s ease-in-out;

  @keyframes fade-in {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
}
/* HTML : <div class="animate-fade-in"> */

Cas d'usage : Créer des animations d'entrée/sortie custom pour les modals, toasts, et notifications.

#styling#tailwind#tailwind4

Migration Tailwind v3 → v4

Tailwind CSS 🟡 Mid

Points de rupture documentés dans le guide officiel : @tailwind base/components/utilities remplacés par @import "tailwindcss" ; config JS chargée explicitement via @config ; utilitaires renommés (shadow-sm → shadow-xs, shadow → shadow-sm, ring → ring-3, outline-none → outline-hidden) ; bordure par défaut currentColor ; préfixe en tw:flex ; important en flex! ; variables en bg-(--var) ; theme() déprécié au profit de var(--color-…). L'outil npx @tailwindcss/upgrade automatise l'essentiel. Contexte : Tailwind Labs a rejoint Shopify le 9 septembre 2026.

Déménager : mêmes meubles, nouvelle adresse et quelques cartons à réétiqueter.

/* v3 */
@tailwind base; @tailwind components; @tailwind utilities;
.card { box-shadow: theme(boxShadow.md); }

/* v4 */
@import "tailwindcss";
.card { box-shadow: var(--shadow-md); }

/* HTML : shadow → shadow-sm, !flex → flex!, tw-flex → tw:flex,
   bg-[--brand] → bg-(--brand), focus:ring → focus:ring-3 */

Cas d'usage : Préparer la montée de version d'un projet v3 : lancer l'upgrade tool sur une branche, relire les classes renommées, vérifier les bordures.

Anti-pattern : Migrer sans relire les bordures et les anneaux : border prend currentColor et ring passe de 3 px à 1 px, le rendu change silencieusement.
#styling#interview#tailwind4

Moteur Oxide (Tailwind v4)

Tailwind CSS 🔴 Senior

Moteur de Tailwind v4.0 (22 janvier 2025) réécrit en Rust avec Lightning CSS : d'après l'annonce, builds complets 3,78× plus rapides et rebuilds incrémentaux sans nouveau CSS 182× plus rapides. Il gère lui-même @import, les préfixes vendeur et l'imbrication native, ce qui rend Sass/Less/PostCSS-nesting inutiles. Il cible Safari 16.4, Chrome 111 et Firefox 128 minimum, car il repose sur @property et color-mix().

Remplacer le moteur d'une voiture par un bloc moderne : même carrosserie, démarrage instantané.

# CLI v4 (paquet renommé)
npx @tailwindcss/cli -i src/app.css -o dist/app.css --watch

# Vite : @tailwindcss/vite ; webpack : @tailwindcss/webpack (v4.2)
# PostCSS : @tailwindcss/postcss

# Migration automatique v3 → v4 (Node 20+)
npx @tailwindcss/upgrade

Cas d'usage : Comprendre pourquoi v4 abandonne le préprocesseur et quels navigateurs anciens (Safari < 16.4) excluent le passage à v4.

Anti-pattern : Empiler Sass devant Tailwind v4 « par habitude » : non supporté par la documentation officielle.
#styling#performance#tailwind4

Padding & Margin

Tailwind CSS 🟢 Junior

Classes p-* et m-* pour contrôler le padding et la marge. Variantes directionnelles (px, py, pt, pr, pb, pl) et valeurs négatives (-m-*).

Le padding c'est le rembourrage dans un colis, la marge c'est l'espace entre les colis sur l'étagère.

<div class="p-6 m-4">
  <div class="px-4 py-2 mt-2 -ml-1">
    Padding horizontal 1rem, vertical 0.5rem
  </div>
</div>

Cas d'usage : Contrôler l'espacement interne et externe de chaque élément dans le layout.

#styling#tailwind

Plugins

Tailwind CSS 🟡 Mid

Système d'extension de Tailwind. En v4, l'essentiel se fait en CSS : @utility pour un utilitaire, @custom-variant pour une variante, @theme pour les tokens. Les plugins JavaScript (typography, forms) se chargent en mode compatibilité avec @plugin.

Des extensions de navigateur : elles ajoutent des fonctionnalités sans modifier le coeur du logiciel.

@import "tailwindcss";

/* plugin JS hérité */
@plugin "@tailwindcss/typography";

/* équivalent CSS-first d'un mini-plugin */
@utility text-shadow {
  text-shadow: 2px 2px 4px rgb(0 0 0 / 0.1);
}

Cas d'usage : Ajouter des utilitaires manquantes ou intégrer un système de design custom dans Tailwind.

#styling#tailwind#tailwind4

Prefix

Tailwind CSS 🟡 Mid

Préfixe ajouté à toutes les classes Tailwind pour éviter les collisions avec du CSS existant. En v4 le préfixe se déclare à l'import et s'écrit comme une variante : tw:flex, tw:hover:bg-red-600 (et non plus tw-flex).

Mettre une étiquette sur tes affaires a l'école pour ne pas les confondre avec celles des autres.

@import "tailwindcss" prefix(tw);

/* HTML v4 : <div class="tw:flex tw:p-4 tw:hover:bg-blue-600"> */
/* HTML v3 : <div class="tw-flex tw-p-4"> */

Cas d'usage : Intégrer Tailwind dans un projet existant avec du CSS legacy sans conflits de noms.

#styling#tailwind#tailwind4

Purge / Content

Tailwind CSS 🟡 Mid

Mécanisme qui n'émet que les classes réellement utilisées. Renommé de purge à content dans Tailwind 3, il devient automatique en v4.0 : Tailwind scanne le projet seul, ignore .gitignore, node_modules et les binaires. La directive @source ajoute des chemins hors détection.

Le tri dans un dressing : tu gardes ce que tu portes, tu jettes le reste.

/* Tailwind 2 : purge: [...]  |  Tailwind 3 : content: [...] */
/* Tailwind 4 : détection automatique + @source */
@import "tailwindcss";
@source "../node_modules/@acme/ui-lib";
@source not "../src/legacy";

Cas d'usage : Réduire le CSS final de plusieurs Mo a quelques Ko en production.

Anti-pattern : Construire des noms de classes dynamiquement (bg-${color}-500) sans safelist.
#styling#interview#tailwind#tailwind4

Responsive Design (Tailwind)

Tailwind CSS 🟢 Junior

Stratégie mobile-first ou les styles de base ciblent le mobile, et les préfixes de breakpoint ajoutent des styles pour les écrans plus larges.

Construire un bâtiment du rez-de-chaussée vers le haut : chaque étage ajoute de l'espace.

<!-- Mobile: stack, Tablet: 2 cols, Desktop: 3 cols -->
<div class="flex flex-col sm:flex-row sm:flex-wrap">
  <div class="w-full sm:w-1/2 lg:w-1/3 p-2">
    Card
  </div>
</div>

Cas d'usage : Adapter automatiquement le layout a toutes les tailles d'écran sans média queries manuelles.

#styling#interview#tailwind

Responsive Prefixes

Tailwind CSS 🟢 Junior

Préfixes (sm, md, lg, xl, 2xl) qui appliquent une classe uniquement a partir d'un breakpoint donne. L'approche est mobile-first par défaut.

Des vêtements adaptatifs : un manteau que tu enfiles seulement quand il fait froid (a partir d'une certaine température).

<div class="grid grid-cols-1 sm:grid-cols-2
  md:grid-cols-3 lg:grid-cols-4">
  <!-- Responsive grid -->
</div>

Cas d'usage : Créer des layouts responsifs sans média queries manuelles, directement dans le markup.

Anti-pattern : Utiliser max-width au lieu de min-width (Tailwind est mobile-first, pas desktop-first).
#styling#interview#tailwind

Safelist

Tailwind CSS 🟡 Mid

Classes forcées dans le build même si elles n'apparaissent pas dans les sources. L'option safelist de tailwind.config.js n'existe plus en v4 ; on utilise @source inline(), qui accepte l'expansion d'accolades pour générer des plages.

Une liste VIP : ces invites entrent toujours, peu importe s'ils sont sur la liste principale.

@import "tailwindcss";

/* génère bg-red-50, bg-red-100 … bg-red-950 + hover: */
@source inline("{hover:,}bg-red-{50,{100..900..100},950}");

/* exclure des classes */
@source not inline("container");

Cas d'usage : Garantir que des classes construites dynamiquement (bg-${color}-500) sont presentes en production.

Anti-pattern : Mettre trop de classes en safelist au lieu de refactorer le code pour utiliser des classes complètes.
#styling#tailwind#tailwind4

shadcn/ui

Tailwind CSS 🟡 Mid

Collection de composants React copies dans le projet (pas un npm package). Base sur Radix UI + Tailwind, entièrement personnalisable car le code est dans ton repo.

Un livre de recettes ou tu photographies chaque recette : tu peux modifier les ingrédients a volonté.

// npx shadcn-ui@latest add button
import { Button } from '@/components/ui/button'

<Button variant="destructive" size="lg">
  Supprimer
</Button>

Cas d'usage : Bootstrapper une UI React avec des composants accessibles et personnalisables sans dépendance npm lourde.

#styling#interview#tailwind

Space (Spacing)

Tailwind CSS 🟢 Junior

Utilitaires space-x et space-y qui ajoutent un espacement entre les enfants d'un conteneur via des marges automatiques. Alternative a gap pour les anciens navigateurs.

Des separateurs automatiques entre les livres sur une étagère.

<div class="space-y-4">
  <p>Premier</p>
  <p>Deuxieme (margin-top: 1rem auto)</p>
  <p>Troisieme</p>
</div>

Cas d'usage : Espacer uniformément les enfants d'une liste verticale ou horizontale.

Anti-pattern : Utiliser space-* quand gap est disponible (gap est plus fiable avec flex/grid).
#styling#tailwind

State Variants (hover/focus/active)

Tailwind CSS 🟢 Junior

Préfixes conditionnels (hover:, focus:, active:, disabled:, etc.) qui appliquent un style uniquement dans un état spécifique de l'élément.

Comme un caméléon qui change de couleur selon la situation : touche, survole, presse.

<button class="bg-blue-500 hover:bg-blue-700
  focus:ring-2 focus:ring-blue-300
  active:scale-95 disabled:opacity-50">
  Action
</button>

Cas d'usage : Gérer les interactions utilisateur (survol, focus, clic) sans écrire de pseudo-selectors CSS.

#styling#interview#tailwind

Tailwind Merge (tw-merge)

Tailwind CSS 🟡 Mid

Librairie qui fusionne intelligemment les classes Tailwind en résolvant les conflits. p-4 + p-2 donne p-2 au lieu de garder les deux.

Un arbitre qui tranche quand deux règles se contredisent : la dernière gagne proprement.

import { twMerge } from 'tailwind-merge'

twMerge('px-4 py-2 bg-blue-500', 'px-6 bg-red-500')
// => 'py-2 px-6 bg-red-500'

Cas d'usage : Permettre l'override propre de styles dans des composants qui acceptent className en prop.

#styling#interview#tailwind

Tailwind Motion

Tailwind CSS 🟡 Mid

Plugin communautaire ajoutant des classes d'animation avancées a Tailwind (motion-safe, motion-reduce, et des presets d'animation plus riches).

Un pack d'effets spéciaux pour tes films : fondu, zoom, rotation, tout prêt a l'emploi.

<div class="motion-safe:animate-fadeIn
  motion-reduce:animate-none">
  Respecte les preferences d'accessibilite
</div>

Cas d'usage : Ajouter des animations respectant prefers-reduced-motion sans code CSS custom.

#styling#tailwind

tailwind.config.js

Tailwind CSS 🟡 Mid

Point de configuration de Tailwind. Depuis la v4.0 (22 janvier 2025), il se fait en CSS : un seul @import "tailwindcss" puis un bloc @theme pour les tokens. Le fichier tailwind.config.js n'est plus détecté automatiquement ; il se charge en mode compatibilité via @config.

Le tableau de bord de ta voiture : tu règles tout depuis un seul endroit.

/* app.css — Tailwind v4 */
@import "tailwindcss";

@theme {
  --color-brand: #ff6b35;
  --font-display: "Satoshi", sans-serif;
  --breakpoint-3xl: 120rem;
}

/* Compatibilité : ancien fichier JS */
/* @config "../../tailwind.config.js"; */

Cas d'usage : Personnaliser couleurs, polices et points de rupture pour coller à la charte, directement dans la feuille CSS principale.

Anti-pattern : Démarrer un projet v4 avec un tailwind.config.js hérité au lieu d'exprimer le thème en @theme.
#styling#interview#tailwind#tailwind4

Text Utilities

Tailwind CSS 🟢 Junior

Classes pour contrôler l'alignement (text-center), la couleur (text-gray-600), la décoration (underline), le truncate et le line-clamp du texte.

Les outils de mise en forme dans un éditeur : aligner, colorer, souligner, couper.

<p class="text-center text-gray-600 uppercase
  tracking-wide truncate">
  Texte tronque si trop long...
</p>
<p class="line-clamp-3">Limite a 3 lignes...</p>

Cas d'usage : Formater le texte (alignement, couleur, coupure) directement dans le markup.

#styling#tailwind

Theme Extend

Tailwind CSS 🟡 Mid

Ajout de valeurs au thème sans écraser les valeurs par défaut. En v3 : theme.extend dans le JS. En v4 : déclarer une variable dans @theme ajoute la valeur ; pour remplacer tout un espace de noms on écrit --color-*: initial avant ses propres couleurs.

Ajouter des pages a un dictionnaire sans arracher les existantes.

@import "tailwindcss";

@theme {
  /* ajoute sans écraser */
  --spacing-128: 32rem;
  --color-primary-500: #6366f1;
  --font-display: "Inter", sans-serif;
}

/* remplacer toute la palette : */
/* @theme { --color-*: initial; --color-white: #fff; } */

Cas d'usage : Ajouter des couleurs de marque, des tailles custom tout en conservant les utilitaires existants.

Anti-pattern : Réinitialiser un espace de noms entier (--color-*: initial) par réflexe, en perdant toute la palette par défaut.
#styling#interview#tailwind#tailwind4

Utility-First

Tailwind CSS 🟢 Junior

Approche ou le style est applique via des classes utilitaires atomiques directement dans le HTML. Chaque classe fait une seule chose (couleur, marge, taille).

Des briques LEGO : chaque pièce a une fonction unique, et tu construis ce que tu veux en les combinant.

<div class="flex items-center gap-4 p-6 bg-white rounded-lg shadow-md">
  <h2 class="text-xl font-bold text-gray-900">Titre</h2>
</div>

Cas d'usage : Prototyper rapidement des interfaces sans quitter le HTML ni gérer de fichiers CSS séparés.

Anti-pattern : Créer des classes sémantiques pour tout (.card-title) au lieu d'utiliser les utilitaires directement.
#styling#interview#tailwind

Width & Height

Tailwind CSS 🟢 Junior

Classes w-* et h-* pour définir la largeur et hauteur. Inclut les valeurs fractionnelles (w-1/2), min/max (min-w-0, max-h-screen) et spéciales (w-full, h-screen, h-dvh).

Comme régler la taille d'une fenêtre : largeur, hauteur, et des limites min/max.

<div class="w-full max-w-lg mx-auto h-screen">
  <img class="w-1/2 h-auto" />
  <div class="min-h-[50vh] size-16"></div>
</div>

Cas d'usage : Dimensionner des éléments de façon responsive avec des contraintes min/max.

#styling#tailwind