Селекторы по БЭМ |
Блок — независимый элемент страницы с собственным смыслом.
Элемент — составная часть блока, имеющая смысл только внутри блока.
Модификатор — модификация внешнего вида или поведения блока (или элемента).
|
НАЗВАНИЕ для css-селекторов:
.block //БЛОК
.block__element //ЭЛЕМЕНТ внутри блока
.block--modif //МОДИФИКАТОР блока
|
Основные принципы БЭМ:
- Минимум тегов без классов
- Каскадность свести к минимуму
- Блок независим от окружения (может быть размещён в любой части страницы и не сломается при этом).
- У разных блоков не должно быть общих классов (и в CSS — не группируем общие правила, а копируем их).
- У одного блока (элемента) может быть несколько модификаторов.
- Осторожно используем дочерний селектор ( >), последовательность ( +), псевдоклассы ( :nth-child).
|
БЛОК |
.block //БЛОК
|
- Имя класса должно отвечать на вопрос «Зачем нужен этот блок?» (а не описывать его внешний вид).
- Сложные блоки собираем из простых. Только если нужный блок нельзя собрать из уже готовых (или получить
модификацией готовых), создаём новый блок.
- Блок независим от окружения (может быть размещён в любой части страницы и не сломается при этом).
- У разных блоков не должно быть общих классов (и в CSS — не группируем общие правила, а копируем их).
Примеры: «шапка» сайта, кнопка, главная навигация, пагинация, запись в блоге, блок товара в списке товаров.
- Блоки внутри блоков - обычное дело, селектор у нового блока может не описывать вложенность
|
ЭЛЕМЕНТ |
.block__element //ЭЛЕМЕНТ
|
- Это часть блока, которая вне этого блока не имеет смысла и не может быть использована.
- CSS-класс элемента формируется так: класс-блока__класс-элемента
- Могут отсутствовать (часть элементов не являются обязательными, в блоке может не быть элементов).
- Примеры: пункты основной навигации, заголовочная часть записи в блоге, ссылка пагинации.
Нет, тольно внутри родителя — это элемент.
- Частая ошибка: в имени элемента пишут два сегмента __. Не надо так.
- В БЭМ плоская структура Блок → Элемент, максимально независимая от разметки.
|
МОДИФИКАТОР |
.block--modif //МОДИФИКАТОР
|
- Дополнительный класс, изменяющий внешний вид блока (или элемента, если добавлен к элементу).
- CSS-класс модификатора формируется так: класс-блока--название-модификатора
- Даёт возможность блокам выглядеть по-разному на разных страницах или в разных частях страницы.
- Классы-модификаторы не используются без тех классов, которые они модифицируют.
- <div class="header--big"> — неправильно.
<div class="header header--big"> — правильно.
- У одного блока (элемента) может быть несколько модификаторов.
- Можно модифицировать элементы от модификатора блока (это делает код неочевидным!).
- Избегайте модифицировать вложенные блоки от модификатора блока-родителя.
|