Я думаю, что вы можете смешивать классы БЭМ с другими во многих случаях.БЭМ можно смешивать с другими методологиями, со старым кодом или даже со средними классами.
Например, я использовал для смешивания методологий:
- У вас есть конкретныеизменения в блоке, которые не основаны на логике .В этом случае я бы предпочел использовать служебный класс (например:
.u-uppercase
), который будет короче для записи и доступен для каждого блока, чем для написания нелогического модификатора БЭМ (например: .title--uppercase
) - У вас есть класс макета (который распределяет пространство экрана), который вы повторяете в нескольких блоках .В этом случае я бы предпочел использовать класс объектов OOCSS (например:
.o-container
), который уменьшит сложность БЭМ, чем писать один и тот же элемент БЭМ везде (например: .header__container
).
Вы можете найти отличную презентацию о расширении BEM здесь: Модульный CSS в Rangle .
Из своего опыта я попытался смешать классы OOCSS (с префиксом l-
) и BEM (с p-
префикс) при создании этого сайта https://www.netalis.fr. Сначала это было странно, но, наконец, очень полезно и стабильно.
Пример с сайта netalis:
<!-- HEADER BLOCK -->
<div class="p-header p-header--hero">
<!-- NESTED BLOCK -->
<div class="p-menu"></div>
<!-- OBJECT CLASS -->
<div class="l-container">
<!-- HEADER ELEMENT -->
<div class="p-header__content"></div>
</div>
</div>
Работаетпотому что эти внешние классы:
- Изолированные от классов БЭМ, например, нет селектора, который смешивал бы оба (
.p-header > .l-container
) - Неизменный , классы утилит / объектов не должны меняться со временем.
Поэтому мой вопрос: Ваш page-builder-class
изолирован и неизменен?