Changer le thème

Tailwind v4 + Vite : modèle de configuration en 5 minutes et structure de dossiers

Easton editorial illustration: one project folder receiving a stack of utility-style tokens

L’année dernière, sur un nouveau projet, j’ai passé une demi-heure à peaufiner les chemins content dans tailwind.config.js. Je me demandais : est-ce que ça ne pourrait pas être plus simple ?

Cette année, Tailwind v4 y est presque arrivé.

Aujourd’hui, trois lignes de code suffisent pour faire tourner un projet Tailwind complet — sans config PostCSS, sans tailwind.config.js, sans lister à la main les fichiers à scanner. Quand j’ai vu ça la première fois, j’avoue que j’ai eu du mal à y croire.

Cet article vise à vous épargner cette demi-heure. Vous aurez un modèle complet et une structure de dossiers que j’utilise depuis six mois et qui tient plutôt bien la route.

1. Pourquoi Tailwind v4 + Vite ?

1.1 v4 est-il vraiment si rapide ?

L’équipe annonce un gain de vitesse de build d’un facteur 10. De mon côté, sur un projet moyen, on est passé de 8 secondes à moins d’une. Le moteur Oxide, écrit en Rust, y est pour beaucoup.

Ce qui me plaît encore plus, c’est la simplification de la config. Avant, un nouveau projet Tailwind impliquait trois ou quatre fichiers : tailwind.config.js, postcss.config.js, la config Vite et les directives @tailwind dans le CSS. Maintenant ? Un seul fichier à toucher.

1.2 La rapidité de Vite n’est pas du marketing

Le serveur de dev Vite démarre quasi instantanément. Le HMR est très réactif : on modifie du CSS, le rafraîchissement se fait sans latence perceptible. Une fois habitué, difficile de revenir en arrière.

1.3 v3 vs v4 : comparaison directe

Voici le tableau :

CritèreTailwind v3Tailwind v4
Installationnpm install -D tailwindcss postcss autoprefixernpm install tailwindcss @tailwindcss/vite
Fichiers de configtailwind.config.js requisInutile : config dans le CSS
Intégration ViteVia plugin PostCSSPlugin Vite officiel
Scan du contenucontent: ['./src/**/*.{html,js}'] à la mainScan automatique
ThèmeObjet JS : theme: { colors: {...} }Propriétés CSS : @theme { --color-*: ... }

L’idée centrale de v4 : déplacer la config du JS vers le CSS. Vous ajustez le thème au même endroit que vos styles, sans sauter entre fichiers.

2. Modèle de configuration en 5 minutes

On y va.

2.1 Initialisation du projet

Dans le terminal :

# Créer un projet Vite avec le template TypeScript
npm create vite@latest my-project -- --template vanilla-ts

# Entrer dans le dossier
cd my-project

# Installer les dépendances
npm install

Comptez environ 30 secondes.

2.2 Installer Tailwind v4

# Tailwind CSS et le plugin Vite officiel
npm install tailwindcss @tailwindcss/vite

Une seule commande. Pas de postcss ni autoprefixer : v4 les intègre.

2.3 Configurer Vite

Ouvrez vite.config.ts et adaptez ainsi :

// vite.config.ts
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  // Ajouter le plugin Tailwind
  plugins: [tailwindcss()],
})

Trois lignes. C’est tout.

2.4 Créer le fichier CSS

Sous src/styles/, créez main.css :

/* src/styles/main.css */

/* Importer Tailwind — une ligne pour les styles de base */
@import "tailwindcss";

/* Thème personnalisé (optionnel) */
@theme {
  --color-primary: #3b82f6;
  --color-secondary: #10b981;
}

Le bloc @theme est la nouvelle syntaxe v4 : couleurs, polices, espacements en variables CSS. Plus lisible qu’un tailwind.config.js.

2.5 Importer le CSS

En tête de src/main.ts :

// src/main.ts
import './styles/main.css'

// Votre code existant...

2.6 Tester

Dans index.html ou un composant :

<div class="bg-primary text-white p-4 rounded-lg">
  Tailwind v4 tourne !
</div>

Puis :

npm run dev

Une carte au fond bleu confirme que la config est bonne. Chronométré : oui, en moins de 5 minutes.

3. Structure de dossiers recommandée

Une fois le projet lancé, voici comment je range les fichiers :

3.1 Arborescence complète

