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 прямо сейчас!