Flexibility vs Rigidity
In CSS, there are two approaches to style extension:
- Inheritance (BEM): Creating a modifier
.btn--large. - Composition (Utility): Combining base class and utilities
.btn .p-large.
Why Composition Wins?
Instead of creating hundreds of specific classes (.card-blue-border-large-shadow), you create a set of small, reliable " bricks " (utilities).
/* Composition via variables */
.card {
border: 1px solid var(--card-border, #ccc);
padding: var(--card-pad, 1rem);
}
.card--featured {
--card-border: gold;
--card-pad: 2rem;
}
Tip
Using CSS variables for composition is the most modern way to build flexible components without code duplication.