my-project/
├── public/
│   └── favicon.ico
├── src/
│   ├── components/
│   │   ├── ui/              # Composants UI de base
│   │   │   ├── Button.ts
│   │   │   └── Input.ts
│   │   └── layout/           # Composants de mise en page
│   │       ├── Header.ts
│   │       └── Footer.ts
│   ├── styles/
│   │   ├── main.css         # Entrée principale (import Tailwind)
│   │   ├── components.css   # Styles liés aux composants
│   │   └── utilities.css    # Classes utilitaires custom
│   ├── utils/
│   │   └── helpers.ts
│   ├── pages/               # Pages (application multi-pages)
│   ├── assets/              # Ressources statiques
│   │   ├── images/
│   │   └── fonts/
│   ├── main.ts
│   └── vite-env.d.ts
├── index.html
├── package.json
├── tsconfig.json
└── vite.config.ts

3.2 Pourquoi cette organisation ?

components/ui/ : boutons, champs, modales — réutilisables, sans logique métier.

components/layout/ : Header, Footer, Sidebar — la structure de page, distincte des composants ui.

styles/ : tout le CSS au même endroit. Avec v4, la config vit dans le CSS ; centraliser simplifie les changements.

utils/ : fonctions pures (dates, chaînes, etc.).

3.3 Organisation des fichiers CSS

/* src/styles/main.css — fichier d'entrée */

/* Importer Tailwind */
@import "tailwindcss";

/* Autres feuilles */
@import "./components.css";
@import "./utilities.css";

/* Styles de base globaux */
@layer base {
  body {
    @apply bg-gray-50 text-gray-900;
  }

  /* Liens par défaut */
  a {
    @apply text-primary hover:underline;
  }
}

@layer base définit la couche la plus basse ; Tailwind gère mieux les priorités qu’un body { ... } brut.

4. Checklist de migration v3

Pour upgrader un projet v3, suivez cette liste. J’ai migré plusieurs dépôts récemment ; les pièges ci-dessous viennent de là.

4.1 Fichiers de configuration

  • Supprimer tailwind.config.js (s’il ne servait qu’à Tailwind)
  • Supprimer postcss.config.js (s’il ne servait qu’à Tailwind)
  • Ajouter @import "tailwindcss" dans le CSS
  • Mettre à jour vite.config.ts avec le plugin @tailwindcss/vite

4.2 Dépendances

# Désinstaller les anciennes dépendances
npm uninstall postcss autoprefixer tailwindcss

# Installer les nouvelles
npm install tailwindcss @tailwindcss/vite
  • Lancer la désinstallation
  • Lancer l’installation
  • Vérifier les versions dans package.json

4.3 Styles

  • Remplacer @tailwind base; @tailwind components; @tailwind utilities; par @import "tailwindcss";
  • Migrer le thème de tailwind.config.js vers un bloc @theme en CSS
  • Vérifier que les utilitaires custom fonctionnent encore

Exemple de migration du thème :

/* v3 — tailwind.config.js */
module.exports = {
  theme: {
    colors: {
      primary: '#3b82f6',
    }
  }
}

/* v4 — main.css */
@theme {
  --color-primary: #3b82f6;
}

4.4 Tests

  • npm run dev — l’environnement de dev démarre
  • npm run build — le build de prod réussit
  • Ouvrir la page — les styles sont présents
  • Modifier un CSS — le hot reload réagit

5. Problèmes fréquents et solutions

Voici ce que je rencontre le plus souvent à la config ou à la migration.

5.1 Les styles ne s’appliquent pas

Vous mettez class="bg-primary", la page reste blanche.

Étapes de débogage :

  1. Outils développeur : le CSS se charge-t-il ?
  2. main.ts importe-t-il bien le fichier CSS ?
  3. Le plugin dans vite.config.ts est-il correct ?

J’ai déjà oublié import './styles/main.css' dans main.ts. Erreur bête, mais fréquente.

5.2 Le hot reload ne réagit pas

Vous changez le CSS, rien ne bouge.

Étapes de débogage :

  1. Vite >= 5.0 (les vieilles versions posent problème)
  2. Redémarrer le serveur de dev
  3. Vider le cache ou tester en navigation privée

Sinon, regarder la console : parfois un autre plugin entre en conflit.

5.3 CSS trop volumineux en production

Le build sort un fichier CSS de plusieurs centaines de Ko.

