CSS Architecture: BEM
In this page:
.block { }
.block__element { }
.block--modifier { }
BEM क्या है?
BEM (Block, Element, Modifier) CSS classes के लिए एक naming convention है जो relationship समझने के लिए HTML या CSS check करने की ज़रूरत के बिना सिर्फ इसके class names पढ़कर किसी component की structure और variations को साफ़ बना देती है।
उदाहरण: What Is BEM?
<style>
.cc-card {
border: 1px solid #ccc;
}
</style>
<div class="cc-card">Obvious structure just from the class name</div>
Blocks
एक Block एक standalone, reusable component है, जैसे कोई card, navbar, या button, एक single साफ़ class से नाम दिया गया जो पूरे component को represent करती है।
उदाहरण: Blocks
<style>
.cc-card {
background: #f7f7f7;
border: 1px solid #ddd;
padding: 16px;
}
</style>
<div class="cc-card">A standalone, reusable component</div>
Elements
एक Element एक ऐसा हिस्सा है जो सिर्फ अपने block के अंदर मतलब रखता है, block name और element name को जोड़ने वाले एक double underscore से नाम दिया गया, जैसे block__element।
उदाहरण: Elements
<style>
.cc-card {
background: #f7f7f7;
border: 1px solid #ddd;
padding: 16px;
}
.cc-card__title {
font-weight: bold;
}
</style>
<div class="cc-card">
<h3 class="cc-card__title">Only makes sense inside cc-card</h3>
</div>
Modifiers
एक Modifier किसी block या element का एक variation represent करता है, एक double hyphen से नाम दिया गया, जैसे block--modifier या block__element--modifier, और हमेशा base class के साथ इस्तेमाल होता है, कभी अकेले नहीं।
उदाहरण: Modifiers
<style>
.cc-card {
background: #f7f7f7;
border: 3px solid #ccc;
padding: 16px;
}
.cc-card--featured {
border-color: gold;
}
</style>
<div class="cc-card cc-card--featured">Base class plus a modifier</div>
Practice में BEM
असली projects में, BEM के flat, explicit class names गहरी CSS selector nesting की ज़रूरत को replace कर देते हैं, जो हर rule की specificity को कम, consistent, और ज़रूरत पड़ने पर override करना आसान रखता है।
उदाहरण: BEM in Practice
<style>
.cc-card {
background: #f7f7f7;
border: 1px solid #ddd;
padding: 16px;
}
.cc-card__title {
font-size: 18px;
}
</style>
<div class="cc-card">
<div class="cc-card__title">Flat class instead of .card .header .title</div>
</div>
- class name में elements के अंदर elements को nest करना, जैसे block__element__subelement, जबकि BEM जानबूझकर element names को flat रखता है।
- उसी element पर base block या element class की मौजूदगी के बिना अकेले एक modifier class इस्तेमाल करना।
- BEM के flat class names के बजाय गहरी CSS selector nesting की तरफ़ जाना, जो चुपचाप उन specificity समस्याओं को वापस ले आता है जिनसे BEM बचता है।
- BEM का मतलब है Block, Element, Modifier, साफ़, collision-free CSS class names लिखने के लिए एक naming convention।
- एक Block एक standalone component है, एक Element उस block का एक हिस्सा है, और एक Modifier इनमें से किसी का एक variation है।
- block__element--modifier pattern class names को गहरी nesting के बिना flat, predictable, और self-documenting रखता है।
BEM एक naming convention है, कोई browser feature नहीं, इसलिए यह CSS classes को support करने वाले हर browser में identically काम करता है।
Chapter Quiz — Complete all 22 topics to unlock
0/22 topics done
Complete these topics first:
- CSS Gradients
- CSS Shadows
- CSS Filters
- CSS Blend Modes
- CSS Transforms
- CSS 2D Transforms
- CSS 3D Transforms
- CSS Transitions
- CSS Animations
- CSS Image Styling
- CSS Image Effects
- CSS Hover Overlays
- CSS Image Modal
- CSS Image Centering
- CSS Image Shapes
- CSS Buttons
- CSS Columns
- CSS Clip Path
- CSS Shapes
- CSS Scroll Snap
- CSS Architecture: BEM
- CSS Custom Properties