← Back to React Course | Chapter 11: Styling in React | Lesson 1 of 8

CSS Modules का उपयोग

CSS Modules ऐसे हैं जैसे हर component को styles के लिए उसकी अपनी private locker दे दी जाए, ताकि इसके class names किसी दूसरे component के locker से accidentally clash न करें।
Syntax
markup
/* Name.module.css */
.className { property: value; }

// Component.jsx
import styles from "./Name.module.css";

<div className={styles.className}>Content</div>

वह Problem जो CSS Modules Solve करते हैं

Regular CSS class names global होते हैं — एक file में '.card' नाम की class accidentally एक large app में कहीं और defined एक '.card' class को override कर सकती है या इससे override हो सकती है।

CSS Modules इसे solve करते हैं class names को automatically उस component तक locally scoped बना कर जो उस stylesheet को import करता है।

Note: यह problem app और team scale होने के साथ और बिगड़ती है — CSS Modules बड़े codebases में कई contributors के साथ खास तौर पर valuable हैं।
Warning: यह pure रूप से एक build-time naming trick है — यह CSS खुद कैसे काम करता है यह नहीं बदलता, सिर्फ class names कैसे generate और match होते हैं।

उदाहरण: The Problem CSS Modules Solve

markup
// Run in your local React project (npm install required)
/* Card.module.css */
.card { border: 1px solid #ccc; padding: 16px; }

// Card.jsx
import styles from './Card.module.css';
function Card() {
  return <div className={styles.card}>Content</div>;
}

कैसे Import एक Object बन जाता है

एक .module.css file import करना आपको raw CSS text नहीं देता — build tool इसे एक JavaScript object में transform करता है जहां हर key आपके original class names में से एक है, और हर value एक unique, generated class name है (जैसे card_a1b2c) जो app में किसी और चीज़ से collide नहीं करेगा।

Note: Development के दौरान imported styles object को console.log करें यह exactly देखने के लिए कि इसमें कौन से generated class names हैं।
Warning: styles.someClassName को reference करना किसी ऐसी class के लिए जो CSS file में मौजूद ही न हो undefined return करता है, silently कोई class apply न करते हुए।

उदाहरण: How the Import Becomes an Object

markup
// Run in your local React project (npm install required)
import styles from './Button.module.css';

function Button() {
  console.log(styles); // { button: "button_a3f9c" }
  return <button className={styles.button}>Click me</button>;
}

Multiple Classes Combine करना

जब एक component को एक साथ एक से ज़्यादा CSS Modules class चाहिए हो (जैसे एक base style plus एक conditional variant), आप generated class name strings को template literals या एक छोटे helper से combine करते हैं, क्योंकि JSX का className सिर्फ एक final string चाहता है।

Note: classnames या clsx जैसी libraries कई conditional classes combine करना manual string concatenation से ज़्यादा clean बना देती हैं।
Warning: एक plain '+' से class names concatenate करना template literal या space-joining के बजाय accidentally दो class names को एक invalid string में merge कर सकता है।

उदाहरण: Combining Multiple Classes

markup
// Run in your local React project (npm install required)
import styles from './Button.module.css';

function Button({ primary }) {
  const className = primary ? `${styles.button} ${styles.primary}` : styles.button;
  return <button className={className}>Click me</button>;
}
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. यह भूल जाना कि import syntax अलग है — आप CSS file को एक object के रूप में import करते हैं (import styles from './App.module.css'), एक side-effect import के रूप में नहीं।
  2. Generated styles.className property के बजाय regular string class names उपयोग करना।
  3. File को सिर्फ 'App.css' नाम देना instead of 'App.module.css' — '.module.css' suffix ही है जो ज़्यादातर build tools में CSS Modules processing trigger करता है।
चैप्टर सारांश
  • CSS Modules class names को उस component तक locally scope करते हैं जो उन्हें import करता है, global naming collisions से बचते हुए।
  • Component.module.css नाम की एक file build tool (Vite, webpack, आदि) द्वारा specially process होती है।
  • Imported styles एक JS object बन जाती हैं जो आपके original class names को generated, unique ones से map करती हैं।
  • यह एक build-tool feature है, runtime library नहीं — इस preview sandbox के लिए कोई CDN equivalent मौजूद नहीं है।
ब्राउज़र सपोर्ट

Build-tool feature (Vite/webpack/Create React App सभी इसे support करते हैं); कोई specific React version requirement नहीं।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.