Кажется в последнее БЭМ стал трендом. Все чаще попадается на сайтах. Бегло пробежался по вакансиям, там тоже. До сих пор не понимаю зачем люди тащат этот уродливый стиль в свои проекты. Ну вот если нужны переиспользуемые блоки, кто не дает просто писать так:
.block {
.elem1 {}
.elem2 {}
//...
}
Вот тут, например, приводятся аргументы:
Отсутствие пространства имён дает возможность совпадения селекторов и их неожиданных влияний (наложение правил, зависимость одних частей страницы от других).
Кто мешает писать селекторы так, чтобы они не совпадали?
CSS сложно понять без разметки, к которой он применен.
Зачем его вообще понимать без разметки то?
В CSS поощряется каскад, использование которого связывает стилизацию и разметку, что усложняет модификацию и того, и другого.
Обычный code smell. Просто не делай так, если есть другие варианты.
Наверное к уродливости имен классов со временем можно принюхаться и не замечать. Но главная проблема БЭМ, что запрет на использование вложенных элементов провоцирует огромную сложность в выборе имен классов. Народ в своей массе тупо переносит вложенность в имена классов, отчего те раздуваются еще больше.
// вот так
.nav-menu {}
.nav-menu__item {}
.nav-menu__item-icon {}
.nav-menu__item-title {}
.nav-menu__item-inner {}
// или так
.nav-menu {}
.nav-menu-item {}
.nav-menu-item__icon {}
.nav-menu-item__title {}
.nav-menu-item__inner {}
И как бы тут нет другого выхода, потому что у какого-нибудь «item icon» нет и никогда не будет никакого семантического названия (и это еще простой пример), а таких элементов на странице over 90%. Тогда чем БЭМ принципиально лучше простого
.nav-menu .item .icon {}
.nav-menu .item-icon {}
Про bemjson вообще молчу, он просто нечитаемый.