CSS Modules

Subject: React

CSS Modules in React β€” Full Explanation

πŸ” What Are CSS Modules?

CSS Modules let you write regular CSS, but the styles are scoped locally to the component they’re used in. This means:

  • βœ… Class names are automatically made unique
  • βœ… Styles don’t leak or conflict with other components

πŸ‘‰ Think of CSS Modules as private styling for each component.

🎯 Why Use CSS Modules?

Global CSS ProblemCSS Modules Fix
Class name collisionsAutomatically generates unique class names
Global styles override othersStyles stay local to the component
Hard to manage in big appsStyles live near components

πŸ“¦ File Naming Convention

The .module.css extension tells React to treat it as a CSS Module.


βœ… Step-by-Step Example

πŸ”Ή Step 1: Create Component and CSS Module

πŸ”§ File: Button.module.css

πŸ”§ File: Button.jsx

πŸ” What Happens Internally?

React compiles your class name into something like:

βœ… So no two components will ever accidentally share the same styles.


πŸ” Dynamic Class Names

Combine multiple classes:

Or use the classnames package:


🧠 Key Benefits of CSS Modules

BenefitDescription
Local scopingClass names are unique to the file/component
Easy maintenanceNo accidental overrides from other components
Tool-friendlyWorks with CSS preprocessors like .scss
CRA/Vite supportBuilt-in support in most React setups

⚠️ Notes & Best Practices

βœ… Use camelCase or hyphen-case in .module.css files
❌ Don’t use global selectors like body, *, html inside modules
πŸ“ Keep CSS files close to the component they style


πŸ§ͺ Final Real-World Example

πŸ”§ Card.module.css

πŸ”§ Card.jsx


πŸ“Œ Summary Table

FeatureDescription
.module.cssFile naming convention for CSS Modules
import styles fromImports styles as a scoped object
styles.classNameUse like styles.btn to apply the class
Prevents conflictsAll class names are unique and scoped automatically
Component-based appsKeeps styles organized and reusable per component