Заполните форму и наш менеджер свяжется с вами
BEM-методология: что это и как использовать её для эффективной верстки

BEM-методология: что это и как использовать её для эффективной верстки

article

Рекомендуемые программы обучения

banner

В мире веб-разработки каждый проект стремится к четкости и структурированности кода, которые обеспечивают не только легкость в поддержке, но и высокое качество пользовательского опыта. BEM-методология (Block, Element, Modifier) является мощным инструментом для достижения этих целей. Что такое BEM, как её применять и почему она становится неотъемлемой частью эффективной верстки в современной веб-разработке – расскажем в статье.

Подберите программу обучения, узнайте проходной балл и начните учиться бесплатно

Что такое BEM

BEM (Block, Element, Modifier) — это методология в веб-разработке, предназначенная для создания структурированной и многократно используемой вёрстки. Она позволяет разработчикам создавать независимые компоненты интерфейса с помощью системы именования, которая упрощает поддержку, расширение и масштабирование кода.

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

Элемент — это часть блока, которая не может существовать отдельно от него и зависит от его контекста.

Модификатор — это свойство блока или элемента, которое изменяет их внешний вид или поведение.

Вот пример HTML-кода и CSS-стилей, использующих BEM-нейминг:

<div class="menu">
  <div class="menu__item menu__item--active">Главная</div>
  <div class="menu__item">Новости</div>
  <div class="menu__item">Контакты</div>
</div>

HTML

.menu {
  display: flex;
}

.menu__item {
  margin-right: 10px;
}

.menu__item--active {
  font-weight: bold;
}

CSS

В данном случае menu — это блок, menu__item — элемент, а menu__item--active — модификатор.

Зачем он нужен

BEM используют веб-разработчики и дизайнеры для создания и поддержки структурированных и легко расширяемых веб-приложений и корпоративных сайтов.

Лучше всего применять BEM с самого начала проекта или при рефакторинге уже существующего кода. Это позволяет обеспечить повторное использование компонентов и их модификацию, что особенно полезно для крупных проектов с адаптивными интерфейсами.

BEM основан на чётком разделении стилей для блоков, элементов и модификаторов. Такой подход делает код предсказуемым и легко поддерживаемым.

Зачем он нужен:

Организация кода:

  • BEM помогает структурировать HTML и CSS, что делает код более читаемым, предсказуемым и легким в поддержке.
  • Четкая система нейминга позволяет легко идентифицировать и управлять различными частями интерфейса, минимизируя ошибки и упрощая модификации.

Уменьшение конфликта стилей:

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

Переиспользуемость компонентов:

  • Компоненты, созданные с использованием BEM, можно легко переиспользовать в различных частях приложения или проекта.
  • Повышает эффективность разработки за счет модульности.

Гибкость и масштабируемость:

  • Подходит как для небольших проектов, так и для крупных приложений с сложной структурой.
  • Облегчает добавление новых компонентов и стилей.

Плюсы и минусы

Плюсы BEM

Минусы BEM

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

Имена классов могут быть длинными и менее удобными для быстрого написания.

Компоненты легко переиспользовать в различных частях проекта, что повышает эффективность разработки.

Для небольших проектов применение BEM может оказаться излишне сложным.

Уникальные имена блоков, элементов и модификаторов предотвращают пересечение стилей.

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

С помощью модификаторов можно легко изменять внешний вид и поведение компонентов.

Новичкам может потребоваться время для изучения и освоения методологии BEM.

Подходит для проектов любого размера, облегчая добавление новых компонентов и стилей.

Требуется продуманное планирование структуры классов и компонентов.

Обеспечивает единообразие в коде, что особенно полезно при работе в команде.

Длинные и сложные классы могут затруднить визуальное восприятие кода.

Как работать с BEM: настройка и установка

