Débuter avec Tailwind CSS : le tuto pas à pas pour styliser sans galérer
Tutoriel Tailwind CSS pour débuter de zéro : installation, premières classes, un bouton, une carte produit et le responsive sans media query. Avec exemples de code.
Tu veux styliser tes pages sans jongler entre dix fichiers CSS ? Tailwind CSS fait exactement ça : tu écris tes styles directement dans ton HTML, avec des petites classes utilitaires. Pas de nommage à inventer, pas de fichier qui gonfle. Ce tuto part de zéro : installation, premières classes, puis un vrai composant complet. À la fin, tu sauras construire une carte propre sans écrire une seule ligne de CSS classique.
C'est quoi Tailwind, concrètement
En CSS classique, tu écris une classe comme card.css, tu lui donnes un nom (card), puis tu définis ses règles ailleurs. Deux fichiers, deux endroits, et un nom à trouver.
Avec Tailwind, tu ne nommes rien. Tu appliques des classes qui font une seule chose chacune : p-4 met du padding, text-lg agrandit le texte, bg-blue-500 met un fond bleu. Tu composes ton style comme des Lego.
comparaison.html
1
-
/* CSS classique : 2 fichiers */
1
+
<!-- Tailwind : 1 seul endroit -->
2
2
3
-
/* styles.css */
4
-
.card {
5
-
padding: 1rem;
6
-
background: white;
7
-
border-radius: 0.5rem;
8
-
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
9
-
}
10
-
11
-
/* index.html */
12
-
<div class="card">Contenu</div>
3
+
<div class="p-4 bg-white rounded-lg shadow">
4
+
Contenu
5
+
</div>
AvantAprès
+4-11
1
/* CSS classique : 2 fichiers */
2
3
/* styles.css */
4
.card {
5
padding: 1rem;
6
background: white;
7
border-radius: 0.5rem;
8
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
9
}
10
11
/* index.html */
12
<div class="card">Contenu</div>
1
<!-- Tailwind : 1 seul endroit -->
2
3
<div class="p-4 bg-white rounded-lg shadow">
4
Contenu
5
</div>
“”
Tailwind ne remplace pas le CSS, il te fait juste écrire moins et réfléchir moins au nommage. Tu passes de "comment j'appelle cette classe" à "quel style je veux".
Étape 1 : installer Tailwind
On part du principe que tu as déjà un projet avec Node.js. Si tu utilises Vite (le plus simple pour débuter), voici les commandes. Lance-les une par une :
$ pnpm add tailwindcss @tailwindcss/vite
Cette commande installe Tailwind et son plugin Vite. La version 4 de Tailwind a simplifié l'installation : plus besoin de fichier de config compliqué pour démarrer.
En coursEn cours
Ensuite, ajoute le plugin à ta config Vite :
vite.config.jsJavaScript
import { defineConfig } from 'vite'import tailwindcss from '@tailwindcss/vite'export default defineConfig({ plugins: [ tailwindcss(), ],})
Enfin, importe Tailwind dans ton fichier CSS principal. Une seule ligne suffit :
src/style.cssCSS
@import "tailwindcss";
Lance ton serveur de dev et c'est bon, Tailwind est actif :
$ pnpm dev
Étape 2 : tes premières classes
Maintenant le fun commence. Voici les familles de classes que tu utiliseras tout le temps. Chaque classe suit une logique simple.
L'espacement
p-4 : padding sur tous les côtés (le 4 = 1rem = 16px)
px-4 : padding gauche + droite (x = horizontal)
py-2 : padding haut + bas (y = vertical)
m-4 : margin, même logique
mt-8 : margin uniquement en haut (t = top)
L'échelle est fixe : 1 = 4px, 2 = 8px, 4 = 16px, 8 = 32px. Tu t'y habitues vite.
Le texte
text-sm, text-lg, text-2xl : la taille
font-bold, font-medium : le gras
text-gray-700, text-blue-500 : la couleur
text-center : l'alignement
Les fonds et bordures
bg-white, bg-blue-500 : couleur de fond
rounded, rounded-lg, rounded-full : arrondis
border, border-2 : bordure
shadow, shadow-lg : ombre portée
Petite note sur les couleurs : le nombre (100 à 900) indique l'intensité. blue-100 est très clair, blue-900 très foncé. blue-500 est le bleu "moyen", celui que tu utiliseras le plus souvent.
Étape 3 : construire un bouton
Assez de théorie. On construit un bouton propre, étape par étape. Voici la version de base :
Le préfixe hover: applique la classe uniquement au survol. Ici, le fond passe de blue-500 à blue-600 (légèrement plus foncé) quand la souris passe dessus. Le transition rend le changement fluide au lieu de brutal.
“”
Les préfixes d'état (hover:, focus:, active:) sont ce qui rend Tailwind vraiment agréable. Tu n'as jamais à quitter ton HTML pour gérer un survol.
Étape 4 : une carte complète
On assemble tout dans une vraie carte produit. C'est l'exemple typique que tu recroiseras partout. Prends le temps de lire chaque classe :
carte-produit.htmlHTML
<div class="max-w-sm bg-white rounded-lg shadow-lg overflow-hidden"> <img class="w-full h-48 object-cover" src="/produit.jpg" alt="Produit"> <div class="p-4"> <h3 class="text-lg font-bold text-gray-800"> Nom du produit </h3> <p class="text-sm text-gray-600 mt-1"> Une courte description qui donne envie. </p> <div class="flex items-center justify-between mt-4"> <span class="text-xl font-bold text-blue-600">29€</span> <button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded transition"> Acheter </button> </div> </div></div>
Deux nouvelles notions clés apparaissent ici :
Flexbox en une classe
flex active flexbox. items-center centre verticalement, justify-between pousse le prix à gauche et le bouton à droite. Trois classes remplacent une dizaine de lignes de CSS.
Contraintes de taille
max-w-sm limite la largeur de la carte. w-full fait prendre toute la largeur à l'image. object-cover évite que l'image se déforme.
Étape 5 : le responsive, sans media queries
Voici le point qui change tout quand tu viens du CSS classique. En CSS, pour le responsive tu écris des media queries. Avec Tailwind, tu ajoutes juste un préfixe de taille d'écran devant ta classe.
Les préfixes :
sm: → à partir de 640px
md: → à partir de 768px
lg: → à partir de 1024px
xl: → à partir de 1280px
Exemple : un texte petit sur mobile, grand sur desktop :
titre.htmlHTML
<h1 class="text-2xl md:text-4xl lg:text-6xl font-bold"> Titre responsive</h1>
Lecture : le texte fait text-2xl par défaut (mobile), passe à text-4xl à partir de 768px, et text-6xl au-delà de 1024px. Le principe est mobile-first : la classe sans préfixe s'applique au mobile, les préfixes ajoutent les tailles supérieures.
Un cas très courant : une grille qui passe de 1 colonne (mobile) à 3 colonnes (desktop) :
Tu ne quittes jamais ton HTML. Tout le responsive tient dans la ligne de classes. C'est déroutant au début, puis tu ne peux plus t'en passer.
Le piège à éviter : les classes dynamiques
Une erreur classique quand tu débutes avec un framework JS : construire un nom de classe à la volée. Tailwind ne verra pas ces classes et ne les générera pas. Regarde :
classes-dynamiques.jsx
1
-
// ❌ Tailwind ne détecte PAS cette classe
2
-
const color = "blue";
1
+
// ✅ écris la classe complète
2
+
const styles = {
3
+
blue: "bg-blue-500",
4
+
red: "bg-red-500",
5
+
};
3
6
4
-
function Button() {
7
+
function Button({ color }) {
5
8
return (
6
-
<button className={`bg-${color}-500`}>
9
+
<button className={styles[color]}>
7
10
Bouton
8
11
</button>
9
12
);
10
-
}
11
-
// Résultat : aucun style appliqué
13
+
}
AvantAprès
+8-6
1
// ❌ Tailwind ne détecte PAS cette classe
2
const color = "blue";
3
4
function Button() {
5
return (
6
<button className={`bg-${color}-500`}>
7
Bouton
8
</button>
9
);
10
}
11
// Résultat : aucun style appliqué
1
// ✅ écris la classe complète
2
const styles = {
3
blue: "bg-blue-500",
4
red: "bg-red-500",
5
};
6
7
function Button({ color }) {
8
return (
9
<button className={styles[color]}>
10
Bouton
11
</button>
12
);
13
}
Pourquoi ? Tailwind scanne ton code au build pour ne générer que les classes réellement utilisées. Il cherche des chaînes complètes. bg-blue-500 écrit en entier est trouvé ; bg-${color}-500 ne l'est jamais. Écris toujours tes classes en toutes lettres.
Ce que Tailwind ne fait pas
Pour être honnête, Tailwind n'est pas magique et n'est pas toujours le bon choix :
Ton HTML devient verbeux. Une carte peut avoir 15 classes sur une ligne. Ça se lit moins bien qu'un joli nom de classe unique.
Pour des animations complexes, tu reviendras souvent au CSS classique.
Sur un très petit projet (une page statique simple), l'install peut être du sur-équipement.
La règle : Tailwind brille sur des projets avec beaucoup de composants répétés (e-commerce, dashboard, app). Pour une landing page de trois blocs, du CSS simple suffit.
Récapitulatif
Tu sais maintenant l'essentiel :
Installer Tailwind avec Vite en trois commandes
Utiliser les classes d'espacement, texte, fond et bordure
Ajouter des états avec hover: et une transition
Composer une carte complète avec flex et grid
Gérer le responsive avec md: et lg:, sans media query
Éviter le piège des classes construites dynamiquement
La meilleure façon de progresser : ouvre la doc officielle à côté, et reconstruis un composant que tu connais déjà. En une après-midi, les classes rentrent dans les doigts.