foundation
BEM
Используйте именование block, element и modifier, чтобы связи в глобальном CSS были явными и предсказуемыми.
BEM (Block, Element, Modifier) именует глобальный CSS по владению компонентом: `block`, `block__element`, `block--modifier`. Селекторы остаются плоскими — ниже specificity и явные связи без build-time scoping.
.card { }
.card__title { }
.card__body { }
.card--featured { }
.card--featured .card__title { } /* состояние block влияет на element */
BEM подходит командам с plain CSS или SCSS без CSS Modules. Изоляцию не навязывает — нужны дисциплина и review.
На интервью: BEM vs CSS Modules, utility CSS и глубокие вложенные селекторы в больших кодовых базах.
Типовые ошибки: каждый потомок объявляют element (раздутый API); модификаторы без ясного владения block.
Компромисс: многословные классы против grep-friendly глобального CSS с низкой specificity.
Чеклист:
- Имена по block компонента, не только по региону страницы.
- Селекторы на глубину одного block.
- Модификаторы для вариантов и состояния.
- Не «утекайте» внутренними elements между blocks.