Как повысить продажи на своем сайте за 1 мес + десятки рабочих кейсов из каждой отрасли для директоров и маркетологов. Подписывайся
БЭМ позволяет легко и быстро разрабатывать интерфейсы любой сложности и повторно использовать существующий код. Название является аббревиатурой от трех ключевых понятий концепции: Блок, Элемент, Модификатор.
Примерно так выглядит код сайта, написанный без использования БЭМ:
А так выглядит код сайта, написанный по всем стандартам БЭМ:
Функционально независимый компонент страницы, который может быть повторно использован.
Требования:
Название блока характеризует смысл («что это?» — «меню»: menu, «кнопка»: button), а не состояние («какой, как выглядит?» — «красный»: red, «большой»: big).
Составная часть блока, которая не может использоваться в отрыве от него.
Требования:
Сущность, определяющая внешний вид или состояние блока либо элемента.
Требования:
Часто на одном html элементе требуется совмещать поведение и стили нескольких БЭМ сущностей. Например кнопка (блок .button) в форме обратной связи (блок .feedback) должна быть прижата к правому краю. Стиль отвечающий за позиционирование кнопки нельзя добавить на общий класс .button, который описывает поведение и внешний вид кнопок на всем сайте, т.к. тогда все кнопки на всем сайте "прижмуться" к правому краю, а нам это не нужно. В таком случае кнопке добавляется дополнительный класс .feedback__button, описывающий новую сущность - элемент “кнопка” блока обратной связи, и стиль позиционирования прописывается на данную новую сущность.
Вместо микса также допустимо использовать модификатор с названием контекста, где необходимо изменение стилей. В данном примере модификатор будет следующим - .button_feedback.
Создавайте блок, если фрагмент кода может использоваться повторно и не зависит от реализации других компонентов страницы.
Создавайте элемент, если фрагмент кода не может использоваться самостоятельно, без родительской сущности (блока). Исключение составляют элементы, реализация которых для упрощения разработки требует разделения на более мелкие части - подэлементы. В БЭМ-методологии нельзя создавать элементы элементов и в подобном случае вместо элемента необходимо создавать новый блок.
В нашей компании принято использовать альтернативный стиль наименования модификаторов, называемый “No-namespace”. Его суть состоит в том, что у модификаторов отсутствует название блока/элемента в названии, а для определения к какой сущности применен модификатор в css используется мультикласс. В итоге вместо традиционных class=”block-name block-name_mod” и .block-name_mod{}, получаются class=”block-name _mod” и .block-name._mod{}. Данный стиль укорачивает длинные названия модификаторов и упрощает работу с ними, а также повышает “вес” правил модификаторов, что также бывает полезным.
В CSS используются только классы, а также псевдоэлементы и псевдоклассы. Селекторы тегов, идентификаторов и атрибутов не используются.
Вложенные селекторы должны использоваться по минимуму и только в случае крайней необходимости. Вложенные селекторы увеличивают связность кода и сильно затрудняют его повторное использование. В большинстве случаев вместо вложенности необходимо использовать миксы или модификаторы. Исключение: воздействие модификатора блока на стили его элементов. К примеру у блока (.form) имеется модификатор цвета (.form_red), и для изменения цвета элементов данного блока мы можем и должны использовать вложенность .form_red .form__button{background: red;}
Прямо сейчас консультируем
клиентов