Какой у вас опыт использования БЭМ в проектах
Что проверяют
Понимаете ли вы БЭМ как способ делить интерфейс на независимые блоки, а не только как длинные имена классов с подчёркиваниями. Следом обычно спрашивают, как БЭМ уживается с CSS Modules или Tailwind в React-проекте и нужен ли он там вообще.
Как отвечать
Коротко про суть и правила:
- блок: независимый переиспользуемый компонент (
search-form,card). Не задаёт себе внешнюю геометрию, отступы и позиционирование, чтобы его можно было поставить куда угодно; - элемент: часть блока, вне его не существует (
card__title). Вложенность в имени не отражается:card__title, даже если заголовок лежит внутриcard__header; - модификатор: вариант вида или состояния (
button_size_l,button_disabledв классической нотации илиbutton--primaryв варианте с двумя дефисами). Всегда ставится вместе с базовым классом; - микс: один DOM-узел одновременно элемент родителя и самостоятельный блок, например
class="header__search search-form". Родитель задаёт положение, блок остаётся независимым.
Главный выигрыш в плоской специфичности: каждый селектор состоит из одного класса, каскад по тегам и вложенности не используется, и стили не перебивают друг друга.
Дальше ваш опыт на своих примерах: где применяли, какую нотацию приняли, как писали на SCSS через &__title и &_active, как договаривались о границах блоков в команде. Если вы работали в основном с CSS Modules или Tailwind, скажите об этом честно. Модули решают изоляцию на уровне сборки, но идея блоков, элементов и модификаторов часто остаётся в именовании внутри модуля.
Где спотыкаются
Пишут card__header__title. Цепочка элементов повторяет DOM и ломается при любой перестановке разметки.
Используют модификатор без базового класса или стилизуют элемент через родителя вроде .card .card__title. Специфичность растёт, и смысл методологии пропадает.
Задают блоку margin и ширину внутри его стилей. Такой блок уже не переиспользовать в другом месте, внешнюю геометрию правильно задавать через микс.