BEM методология: структура классов для масштабируемого CSS

🧩 Что такое BEM и зачем он нужен?

BEM (Блок, Элемент, Модификатор) — это не просто нейминг-конвенция, а философия организации CSS, которая превращает хаос стилей в предсказуемую систему.

🔍 Проблемы, которые решает BEM:
- Коллизии имён классов (button vs btn).
- Невозможность переиспользования кода.
- Каскадные войны (вложенность селекторов div > ul > li > a).

💡 BEM — как LEGO: собираете компоненты, а не пишете одноразовый код.

🏗️ Основные понятия BEM

1. Блок (Block)

Независимый компонент, который можно использовать повторно. Пример: кнопка, карточка, шапка сайта.

/* Блок — самостоятельная сущность */
.button {
  padding: 10px 20px;
  border: none;
}

2. Элемент (Element)

Часть блока, которая не имеет смысла отдельно от него. Обозначается через __ (двойное подчёркивание).

/* Элемент принадлежит блоку */
.button__icon {
  width: 16px;
  height: 16px;
}

3. Модификатор (Modifier)

Изменяет внешний вид или поведение блока/элемента. Обозначается через -- (двойной дефис).

/* Модификатор изменяет блок */
.button--large {
  padding: 15px 30px;
  font-size: 18px;
}

🛠️ Практика: как применять BEM

🔹 Пример: карточка товара

HTML:

<div class="card">
  <img class="card__image" src="product.jpg" alt="Товар">
  <div class="card__content">
    <h3 class="card__title">Название товара</h3>
    <p class="card__description">Описание...</p>
    <button class="card__button card__button--highlight">Купить</button>
  </div>
</div>

CSS:

.card { /* Блок */ 
  border: 1px solid #eee;
  border-radius: 8px;
}

.card__image { /* Элемент */
  width: 100%;
  height: auto;
}

.card__button { /* Элемент */
  background: blue;
  color: white;
}

.card__button--highlight { /* Модификатор */
  background: gold;
}

⚡ Важные правила BEM

1. Не вкладывайте блоки в блоки через CSS

/* ❌ Плохо: зависимость от вложенности */
.card .button { ... }

/* ✅ Хорошо: используйте модификаторы */
.card__button--special { ... }

2. Не создавайте элементы элементов

/* ❌ Неправильно */
.card__content__title { ... }

/* ✅ Правильно */
.card__title { ... }

3. Избегайте каскадов

  • Селекторы в BEM должны быть плоскими (максимум 1 уровень вложенности).

🌟 Преимущества BEM

  • Масштабируемость: новые разработчики быстро понимают структуру.
  • Изоляция стилей: нет конфликтов имён.
  • Удобство рефакторинга: можно безопасно переименовывать компоненты.

🔥 Если вы до сих пор пишете CSS «как получится», BEM — ваш билет в мир профессиональной вёрстки.


🧪 Тренировочный пример

Попробуйте сверстать навигационное меню по BEM:

  • Блок: nav
  • Элементы: nav__list, nav__item, nav__link
  • Модификаторы: nav__link--active, nav--dark
<nav class="nav nav--dark">
  <ul class="nav__list">
    <li class="nav__item">
      <a class="nav__link" href="#">Главная</a>
    </li>
    <li class="nav__item">
      <a class="nav__link nav__link--active" href="#">О нас</a>
    </li>
  </ul>
</nav>

🚀 Вывод

BEM — это не сложно, если начать применять. Он экономит часы отладки, делает код чистым, а команду — счастливой.

📺 Хотите глубже? Посмотрите разборы Данилы Бежина на YouTube — там есть живые примеры!

Теперь ваша очередь: откройте редактор и сверстайте что-нибудь по BEM прямо сейчас!

Скрыть рекламу навсегда

🌱 Индвидидулаьные занятия

Индивидуальные онлайн-занятия по программированию для детей и подростков

Личный подход, без воды, с фокусом на понимание и реальные проекты.

🚀 Записаться на занятие