BEM stands for Block, Element, Modifier. It is a component-based approach to web development that was pioneered by Yandex in 2005 and later open-sourced. The core idea is simple: instead of inventing arbitrary class names, you always follow the same pattern — and that pattern itself communicates the structural role of every class in your stylesheet.
Traditional CSS quickly descends into specificity conflicts. You start with
.button, then need .header .button, then
.header .nav .button.is-primary. Specificity climbs, selectors couple,
and changing one rule breaks three others. BEM sidesteps the entire problem by
keeping every selector flat: one class, zero nesting, zero specificity battles.
The methodology is purely about naming. It works with plain CSS, Sass, PostCSS, or any other tool. It requires no build step and no runtime. The only cost is the discipline of following the convention consistently.