Étapes de débogage :

  1. Confirmer une version v4 récente (meilleur tree-shaking)
  2. Vérifier qu’on n’importe pas toute une lib d’icônes ou une grosse dépendance
  3. Utiliser @layer pour structurer — Tailwind gère mieux priorité et déduplication

En pratique, la sortie v4 est déjà assez légère. Si c’est énorme, c’est souvent du CSS custom en trop.

Résumé

En bref :

  1. Installation : npm install tailwindcss @tailwindcss/vite
  2. Vite : ajouter le plugin tailwindcss()
  3. CSS : @import "tailwindcss" + @theme pour le thème
  4. Lancer : npm run dev

Le grand changement v4 : la config quitte le JS pour le CSS. Au début c’est un peu déroutant ; après quelques semaines, c’est plus direct — on ajuste le thème là où on écrit les styles.

En migration v3, traduisez le thème de tailwind.config.js en syntaxe @theme. Ça prend un moment, mais vous gagnez des builds plus rapides et une arborescence plus simple. Le calcul vaut le coup.

Configurer un projet Tailwind v4 + Vite

Intégrer Tailwind CSS v4 et Vite en 5 minutes

⏱️ Estimated time: 5 min

  1. 1

    Step 1: Créer le projet et installer les dépendances

    Exécutez les commandes suivantes :

    ```bash
    npm create vite@latest my-project -- --template vanilla-ts
    cd my-project
    npm install
    npm install tailwindcss @tailwindcss/vite
    ```

    Pas besoin d'installer postcss ni autoprefixer : v4 les intègre déjà.
  2. 2

    Step 2: Configurer le plugin Vite

    Modifiez `vite.config.ts` :

    ```typescript
    import { defineConfig } from 'vite'
    import tailwindcss from '@tailwindcss/vite'

    export default defineConfig({
    plugins: [tailwindcss()],
    })
    ```

    Trois lignes suffisent, sans autre fichier de configuration.
  3. 3

    Step 3: Créer le fichier CSS d'entrée

    Créez `src/styles/main.css` :

    ```css
    @import "tailwindcss";

    @theme {
    --color-primary: #3b82f6;
    }
    ```

    Le bloc `@theme` sert à personnaliser le thème avec la syntaxe des variables CSS.
  4. 4

    Step 4: Importer le CSS et vérifier

    En tête de `src/main.ts`, ajoutez :

    ```typescript
    import './styles/main.css'
    ```

    Lancez `npm run dev` et testez des classes Tailwind sur la page pour confirmer que tout fonctionne.
  5. 5

    Step 5: Migration depuis v3 (optionnel)

    Depuis v3, il faut :

    • Supprimer `tailwind.config.js` et `postcss.config.js`
    • Remplacer les directives `@tailwind` par `@import "tailwindcss"`
    • Migrer la config thème JS vers un bloc CSS `@theme`
    • Mettre à jour les dépendances : désinstaller les anciens paquets, installer v4

FAQ

Quelle est la différence majeure entre Tailwind v4 et v3 ?
v4 déplace la configuration des fichiers JS vers le CSS, avec la syntaxe `@theme` pour le thème. Plus besoin de `tailwind.config.js` ni de config PostCSS dédiée, et la vitesse de build est multipliée par 10.
Faut-il encore PostCSS en v4 ?
Pas d'installation séparée. Le plugin Vite officiel `@tailwindcss/vite` intègre déjà PostCSS : deux paquets suffisent, `tailwindcss` et `@tailwindcss/vite`.
Comment migrer la config thème de v3 ?
Convertissez l'objet theme de `tailwind.config.js` en variables CSS :

```css
@theme {
--color-primary: #3b82f6;
--color-secondary: #10b981;
}
```

Couleurs, polices, espacements, etc. suivent cette syntaxe.
Les styles ne s'appliquent pas — comment déboguer ?
Vérifiez dans l'ordre : 1) le CSS est-il importé dans le point d'entrée ; 2) le plugin dans `vite.config.ts` est-il correct ; 3) dans les outils développeur, le CSS se charge-t-il. Cause fréquente : oubli de l'`import`.
Quelles versions de Vite sont supportées en v4 ?
Privilégiez Vite 5.0 ou plus récent. Les versions anciennes peuvent poser des soucis de compatibilité au hot reload. En cas de problème après mise à jour, redémarrez le serveur de dev ou videz le cache du navigateur.

6 min de lecture · Publié le: 25 mars 2026 · Mis à jour le: 27 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog