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. 14. Миксы блоков и элементов

Previous1. 17. 13. Блоки и элементыNext1. 17. 15. Модификаторы блоков и элементов

Last updated 1 year ago

Эта группа содержит интерфейсные шаблоны, в которых один и тот же HTML-элемент одновременно будет и элементом вышестоящего блока и самостоятельным блоком. Как известно, в этой ситуации мы используем миксование.

Случай 1

Этот интерфейсный шаблон напоминает случай 2 из группы блоки и элементы. Отличием будет то, что вложенный блок будет ещё и элементом вышестоящего блока.

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

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

К примеру, форма с отзывом о покупке. Поле для ввода — это элемент формы и самостоятельный блок. Аналогично, кнопка Отправить — это и элемент формы и отдельный самостоятельный блок со своей структурой.

Явно покажем блоки и элементы:

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

<form class="feedback-form" action="#" method="POST">
  <p class="feedback-form__title">Отзыв о покупке</p>
  <label class="feedback-form__field">
    <span class="feedback-form__field-label">Имя</span>
    <input class="feedback-form__field-control input" type="text" name="feedback-form-recipient-name" placeholder="Ваше имя">
  </label>
  <label class="feedback-form__field">
    <span class="feedback-form__field-label">E-mail</span>
    <input class="feedback-form__field-control input" type="email" name="feedback-form-recipient-email" placeholder="Ваш e-mail">
  </label>
  ...
  <button class="feedback-form__button button" type="submit">Отправить</button>
</form>

Случай 2

На практике часто миксуются не только блок и элемент, но и два-три-четыре блока. Каждый блок отвечает за что-то одно, один — за сетку, другой — за выравнивание, третий — за отступы и так далее. В идеале выходит, что один блок отвечает за одну функцию.

Один HTML-элемент — это два блока, допустим, бизнес-сущность и сеточный блок.

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

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

Например, раздел сайта с типовой двухколоночной сеткой, один блок отвечает за тему блока (services), второй за сетку (card).

Выделим блоки:

Разметим интерфейсный элемент:

<section class="services card">
  <h3 class="services__title">Поможем вам найти подходящего специалиста</h3>
  <img class="services__img" src="/adaptive/29/book/html/bem/common-cases-mixing/img/photo-1.jpg" width="300" height="300" alt="">
  <p class="services__text">Ответьте на несколько вопросов и система подберёт психологов и терапевтов, которые помогут вам справиться с проблемой.</p>
  <button class="services__button" type="button">Подобрать психолога</button>
</section>

Случай 3

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

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

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

К примеру, боковая панель в личном кабинете пользователя. Во-первых, панель — это элемент страницы, во-вторых, это ещё и меню. А первый и последний пункт меню — это шапочный и подвальный элемент панели, как элементы с особым оформлением.

Добавим выделение для блоков и элементов:

Напишем разметку для третьего типового случая:

<body class="page">
  <div class="page__aside panel menu">
    <div class="panel__header menu__item">Мой аккаунт</div>
    <div class="menu__item">Личная информация</div>
    ...
    <div class="panel__footer menu__item">О сервисе</div>
  </div>
</body>
Пример для случая 1
Блоки и элементы для формы с отзывом о покупке
Схема для случая 2
Пример для случая 2
Бизнесовый и сеточный блоки для раздела сайта
Схема для случая 3
Пример для случая 3
Блоки и элементы для боковой панели в личном кабинете пользователя
Схема для случая 1
Пример для случая 1
Блоки и элементы для формы с отзывом о покупке
Схема для случая 2
Схема для случая 3
Пример для случая 2
Блоки и элементы для боковой панели в личном кабинете пользователя
Пример для случая 3
Бизнесовый и сеточный блоки для раздела сайта