Conseils et astuces Tailwind CSS pour un développement UI plus rapide
Des techniques pratiques pour tirer le meilleur parti de Tailwind CSS — des patterns de design responsive au mode sombre, en passant par les thèmes personnalisés et l'extraction de composants.
Tailwind CSS a fondamentalement changé la façon dont les développeurs écrivent leurs styles. Plutôt que de jongler entre des fichiers HTML et CSS en inventant des noms de classes, vous composez des classes utilitaires directement dans votre balisage. Le résultat : une itération plus rapide, zéro CSS mort en production et des systèmes de design cohérents — à condition de connaître les bonnes pratiques.
L'état d'esprit utility-first
Avant de plonger dans les conseils, comprenez la philosophie fondamentale : chaque classe fait une seule chose. Au lieu de :
.card {
background-color: white;
border-radius: 8px;
padding: 16px 24px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
Vous écrivez :
<div class="bg-white rounded-lg px-6 py-4 shadow-sm">
Les styles vivent aux côtés de la structure. Plus de changement de contexte, plus de débats sans fin sur les noms de classes.
Design responsive : les breakpoints mobile-first
Tailwind adopte une approche mobile-first. Les classes sans préfixe s'appliquent à toutes les tailles d'écran ; les classes préfixées prennent effet à partir du breakpoint indiqué :
<!-- Pleine largeur sur mobile, moitié sur medium, un tiers sur large -->
<div class="w-full md:w-1/2 lg:w-1/3">
<!-- Empilement vertical sur mobile, horizontal sur medium+ -->
<div class="flex flex-col md:flex-row gap-4">
<!-- Masqué sur mobile, visible sur large+ -->
<aside class="hidden lg:block">
Breakpoints par défaut :
| Préfixe | Largeur min. |
|---|---|
sm: |
640px |
md: |
768px |
lg: |
1024px |
xl: |
1280px |
2xl: |
1536px |
Mode sombre
Activez le mode sombre dans tailwind.config.ts :
export default {
darkMode: "class", // ou "media"
// ...
}
Avec le mode "class", ajoutez la classe dark à <html> lorsque l'utilisateur active le mode sombre. Avec "media", il suit automatiquement les préférences du système d'exploitation.
<div class="bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100">
<h1 class="text-2xl font-bold">Hello World</h1>
<p class="text-gray-600 dark:text-gray-400">Texte secondaire</p>
</div>
Extraction de composants avec @apply
Lorsqu'un pattern se répète, extrayez-le — mais avec parcimonie :
/* globals.css */
@layer components {
.btn-primary {
@apply inline-flex items-center px-4 py-2 rounded-md
bg-blue-600 text-white font-medium text-sm
hover:bg-blue-700 focus:outline-none focus:ring-2
focus:ring-blue-500 focus:ring-offset-2
transition-colors duration-150;
}
}
Utilisez
@applyuniquement pour les composants UI que vous réutilisez dans de nombreux endroits. Pour les styles ponctuels, conservez simplement les classes utilitaires en ligne. Un usage excessif d'@applyrecrée les problèmes que Tailwind a été conçu pour résoudre.
Tokens de design personnalisés
Définissez votre système de design dans tailwind.config.ts :
export default {
theme: {
extend: {
colors: {
brand: {
50: "#eff6ff",
500: "#3b82f6",
900: "#1e3a8a",
},
},
fontFamily: {
sans: ["Inter", "system-ui", "sans-serif"],
mono: ["JetBrains Mono", "monospace"],
},
spacing: {
18: "4.5rem",
88: "22rem",
},
borderRadius: {
"4xl": "2rem",
},
},
},
}
Vous pouvez maintenant utiliser text-brand-500, font-mono, mt-18, etc. — avec un support IntelliSense complet dans VS Code.
Convertir du CSS existant en Tailwind
Vous migrez une base de code ancienne ? Utilisez notre convertisseur Tailwind pour coller du CSS et obtenir instantanément les classes utilitaires Tailwind équivalentes.
/* CSS source */
.hero {
display: flex;
align-items: center;
justify-content: space-between;
padding: 2rem 4rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 1rem;
}
→ flex items-center justify-between px-16 py-8 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl
Valeurs arbitraires
Besoin d'une valeur absente de l'échelle par défaut ? Utilisez les crochets :
<!-- Valeur en pixels exacte -->
<div class="w-[327px] mt-[13px]">
<!-- Couleur arbitraire -->
<div class="bg-[#1a2332] text-[#e8f4f8]">
<!-- Variable CSS personnalisée -->
<div class="text-[var(--brand-color)]">
<!-- Grille complexe -->
<div class="grid grid-cols-[1fr_2fr_1fr]">
Utilisez-les avec parcimonie — si vous utilisez la même valeur arbitraire à plusieurs endroits, ajoutez-la à votre configuration.
Variantes d'état
Tailwind embarque toutes les variantes d'état dont vous aurez besoin :
<!-- Hover, focus, active -->
<button class="bg-blue-600 hover:bg-blue-700 active:bg-blue-800 focus:ring-2">
<!-- États de formulaire -->
<input class="border-gray-300 focus:border-blue-500 disabled:opacity-50 disabled:cursor-not-allowed">
<!-- Group hover (le parent contrôle l'enfant) -->
<div class="group">
<h3 class="text-gray-900 group-hover:text-blue-600">Titre</h3>
<p class="hidden group-hover:block">Masqué jusqu'au survol du parent</p>
</div>
<!-- Peer (état d'un élément frère) -->
<input type="checkbox" class="peer">
<label class="hidden peer-checked:block">Coché !</label>
Performance : suppression des styles inutilisés
Le compilateur JIT (Just-In-Time) de Tailwind analyse vos fichiers de templates et génère uniquement les classes CSS que vous utilisez réellement. Le bundle de production représente généralement 5 à 15 Ko de CSS.
Assurez-vous que les chemins content dans tailwind.config.ts couvrent tous vos fichiers de templates :
export default {
content: [
"./app/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx}",
"./content/**/*.mdx",
],
// ...
}
Si vous construisez des noms de classes dynamiquement (ex. : `bg-${color}-500`), Tailwind ne peut pas les détecter. Utilisez une safelist ou des chaînes de classes complètes à la place :
// ❌ Dynamique — Tailwind ne peut pas détecter "bg-red-500"
const cls = `bg-${color}-500`;
// ✅ Chaînes de classes complètes — détectables
const colorMap = { red: "bg-red-500", blue: "bg-blue-500" };
Plugin Typography
Le plugin @tailwindcss/typography ajoute une classe prose qui met en forme n'importe quel contenu HTML de façon élégante — idéal pour les articles de blog, la documentation et le rendu markdown :
<article class="prose prose-lg dark:prose-invert max-w-none">
<!-- Votre HTML rendu depuis markdown ici -->
</article>
Il gère les titres, les listes, les citations, les blocs de code, les tableaux et bien plus encore avec des valeurs par défaut pertinentes.
Liste des gains rapides
- Utilisez
gap-*sur les conteneurs flex/grid plutôt que des marges sur les enfants space-x-*etspace-y-*pour ajouter des espacements entre éléments frèresdivide-*pour les bordures entre enfants sans balisage supplémentairering-*pour les anneaux de focus (préférable àoutline-*pour les styles personnalisés)truncatepour le débordement sur une ligne avec ellipseline-clamp-3pour le clamping multi-lignes (nécessite le plugin typography)sr-onlypour masquer visuellement les labels d'accessibilité
Tailwind récompense l'investissement. Plus vous maîtrisez le vocabulaire des classes utilitaires, plus vite vous livrerez des interfaces soignées et cohérentes.