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
/* 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);
}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__9mL4pMise en œuvre
- Installer les dépendances nécessaires : css-loader pour Webpack ou configuration native pour Next.js/Vite
- Créer des fichiers CSS avec l'extension .module.css ou .module.scss pour activation automatique
- Importer les styles comme objet JavaScript : import styles from './Component.module.css'
- Appliquer les classes via styles.className pour bénéficier du scope local
- Configurer TypeScript avec typed-css-modules pour générer des définitions de types
- 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.