Для работы с BEM не нужно устанавливать специальное программное обеспечение, поскольку это методология написания кода. Однако, чтобы лучше организовать проект и использовать все преимущества BEM, можно применять определённые инструменты и подходы.

  1. Организация проекта
    • Создайте структуру папок проекта:

    Создайте основные папки для вашего проекта, такие как css, js, images, components, чтобы организовать код и ресурсы.

    • Создайте файлы для компонентов:

    В папке components создайте отдельные папки для каждого блока. Например: button, header, footer.

  2. Настройка HTML
    • Структурируйте HTML согласно BEM:

    Начните с создания блоков и элементов в HTML-файлах.

    <div class="menu">
        <div class="menu__item menu__item--active">Главная</div>
        <div class="menu__item">Новости</div>
        <div class="menu__item">Контакты</div>
    </div>

    HTML

  3. Настройка CSS
    • Создайте CSS файлы для блоков:

    В каждой папке блока создайте отдельные CSS файлы. Например: button/button.css, header/header.css.

    • Организуйте стили согласно BEM:

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

    /* button/button.css */
    .button {
        background-color: gray;
        padding: 10px;
    }
    .button--primary {
        background-color: blue;
    }
    .button__text {
        color: white;
    }

    CSS

  4. Инструменты автоматизации (необязательно)
    • Используйте препроцессоры CSS:

    Препроцессоры, такие как Sass или LESS, могут значительно упростить работу с BEM, позволяя использовать вложенность, переменные и другие мощные возможности:

    /* button/button.scss */
    .button {
        background-color: gray;
        padding: 10px;
     
        &--primary {
            background-color: blue;
        }
     
        &__text {
            color: white;
        }
    }

    CSS

    • Настройка сборки:

    Используйте инструменты сборки, такие как Gulp или Webpack, для автоматической компиляции, объединения и оптимизации ваших CSS файлов.

  5. Документация и поддержка
    • Документируйте компоненты:

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

    • Следите за консистентностью:

    При добавлении новых компонентов или изменении существующих, следуйте BEM-методологии, чтобы поддерживать единообразие и предсказуемость кода.

    Пример структуры проекта:

    project/

    ├── css/
    │   └── main.css

    ├── components/
    │   ├── button/
    │   │   ├── button.html
    │   │   └── button.scss
    │   ├── header/
    │   │   ├── header.html
    │   │   └── header.scss
    │   └── footer/
    │       ├── footer.html
    │       └── footer.scss

    ├── images/

    ├── js/
    │   └── main.js

    └── index.html

    CSS

Блоки

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

<div class="menu">
    <div class="menu__item">Главная</div>
    <div class="menu__item">Новости</div>
    <div class="menu__item">Контакты</div>
</div>

HTML

Особенности блоков

  • Независимость:

Блоки могут быть использованы автономно, без зависимости от других частей кода.

  • Переиспользуемость:

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

  • Модульность:

Блоки могут включать в себя элементы (части блока) и модификаторы (варианты блока или его элементов), что делает их гибкими и настраиваемыми.

Элементы 

Элемент — это часть блока, которая выполняет конкретную функцию внутри этого блока. Элементы обозначаются двойным подчёркиванием (__) после названия блока.

Пример блока с элементами в HTML:

<div class="card">
    <div class="card__header">
        <h2 class="card__title">Заголовок карточки</h2>
    </div>
    <div class="card__body">
        <p class="card__text">Текст карточки</p>
    </div>
    <div class="card__footer">
        <button class="card__button">Подробнее</button>
    </div>
</div>

card — это блок

card__header, card__title, card__body, card__text, card__footer, card__button — это элементы этого блока.

Особенности элементов

  • Зависимость от блока:

Элементы не могут существовать самостоятельно, они всегда являются частью блока.

  • Уникальность именования:

Имя элемента состоит из имени блока и имени элемента, разделённых двойным подчёркиванием (__), что исключает конфликты имен.

  • Функциональность:

Элементы выполняют конкретные функции внутри блока, помогая структурировать и организовывать внутренние части блока.

Модификаторы

Модификатор — это признак, который изменяет внешний вид, состояние или поведение блока или элемента. Модификаторы обозначаются одним символом подчёркивания (_). Они могут быть двух видов: булевыми или типа «ключ-значение».

Типы модификаторов

  1. Булевые модификаторы:
    • Используются для указания состояния или присутствия определённого стиля.
    • Пример: block_modifier.
  2. Ключ-значение модификаторы:
    • Используются для указания различных вариантов блока или элемента.
    • Пример: block_modifier_value.

Пример блока с модификаторами в HTML:

<div class="button button_primary button_large">
    Нажми меня
</div>
<div class="button button_secondary">
    Отмена
</div>

Здесь button — это блок, а button_primary и button_large — модификаторы этого блока, которые изменяют его внешний вид.

Особенности модификаторов

  • Изменение поведения и стиля:

Модификаторы позволяют изменять внешний вид или поведение блоков и элементов без необходимости создавать новые блоки или элементы.

  • Комбинирование модификаторов:

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

  • Уникальность именования:

Модификаторы добавляются к имени блока или элемента через одинарное подчёркивание (_), что исключает конфликты имен.

Миксы

Микс — это способ объединения классов разных блоков или элементов в одном HTML-элементе для использования их стилей или функциональности.

Микс осуществляется путем добавления нескольких классов напрямую в атрибут class HTML-элемента. Например:

<div class="block1 block2 block3__element">
    <!-- Контент блока -->
</div>

Пример использования миксов в HTML:

<div class="card">
    <div class="card__header header header_small">
        <h2 class="card__title">Заголовок карточки</h2>
    </div>
    <div class="card__body">
        <p class="card__text">Текст карточки</p>
    </div>
    <div class="card__footer footer">
        <button class="card__button button button_primary">Подробнее</button>
    </div>
</div>

Особенности миксов

  • Независимость стилей:

Позволяют комбинировать стили и функциональность блоков и элементов, избегая необходимости в наследовании или дублировании кода.

  • Читаемость и поддерживаемость:

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

  • Гибкость и масштабируемость:

Позволяют быстро добавлять и изменять функциональность компонентов, не затрагивая их основную структуру.

Подберите программу обучения, узнайте проходной балл и начните учиться бесплатно

Файловая структура

В BEM файловая структура не имеет строгих установленных правил, так как BEM сконцентрирована на именовании классов CSS и организации HTML-разметки. Однако, хорошая практика включает организацию файлов для удобства работы и поддержки проекта.

Рекомендации по файловой структуре

  1. Структура проекта:
    • blocks/: Этот каталог может содержать подкаталоги, каждый из которых представляет собой блоки (например, header, footer, menu).
    • styles/: Здесь размещаются CSS файлы. Каждый блок может иметь свой собственный CSS файл, который включает стили для соответствующего блока.
    • scripts/: JavaScript файлы, связанные с конкретными блоками или элементами, можно разместить здесь.
    • images/: Каталог для изображений, используемых в проекте.
  2. Файловая структура блока:
    • Каждый блок рекомендуется размещать в отдельной папке внутри каталога blocks/. Например:

    blocks/
    ├── header/
    │   ├── header.css
    │   ├── header.html
    │   └── header.js
    ├── menu/
    │   ├── menu.css
    │   ├── menu.html
    │   └── menu.js
    └── footer/
        ├── footer.css
        ├── footer.html
        └── footer.js

    CSS

    • В данном примере для каждого блока (header, menu, footer) созданы отдельные файлы для стилей (.css), HTML-разметки (.html) и JavaScript (.js), если это необходимо.
  3. Именование файлов:
    • Имена файлов обычно соответствуют имени блока или элемента. Например, header.css, menu.html.
  4. Сборка и автоматизация:
    • Для управления и сборки проекта могут использоваться инструменты автоматизации, такие как Gulp, Webpack или npm скрипты. Они позволяют объединять и минифицировать CSS и JavaScript файлы, оптимизировать изображения и управлять зависимостями.

HTML (header.html):

<div class="header">
    <div class="header__logo">
        <img src="logo.png" alt="Логотип">
    </div>
    <nav class="header__nav">
        <ul class="header__menu menu">
            <li class="menu__item">Главная</li>
            <li class="menu__item">О нас</li>
            <li class="menu__item">Контакты</li>
        </ul>
    </nav>
</div>

CSS (header.css):

.header {
    background-color: #333;
    color: white;
    padding: 10px;
}

.header__logo img {
    max-width: 100px;
}

.header__nav {
    margin-top: 10px;
}

.header__menu {
    list-style: none;
    padding: 0;
    margin: 0;
}

.menu__item {
    display: inline-block;
    margin-right: 15px;
}

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

Как применять BEM для HTML и CSS

Применение методологии BEM (Block, Element, Modifier) для HTML и CSS помогает структурировать и стандартизировать код, делая его более читаемым, поддерживаемым и масштабируемым. 

Принципы BEM

  1. Блок (Block):
    • Блок представляет собой независимую именованную сущность, которая является фундаментальным строительным блоком в BEM.
    • Название блока отражает его назначение и контекст использования.
    • Например, header, menu, button.
  2. Элемент (Element):
    • Элементы являются частями блоков и не имеют самостоятельного смысла вне контекста блока.
    • Имена элементов формируются с использованием двойного подчёркивания (__).
    • Например, header__logo, menu__item, button__text.
  3. Модификатор (Modifier):
    • Модификаторы изменяют внешний вид, состояние или поведение блоков или элементов.
    • Имена модификаторов формируются с использованием одинарного подчёркивания (_).
    • Например, button--primary, menu__item--active.

Пример использования BEM в HTML-разметке:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BEM Example</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>

<div class="header">
    <div class="logo header__logo">
        <img src="logo.png" alt="Логотип">
    </div>
    <nav class="nav header__nav">
        <ul class="menu nav__menu">
            <li class="menu__item nav__item">Главная</li>
            <li class="menu__item nav__item">О нас</li>
            <li class="menu__item nav__item">Контакты</li>
        </ul>
    </nav>
</div>

<button class="button button--primary">Нажми меня</button>

</body>
</html>

Пример стилей для вышеуказанной HTML-разметки:

.header {
    background-color: #333;
    color: white;
    padding: 10px;
}

.header__logo img {
    max-width: 100px;
}

.header__nav {
    margin-top: 10px;
}

.menu {
    list-style: none;
    padding: 0;
    margin: 0;
}

.menu__item {
    display: inline-block;
    margin-right: 15px;
}

.button {
    padding: 10px 20px;
    border: none;
    cursor: pointer;
}

.button--primary {
    background-color: blue;
    color: white;
}

.nav__item--active {
    font-weight: bold;
}

Особенности применения BEM для HTML и CSS

  1. Именование классов:
    • Классы должны отражать иерархию блоков, элементов и модификаторов.
    • Избегайте слишком длинных и сложных имен, сохраняя их понятность и ясность.
  2. Компонентный подход:
    • Каждый блок и элемент должен иметь свои собственные стили, что обеспечивает лучшую изоляцию и поддерживаемость кода.
  3. Модификаторы для вариаций:
    • Используйте модификаторы для создания различных вариаций блоков и элементов без необходимости повторения кода.
  4. Поддержка и масштабируемость:
    • BEM упрощает сопровождение проекта и его масштабирование, поскольку делает структуру и стили более прозрачными и предсказуемыми.

Какие перспективы у BEM

Разработанная Яндексом в начале 2000-х гг., BEM (Block, Element, Modifier) получила широкое признание благодаря своей структурированности и удобству в использовании. В настоящее время BEM продолжает оставаться актуальной и востребованной, несмотря на появление других методологий и подходов к организации кода в веб-разработке. 

Перспективы BEM

  1. Стандартизация и прозрачность:
    • BEM способствует стандартизации именования классов в HTML и CSS, что улучшает читаемость и поддерживаемость кода. Это особенно важно для крупных проектов и команд разработчиков.
  2. Масштабируемость проектов:
    • Благодаря четкому разделению на блоки, элементы и модификаторы, BEM облегчает масштабирование проектов. Разработчики могут легко добавлять новые компоненты и вариации без опасения конфликтов и пересечений стилей.
  3. Совместимость с другими технологиями:
    • BEM хорошо интегрируется с другими технологиями и фреймворками, такими как React, Angular, Vue.js и другими, что позволяет использовать его принципы в современных SPA-приложениях.
  4. Поддержка сообществом:
    • Веб-разработчики продолжают активно обмениваться опытом и лучшими практиками по применению BEM. Это поддерживает развитие методологии и способствует её адаптации к различным проектам и требованиям.
  5. Развитие инструментов поддержки:
    • С появлением различных инструментов и плагинов для автоматизации создания BEM-классов, например, генераторов классов или расширений для редакторов кода, использование BEM становится еще более удобным и эффективным.
  6. Продолжение обучения и документации:
    • Продолжается разработка и улучшение документации по BEM, что помогает новым и опытным разработчикам быстрее осваивать методологию и использовать её в своих проектах.

Типичные ошибки и как их исправить

Неправильное именование классов:

  • Проблема: Имена классов не соответствуют принципам BEM, могут быть слишком общими или недостаточно информативными.
  • Исправление: Придерживайтесь следующих правил:
    • Используйте понятные имена, отражающие смысл блока или элемента.
    • Не используйте слишком длинные имена, которые затрудняют чтение и понимание кода.
    • Избегайте использования аббревиатур, если они не являются широко распространёнными и понятными всем членам команды.

Неправильное использование модификаторов:

  • Проблема: Модификаторы применяются неправильно или неэффективно.
  • Исправление:
    • Используйте модификаторы для изменения внешнего вида, состояния или поведения блока или элемента, но избегайте создания избыточного количества модификаторов.
    • Не создавайте излишнее количество модификаторов, если они могут быть заменены комбинацией блоков и элементов.

