image de chargement
Retour au glossaire

CSS Modules

Système de scope local automatique pour CSS permettant d'éviter les conflits de noms en générant des classes uniques par composant.

Mis à jour le 22 janvier 2026

CSS Modules est une approche de stylisation qui résout le problème du scope global en CSS en transformant automatiquement les noms de classes en identifiants uniques. Cette technique garantit l'isolation des styles par composant, éliminant les conflits de nommage et facilitant la maintenance des applications complexes. Largement adopté dans l'écosystème React, Next.js et Vue.js, CSS Modules combine les avantages du CSS traditionnel avec la modularité du développement moderne.

Fondements

  • Génération automatique de noms de classes uniques via hachage cryptographique
  • Scope local par défaut avec possibilité de déclarations globales explicites
  • Composition de styles permettant la réutilisation via @value et composes
  • Intégration native dans les bundlers modernes (Webpack, Vite, Turbopack)

Avantages

  • Élimination complète des conflits de noms de classes entre composants
  • Type safety optionnel via génération de définitions TypeScript
  • Optimisation automatique du CSS avec tree-shaking des styles non utilisés
  • Maintenabilité accrue grâce à la colocalisation des styles avec les composants
  • Performance optimale sans runtime JavaScript contrairement au CSS-in-JS

Exemple concret

Button.module.css
/* Styles locaux par défaut */
.button {
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
  font-weight: 600;
  transition: all 0.2s;
}

.primary {
  composes: button;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
}

.secondary {
  composes: button;
  background: transparent;
  border: 2px solid #667eea;
  color: #667eea;
}

/* Déclaration globale explicite */
:global(.theme-dark) .button {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
Button.tsx
import React from 'react';
import styles from './Button.module.css';

interface ButtonProps {
  variant?: 'primary' | 'secondary';
  children: React.ReactNode;
  onClick?: () => void;
}

export const Button: React.FC<ButtonProps> = ({ 
  variant = 'primary', 
  children,
  onClick 
}) => {
  return (
    <button 
      className={styles[variant]}
      onClick={onClick}
    >
      {children}
    </button>
  );
};

// Classes générées : Button_primary__xJ8k2, Button_secondary__9mL4p

Mise en œuvre

  1. Installer les dépendances nécessaires : css-loader pour Webpack ou configuration native pour Next.js/Vite
  2. Créer des fichiers CSS avec l'extension .module.css ou .module.scss pour activation automatique
  3. Importer les styles comme objet JavaScript : import styles from './Component.module.css'
  4. Appliquer les classes via styles.className pour bénéficier du scope local
  5. Configurer TypeScript avec typed-css-modules pour générer des définitions de types
  6. Utiliser :global() pour les rares cas nécessitant un scope global explicite

Optimisation avancée

Combinez CSS Modules avec des variables CSS custom properties pour créer un système de design tokens maintenable. Utilisez @value pour partager des constantes entre fichiers modules, et activez cssModules.localsConvention: 'camelCase' pour un accès TypeScript-friendly (styles.primaryButton au lieu de styles['primary-button']).

Outils associés

  • PostCSS : traitement avancé avec plugins pour autoprefixer et optimisations
  • typed-css-modules : génération automatique de définitions TypeScript
  • clsx / classnames : bibliothèques pour composition conditionnelle de classes
  • CSS Modules Values : extension pour variables partagées entre modules
  • Webpack css-loader : loader de référence avec options de configuration étendues
  • Vite : support natif sans configuration pour CSS/SCSS Modules

CSS Modules représente une solution mature et performante pour l'architecture CSS dans les applications modernes. En offrant l'isolation par défaut sans sacrifier les performances ni la familiarité du CSS standard, cette approche réduit significativement les bugs liés au styling tout en améliorant la vélocité des équipes. Pour les entreprises cherchant un équilibre entre modernité et pragmatisme, CSS Modules constitue un choix stratégique pérenne, compatible avec tous les frameworks majeurs et bénéficiant d'un écosystème d'outils robuste.

L'argentestdéjàsurlatable.

En 1 heure, découvrez exactement combien vous perdez et comment le récupérer.

Agence de développement web, automatisation & IA

contact@peaklab.fr
Newsletter

Recevez nos conseils tech et business directement dans votre boîte mail.

Suivez-nous