1️⃣
Разметка
  • 1. 1. Введение
  • 1. 2. Введение в HTML
  • 1. 3. Подходы к разметке
  • 1. 4. Работа со спецификацией
  • 1. 5. Проверка валидности
  • 1. 6. Часто используемые теги и типовые ошибки
  • 1. 7. Методика семантической разметки
    • 1. 7. 1. Определяем DOCTYPE
    • 1. 7. 2. Шаг 1. Выделяем крупные смысловые блоки на каждой странице сайта
    • 1. 7. 3. Шаг 2. Размечаем в блоках крупные смысловые разделы
    • 1. 7. 4. Шаг 3. Выделяем заголовок всего документа и заголовки смысловых разделов
    • 1. 7. 5. Шаг 4. Размечаем мелкие элементы в смысловых разделах
    • 1. 7. 6. Шаг 5. Размечаем фразовые элементы
  • 1. 8. Использование тега br
  • 1. 9. DOCTYPE
  • 1. 10. Как работает атрибут target
  • 1. 11. Правильное использование ссылок и кнопок
  • 1. 12. Как делать пустые ссылки?
  • 1. 13. Как правильно скрывать элементы?
  • 1. 14. Когда применять список терминов (dl)?
  • 1. 15. Как использовать ссылки mailto: и tel:
  • 1. 16. Именование сущностей
  • 1. 17. Разметка по БЭМ
    • 1. 17. 1. Введение
    • 1. 17. 2. Предыстория
    • 1. 17. 3. Частые проблемы из-за неправильной CSS-архитектуры проекта
    • 1. 17. 4. Основные понятия
    • 1. 17. 5. Свод правил БЭМ-а
    • 1. 17. 6. БЭМ для CMS
    • 1. 17. 7. Названия классов по БЭМ
    • 1. 17. 8. БЭМ — это про компоненты
    • 1. 17. 9. Темизация
    • 1. 17. 10. Плюсы и минусы БЭМ
    • 1. 17. 11. Алгоритм выделения блоков
    • 1. 17. 12. Типовые интерфейсные решения
    • 1. 17. 13. Блоки и элементы
    • 1. 17. 14. Миксы блоков и элементов
    • 1. 17. 15. Модификаторы блоков и элементов
    • 1. 17. 16. Типовые ошибки
  • Дополнительные материалы
Powered by GitBook
On this page
  1. 1. 17. Разметка по БЭМ

1. 17. 13. Блоки и элементы

Previous1. 17. 12. Типовые интерфейсные решенияNext1. 17. 14. Миксы блоков и элементов

Last updated 1 year ago

Случай 1

Первый типовой интерфейсный шаблон — блок, в котором дочерние HTML-элементы, это элементы (БЭМ-сущность элемент).

Примерная разметка:

<div class="block">
  <div class="block__element-1"></div>
  <div class="block__element-2"></div>
    ...
</div>
Схема для случая 1

Под описание типового случая 1 подходит, к примеру, значение выбранного фильтра в каталоге (название категории/значение и кнопка удалить), карточка товара.

Сразу, возможно, блоки и элементы не считываются, покажем их явно.

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

...
<ul class="filters">
  <li class="filter">
    <span class="filter__value">для города</span>
    <button class="filter__delete-button" type="button"></button>
  </li>
  <li class="filter">
    <span class="filter__value">количество скоростей: 1</span>
    <button class="filter__delete-button" type="button"></button>
  </li>
</ul>
...
<ul class="catalog">
  <li class="catalog__item">
    <section class="card">
      <h3 class="card__title">
        <a class="card__link" href="#">Велосипед Peugeot</a>
      </h3>
      <img class="card__img" src="/adaptive/29/book/html/bem/common-cases-blocks-and-elements/img/photo-1.jpg" width="300" height="300" alt="">
      <p class="card__description">Шоссейный велосипед для поездок по городу</p>
      <p class="card__price">от 78 000 ₽</p>
      <p class="card__delivery-info">Доставка 17 октября</p>
    </section>
  </li>
  <li class="catalog__item">
    <section class="card">
      <h3 class="card__title">
        <a class="card__link" href="#">Cannondale Track</a>
      </h3>
      <img class="card__img" src="img/photo-2.jpg" width="300" height="300" alt="">
      <p class="card__description">Гоночный болид среди велосипедов с 1 скоростью</p>
      <p class="card__price">от 135 500 ₽</p>
      <p class="card__delivery-info">Доставка 1 декабря</p>
    </section>
  </li>
  ...
