БЭМ
БЭМ (Блок, Элемент, Модификатор) — это методология разработки веб-интерфейсов, которая помогает создавать масштабируемые, повторно используемые и легко поддерживаемые компоненты. Она предлагает структурированный подход к разработке, основанный на разделении интерфейса на независимые блоки.
Блок (block)
Заголовок раздела «Блок (block)»- Это независимый, повторно используемый компонент интерфейса, который имеет смысл сам по себе
- Блок может быть простым (например, кнопка) или сложным (например, форма поиска)
- Имя блока описывает его функциональность (например,
menu
,button
,form
) - Блок не должен зависеть от своего окружения и может быть переиспользован в разных частях проекта
Элемент (element)
Заголовок раздела «Элемент (element)»- Это составная часть блока, которая не имеет смысла вне блока
- Элемент отвечает за конкретную функцию внутри блока (например,
menu__item
,form__input
,button__text
) - Имя элемента описывает его роль внутри блока
- Элементы всегда являются частью блока и не могут быть использованы отдельно
Модификатор (modifier)
Заголовок раздела «Модификатор (modifier)»- Это свойство, которое изменяет внешний вид или поведение блока или элемента
- Модификатор позволяет создавать различные варианты блока или элемента без изменения их основной структуры (например,
button--primary
,menu--theme-dark
,input--disabled
) - Имя модификатора описывает его состояние или характеристику
Именование классов в БЭМ
Заголовок раздела «Именование классов в БЭМ»Именование классов в БЭМ следует определенному шаблону:
block
block__element
block--modifier
block__element--modifier
complex-block
complex-block__element
complex-block__element--complex-modifier
Кнопка по БЭМу
Заголовок раздела «Кнопка по БЭМу»- Блок:
button
- Элемент:
button__text
(текст внутри кнопки) - Модификаторы:
button--primary
(делает кнопку основной)button--disabled
(делает кнопку неактивной)button--size-large
(увеличивает размер кнопки)
<button class="button button--primary button--size-large"> <span class="button__text">Нажми меня</span></button>
.button { /* Стили для блока button */
&__text { /* Стили для элемента button__text */ }
&--primary { /* Стили для модификатора button--primary */ }
&--size-large { /* Стили для модификатора button--size-large */ }}