Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

БЭМ: модификаторы

Кнопки на сайте бывают основные и второстепенные, большие и маленькие, активные и отключённые. Заводить для каждой новый блок неудобно — это всё та же кнопка. Различия описывают модификаторы: дополнительные классы, которые меняют вид или состояние.

Модификатор блока

Имя модификатора — имя блока, два дефиса -- и название варианта. Его пишут рядом с классом блока, а не вместо него:

<style>
  .button { padding: 8px 16px; border: 1px solid seagreen; border-radius: 6px; background: white; color: seagreen; }
  .button--primary { background: seagreen; color: white; }
</style>
 
<button class="button">Отмена</button>
<button class="button button--primary">Сохранить</button>

Обе кнопки получили базовые стили от .button, а модификатор --primary перекрасил только вторую.

Булевый модификатор

Булевый модификатор либо есть, либо нет — как «да» или «нет». Обычно он описывает состояние: отключено, выбрано, открыто:

<style>
  .tab { display: inline-block; padding: 6px 12px; border-bottom: 2px solid transparent; color: gray; }
  .tab--active { border-bottom-color: royalblue; color: black; }
</style>
 
<span class="tab tab--active">Описание</span>
<span class="tab">Отзывы</span>
<span class="tab">Доставка</span>

Достаточно перенести класс tab--active на другую вкладку — и подсветка переедет вместе с ним.

Модификатор ключ-значение

Когда вариантов несколько, модификатор состоит из двух частей: ключа (что меняем) и значения (на что). Их разделяют дефисом:

<style>
  .button { padding: 8px 16px; border: none; border-radius: 6px; background: seagreen; color: white; }
  .button--size-small { padding: 4px 8px; font-size: 12px; }
  .button--size-large { padding: 12px 24px; font-size: 18px; }
</style>
 
<button class="button button--size-small">Маленькая</button>
<button class="button">Обычная</button>
<button class="button button--size-large">Большая</button>

Ключ size сразу говорит, что эти модификаторы взаимоисключающие: две разные size на одной кнопке не ставят.

Модификатор элемента

Элементы тоже модифицируют — к имени элемента добавляют -- и вариант:

<style>
  .menu__link { margin-right: 12px; color: steelblue; }
  .menu__link--current { color: black; font-weight: bold; text-decoration: none; }
</style>
 
<nav class="menu">
  <a class="menu__link menu__link--current" href="#">Главная</a>
  <a class="menu__link" href="#">Каталог</a>
  <a class="menu__link" href="#">Контакты</a>
</nav>

Варианты синтаксиса

Оригинальный БЭМ от Яндекса записывает модификаторы через одно подчёркивание: button_size_small, button_disabled. Синтаксис с двумя дефисами (button--disabled) распространён шире. Оба варианта одинаково правильны — важно выбрать один на весь проект.

Частая ошибка

Писать модификатор без основного класса:

<style>
  .button { padding: 8px 16px; border: none; border-radius: 6px; background: gray; color: white; }
  .button--primary { background: seagreen; }
</style>
 
<button class="button button--primary">Правильно</button>
<button class="button--primary">Без класса блока</button>

Вторая кнопка получила только цвет фона, а отступы, скругление и цвет текста потерялись. Модификатор лишь дополняет блок, поэтому основной класс нужен всегда.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.