Урок 13
День 13 | BEM — методология именования классов
20 минПроблема: хаос в CSS
Когда проект растёт, CSS превращается в кашу:
.header { }
.header-logo { }
.headerNav { }
.header_button { }
.btn-header { }
BEM решает эту проблему.
Что такое BEM?
BEM (Block Element Modifier) — методология именования CSS-классов от Яндекса. Стандарт индустрии.
- Block (Блок) — самостоятельный компонент
- Element (Элемент) — часть блока
- Modifier (Модификатор) — вариация
Синтаксис BEM
/* Блок */
.block { }
/* Элемент блока (двойное подчёркивание) */
.block__element { }
/* Модификатор (двойное тире) */
.block--modifier { }
/* Модификатор элемента */
.block__element--modifier { }
Запомните:
•
•
•
__ — отделяет элемент от блока•
-- — отделяет модификатор
Блок (Block)
Самостоятельный компонент: .header, .menu, .card, .button
Элемент (Element)
<article class="card">
<img class="card__image">
<h3 class="card__title">Заголовок</h3>
<p class="card__text">Текст</p>
</article>
Важно: Нет вложенных элементов!
❌
✅
❌
.card__header__title✅
.card__title
Модификатор (Modifier)
<button class="button">Обычная</button>
<button class="button button--primary">Основная</button>
<button class="button button--large">Большая</button>
.button { padding: 10px 20px; }
.button--primary { background: #F36049; color: white; }
.button--large { padding: 15px 30px; font-size: 18px; }
Модификатор всегда с базовым классом:
❌
✅
❌
class="button--primary"✅
class="button button--primary"
BEM в SCSS
.card {
&__title { } // .card__title
&__text { } // .card__text
&--featured { } // .card--featured
}
Полный пример
<article class="product-card">
<img class="product-card__image">
<h3 class="product-card__title">Товар</h3>
<span class="product-card__price product-card__price--old">50 000 ₽</span>
<span class="product-card__price product-card__price--current">40 000 ₽</span>
<button class="product-card__button button button--primary">В корзину</button>
</article>
Чек-лист BEM
| Правило | Пример |
|---|---|
| Блок — существительное в kebab-case | .search-form |
Элемент через __ | .search-form__input |
Модификатор через -- | .search-form--compact |
| Нет вложенных элементов | .form__input, не .form__group__input |
| Модификатор + базовый класс | class="btn btn--primary" |
Теперь вы знаете BEM!
✅ Блок — самостоятельный компонент
✅ Элемент — часть блока (через
✅ Модификатор — вариация (через
✅ Блок — самостоятельный компонент
✅ Элемент — часть блока (через
__)✅ Модификатор — вариация (через
--)