</ul>
...

Случай 2

Этот типовой интерфейсный шаблон напоминает предыдущий случай, но наряду с БЭМ-элементами, в блоке могут быть и вложенные блоки со своими элементами.

Примерная разметка:

<div class="block">
  <div class="block__element-1"></div>
  <div class="block__element-2"></div>
  <div class="block-2">
    <div class="block-2__element"></div>
  </div>
  ...
</div>

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

Добавим результат наложения нашей схемы на интерфейсный элемент.

Подкрепим всё разметкой:

<div class="photo-editor">
  <img class="photo-editor__source" src="/adaptive/29/book/html/bem/common-cases-blocks-and-elements/img/photo.jpg" width="300" height="300" alt="">
  <button class="image-button" type="button">
    <svg class="image-button__icon"></svg>
    <span class="image-button__description">кадрирование</span>
  </button>
  <button class="image-button" type="button">
    <svg class="image-button__icon"></svg>
    <span class="image-button__description">вращение</span>
  </button>
...
</div>

Случай 3

Плоское БЭМ-дерево на практике, рубим ветви.

Примерная разметка:

<div class="block">
  <div class="block__element-1">
    <div class="block__element-2"></div>
  </div>
  ...
</div>

В эту группу можно отнести навигацию по сайту (список + элементы списка + ссылки).

Выделим блоки и элементы:

Напишем разметку:

<ul class="site-navigation">
  <li class="site-navigation__item">
    <a class="site-navigation__link" href="#">Главная</a>
  </li>
  <li class="site-navigation__item">
    <a class="site-navigation__link" href="#">Услуги</a>
  </li>
  ...
</ul>

Случай 4

Блок, в который вложены другие блоки.

Примерная разметка:

<div class="block">
  <div class="block-2"></div>
  <div class="block-3"></div>
  ...
</div>

Под это описание подходит сокращённая форма подписки, в которой есть только поле для ввода и кнопка Подписаться. Она, обычно, размещается в подвале сайта.

Распределим по блокам и элементам:

Разметка будет выглядеть так:

<form class="subscribe" action="#" method="POST">
  <input class="input" type="email" name="search" placeholder="Ваш e-mail">
  <button class="button" type="submit">Подписаться</button>
</form>

Случай 5

В блок вложены другие блоки, которые сами состоят из элементов.

Примерная разметка:

<div class="block">
  <div class="block-2">
    <div class="block-2__element"></div>
    ...
  </div>
  <div class="block-3">
    <div class="block-3__element"></div>
    ..
  </div>
  ...
</div>

Например, сложный слайдер, в котором на отдельном слайде может быть не только изображение, но и текст.

Покажем блоки и элементы, которые мы увидели:

Напишем разметку для интерфейсного элемента:

<div class="slider">
  <div class="slide">
    <img class="slide__img" src="/adaptive/29/book/html/bem/common-cases-blocks-and-elements/img/photo-1.jpg" width="820" height="300" alt="">
    <p class="slide__label">Новинка</p>
    <p class="slide__headline">Бургер от шефа</p>
    <p class="slide__description">Сочная котлета, сыр, томаты, лук, листья салата и шеф-соус</p>
    <a class="slide__button" href="#">Добавить в корзину</a>
  </div>
  ...
</div>
Пример для случая 1
Блоки и элементы для выбранного фильтра и карточки товара
Схема для случая 2
Пример для случая 2
Блоки и элементы для встроенного фоторедактора
Схема для случая 3
Пример для случая 3
Блоки и элементы для навигации по сайту
Схема для случая 4
Пример для случая 4
Блоки и элементы для формы подписки
Схема для случая 5
Пример для случая 5
Блоки и элементы для сложного слайдера
Схема для случая 1
Схема для случая 2
Схема для случая 3
Схема для случая 4
Пример для случая 4
Блоки и элементы для формы подписки
Схема для случая 5
Блоки и элементы для встроенного фоторедактора
Блоки и элементы для выбранного фильтра и карточки товара
Блоки и элементы для навигации по сайту
Пример для случая 3
Пример для случая 2
Пример для случая 1
Пример для случая 5
Блоки и элементы для сложного слайдера