Почему стоит выбрать БЭМ?
Простота использования : БЭМ легко усваивается и применяется на практике. Масштабируемость : Структуры, с
Основы БЭМ
[block]__[element]--[modifier]
Блок : Основная родительская сущность, определяющая функциональность компонента. Название блока должно отражать его смысл и предназначение. Элемент : Внутренние части блока, выполняющие вспомогательные функции. Элементы существуют только в контексте своего блока и не используются отдельно. Модификатор : Определяет различные состояния или вариации блока или элемента, влияя на внешний вид или поведение.
Примеры использования
Простой блок
<style>
.btn {}
</style>
<button class="btn"></button>
Компонент с модификатором
<style>
.btn {
display: inline-block;
color: blue;
}
.btn--secondary {
color: green;
}
</style>
<button class="btn btn--secondary"></button>
Важно помнить, что модификатор не может существовать без блока:
<!-- Неправильно -->
<style>
.btn--secondary {
display: inline-block;
color: green;
}
</style>
<button class="btn--secondary"></button>
Компоненты с элементами
<!-- Правильно -->
<style>
.card {}
.card__title {}
.card__description {}
</style>
<div class="card">
<h1 class="card__title"></h1>
<p class="card__description"></p>
</div>
Ошибкой будет использование многоуровневых имен классов:
<!-- Неправильно -->
<style>
.card__description__excerpt {}
</style>
<div class="card">
<div class="card__description">
<p class="card__description__excerpt"></p>
</div>
</div>
Вместо этого используйте плоскую структуру:
<!-- Правильно -->
<style>
.card__description {}
.card__excerpt {}
</style>
<div class="card">
<div class="card__description">
<p class="card__excerpt"></p>
</div>
</div>
Модификация элементов
<style>
.card__title {}
.card__title--big {}
</style>
<div class="card">
<h1 class="card__title card__title--big"></h1>
</div>
Как быть с именами из нескольких слов?
[block]__[element]--[modifier]