Нарушение иерархии блоков и элементов:

  • Проблема: Неправильное вложение элементов в блоки или неправильное использование блоков и элементов.
  • Исправление:
    • Соблюдайте иерархию блоков и элементов: блок может содержать только элементы, элементы — только внутри блоков.
    • Избегайте использования блоков в качестве элементов и наоборот.

Дублирование кода и стилей:

  • Проблема: Дублирование классов или стилей блоков и элементов.
  • Исправление:
    • Используйте компонентный подход: каждый блок и элемент должен иметь свой уникальный класс и стили.
    • Избегайте копирования кода, создавайте повторно используемые компоненты и модули.

Недостаточная документация и обучение:

  • Проблема: Отсутствие четких руководств и документации для новых участников команды.
  • Исправление:
    • Создайте подробную документацию по правилам и стандартам BEM для вашего проекта.
    • Обучайте новых членов команды методологии BEM и правилам его использования.

Неэффективная организация файлов и структуры проекта:

  • Проблема: Блоки, элементы и стили расположены хаотично, что затрудняет их поиск и поддержку.
  • Исправление:
    • Организуйте файловую структуру проекта согласно принципам BEM.
    • Размещайте файлы стилей и скриптов для каждого блока и элемента в отдельных папках.

Главное, что нужно знать

Что такое BEM:

  • BEM — это методология именования классов в HTML и CSS, разработанная Яндексом. Она структурирует код, используя три основных концепта: блоки (block), элементы (element) и модификаторы (modifier). BEM способствует созданию модульного и масштабируемого кода в веб-разработке.

Элементы BEM:

  • Блок (Block): Независимый компонент, который может содержать другие блоки или элементы. Примеры: header, menu, button.
  • Элемент (Element): Части блока, которые не имеют смысла вне контекста блока. Имена элементов формируются с использованием двойного подчёркивания (__). Примеры: header__logo, menu__item.
  • Модификатор (Modifier): Изменения внешнего вида, состояния или поведения блока или элемента. Имена модификаторов формируются с использованием одинарного подчёркивания (_). Примеры: button--primary, menu__item--active.

Преимущества BEM:

  • Улучшает читаемость и поддерживаемость кода благодаря чёткой структуре и именованию классов.
  • Способствует созданию модульного кода, который легко переиспользовать и модифицировать.
  • Повышает эффективность работы в команде, упрощая взаимодействие между разработчиками.

Реализация в проекте:

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

Рекомендованные программы обучения

Разработка, сопровождение и обеспечение безопасности информационных системimageВеб-разработкаimageFullstack-разработчикimageРазработка блокчейн-приложенийimageРазработка и тестирование программного обеспеченияimageВеб-разработчикimageПрограммистimageПрограммирование на языке PythonimageПрограммное обеспечение, Интернет и облачные технологииimageПрограммная инженерия с использованием мультимедиаimage

Адреса поступления

ЦФО
Москва, Ленинградский пр., д. 80Г
Сокол
+7 495 800–10–01 8 800 100–00–11
banner
Подберите программу обучения, узнайте проходной балл и начните учиться бесплатно
download
Всё самое важное — в личном кабинете абитуриента
Войти
школаколледжуниверситетбизнес-образованиекурсы
image
1000+программ
Образованиеhatдляhatкарьеры

В «Синергии» 1000+ образовательных программ

У нас есть решения для любого уровня, профессии и цели:
01Сформировать прочный фундамент знаний в&nbsp;школе
Сформировать прочный фундамент знаний в школе
02Получить качест&shy;венное среднее профессио&shy;нальное или&nbsp;высшее образование
Получить качест­венное среднее профессио­нальное или высшее образование
03Освоить новую специальность на&nbsp;<span style="white-space:nowrap;">онлайн-курсах</span>
Освоить новую специальность на онлайн-курсах
04Пройти результативную переподготовку или&nbsp;повысить квалификацию
Пройти результативную переподготовку или повысить квалификацию
05Достичь экспертного управленческого уровня с&nbsp;<span style="white-space:nowrap;">программой</span> MBA
Достичь экспертного управленческого уровня с программой MBA
Качество образования подтвержденомеждународными стандартами:
мы состоим в Европейском фонде гарантии качества электронного обучения и Великой хартии европейских университетов, участвуем в Международной ассоциации университетов при ЮНЕСКО
Подобрать программу обучения