BEM
BEM (Block-Element-Modifier) is a widely adopted CSS naming convention that structures styles into blocks (standalone components), elements (parts of blocks), and modifiers (states or variations). This approach prevents style conflicts and promotes reusability in complex applications.
How it works:
- Block: A self-contained component (e.g.,
.card) - Element: A part of a block (e.g.,
.card__title) - Modifier: A state or variation (e.g.,
.card--hover)
Example:
<code class="language-html"><div class="card"> <p> <h2 class="card__title">Card Title</h2></p> <p> <p class="card__content">Card content here</p></p> <p> <div class="card__footer">Footer content</div></p> <p></div></code>
<code class="language-css">/<em> Block: card </em>/
<p>.card {</p>
<p> border: 1px solid #ccc;</p>
<p> padding: 1rem;</p>
<p> max-width: 300px;</p>
<p>}</p>
<p>/<em> Elements </em>/</p>
<p>.card__title {</p>
<p> font-size: 1.5rem;</p>
<p> margin: 0.5rem 0;</p>
<p>}</p>
<p>.card__content {</p>
<p> font-size: 1rem;</p>
<p> line-height: 1.5;</p>
<p>}</p>
<p>/<em> Modifier </em>/</p>
<p>.card--hover {</p>
<p> background-color: #f5f5f5;</p>
<p>}</code>
Utility-First
Utility-first CSS frameworks (e.g., Tailwind CSS) use small, reusable classes to apply styles directly to HTML elements. This approach emphasizes atomic design and rapid prototyping.
Key principles:
- Atomic classes: Single-purpose styles (e.g.,
text-center,p-4) - Composable: Combine classes to build complex styles (e.g.,
text-center p-4 bg-blue-500 rounded) - Responsive: Built-in responsive modifiers (e.g.,
md:px-6for medium screens)
Example:
<code class="language-html"><div class="text-center p-4 bg-blue-500 rounded-md text-white"> <p> <h1 class="text-2xl font-bold">Hello, World!</h1></p> <p></div></code>
Summary
BEM and Utility-First represent two distinct approaches to CSS organization:
- BEM excels in large-scale applications requiring clear component boundaries and maintainability.
- Utility-First prioritizes rapid development and responsive design through atomic, composable classes.
Choose BEM for complex projects where structure is critical, and Utility-First for fast prototyping and responsive interfaces. Both are valuable tools in a modern CSS workflow.
🌟