
Каждый класс в CSS выполняет роль метки для конкретного элемента, и от его названия зависит удобство поддержки и расширения кода. Классы с длинными или непоследовательными именами увеличивают время поиска нужного правила и повышают риск ошибок при редактировании стилей. Рекомендуется использовать имена длиной не более 3–4 слов, отражающие назначение элемента, а не его визуальный стиль.
Структурирование классов через методологию BEM (Block-Element-Modifier) позволяет явно обозначать принадлежность элемента к блоку и его состояние. Например, menu__item—active сразу показывает, что элемент относится к меню, является пунктом и находится в активном состоянии. Это сокращает необходимость заглядывать в HTML или CSS для понимания роли класса.
Следует избегать привязки имен к конкретным цветам, размерам или расположению, например red-button или left-box. Такие классы быстро теряют смысл при изменении дизайна. Лучше использовать описательные термины, отражающие функцию: submit-button, sidebar, notification.
Согласованность в использовании разделителей слов также повышает читаемость. Дефис (—) подходит для простых классов, нижнее подчёркивание (_) или camelCase – для элементов и модификаторов внутри блоков. Конкретное правило стоит зафиксировать в проекте, чтобы весь код оставался единообразным и понятным для команды.
Выбор читаемых и однозначных названий классов

Названия классов должны отражать функцию элемента, а не его внешний вид. Например, button-submit показывает, что элемент выполняет действие отправки, в отличие от red-button, где цвет может измениться. Использование понятных глаголов и существительных сокращает время понимания кода и уменьшает ошибки.
Длина класса рекомендуется от 2 до 4 слов, разделённых дефисами, чтобы не перегружать HTML. Слишком короткие имена (btn, itm) вызывают неоднозначность, а слишком длинные затрудняют работу с редакторами и системами контроля версий.
Для контроля читаемости полезно вести таблицу стандартных префиксов и терминов в проекте:
| Тип элемента | Пример префикса | Назначение |
|---|---|---|
| Кнопка | btn- | Определяет элемент как кнопку действия |
| Меню | menu- | Указывает на блок меню или его элементы |
| Форма | form- | Обозначает контейнер формы или поля ввода |
| Уведомление | notif- | Используется для всплывающих сообщений или предупреждений |
Следует избегать аббревиатур и внутренних жаргонов, непонятных другим разработчикам. Чёткая документация с таблицей стандартов префиксов и примеров классов помогает команде соблюдать единообразие и ускоряет поиск нужного кода.
Использование BEM для структуры и вложенности

Методология BEM (Block-Element-Modifier) разделяет класс на три части: блок, элемент и модификатор. Блок – самостоятельный компонент интерфейса, элемент – часть блока, а модификатор обозначает состояние или вариацию. Например, card__title—highlighted показывает, что это заголовок внутри блока карточки с модификацией выделения.
Для вложенных элементов рекомендуется использовать двойное подчёркивание (__) для связи с блоком и одинарное дефисное выделение (—) для модификаторов. Это облегчает понимание и предотвращает конфликты имён в крупных проектах.
Каждый блок должен быть независимым и не полагаться на стили других блоков. Элементы не должны использовать классы родителя в селекторах CSS напрямую, а только через имя блока. Такая структура упрощает повторное использование компонентов и упрощает рефакторинг.
Рекомендуется фиксировать шаблон имен BEM в документации проекта и проверять соответствие при код-ревью. Например:
header__logo – логотип в блоке шапки;
header__nav—expanded – навигация в блоке шапки в развернутом состоянии;
footer__link – ссылка внутри блока футера.
Следуя BEM, можно создавать код, который остаётся предсказуемым и структурированным даже при росте проекта и добавлении новых компонентов.
Соглашения по разделению слов: дефис, нижнее подчёркивание, camelCase

Выбор способа разделения слов в названиях классов влияет на читаемость и поддержку кода. Дефис (—) используется для простых классов и блоков: main-menu, footer-links. Он хорошо читается в HTML и CSS и подходит для стандартных элементов.
Нижнее подчёркивание (_) применяется для внутренних элементов блока или связок, особенно в методологии BEM: card__title, form__input. Оно визуально отделяет элемент от блока и помогает быстро понять структуру компонента.
CamelCase (camelCase) удобно использовать для модификаторов состояния или динамических классов в JavaScript: isActive, hasError. Такой формат позволяет отличать статические и программно управляемые классы.
В проекте важно выбрать один основной способ разделения слов для блоков и элементы, фиксировать его в документации и применять последовательно. Несогласованное использование разных форматов усложняет поиск классов и увеличивает вероятность дублирования.
Прописные и строчные буквы: когда что применять
В CSS-классах рекомендуется использовать только строчные буквы для блоков и элементов: header, main-menu, form__input. Это снижает вероятность ошибок при работе в файловых системах и инструментах контроля версий, где регистр учитывается.
Прописные буквы применяются преимущественно для camelCase модификаторов или динамических классов, создаваемых через JavaScript: isActive, hasError. Они визуально выделяют состояние элемента и показывают, что класс управляется программно.
Смешивание регистров в статических классах усложняет поддержку кода и увеличивает риск дублирования. Например, Button и button воспринимаются как разные имена, что может привести к конфликтам при переиспользовании стилей.
Для консистентности проекта стоит зафиксировать правила регистра в документации и проверять их при код-ревью. Чёткая структура с единым регистром облегчает поиск классов и автоматизацию сборки CSS.
Именование для состояния элементов: активный, скрытый, ошибочный
Для описания состояния элементов лучше использовать отдельные модификаторы вместо изменения базового класса. Это позволяет управлять стилями динамически и сохранять читаемость кода. Например, button—active, form__input—error, menu__item—hidden.
Рекомендуется фиксировать набор стандартных состояний для всех элементов проекта. Это упрощает работу с командами и снижает вероятность создания дублирующих или противоречивых классов.
Пример стандартизации названий состояний:
| Состояние | Пример класса | Назначение |
|---|---|---|
| Активный | —active | Элемент выбран или взаимодействует с пользователем |
| Скрытый | —hidden | Элемент временно не отображается на странице |
| Ошибка | —error | Поле ввода или компонент содержит некорректные данные |
| Заблокирован | —disabled | Элемент недоступен для взаимодействия |
Использование единых модификаторов для состояний позволяет быстро применять и изменять стили через CSS и JavaScript, а также делает код предсказуемым и понятным для всех участников проекта.
Отдельные классы для повторно используемых блоков
Для компонентов, которые встречаются на нескольких страницах или в разных частях интерфейса, рекомендуется создавать отдельные классы, не зависящие от контекста родителя. Это повышает повторное использование и упрощает поддержку стилей.
Примеры повторно используемых блоков:
- button – универсальная кнопка с базовым стилем
- card – контейнер для карточек с изображением и текстом
- modal – всплывающее окно с возможностью переиспользования на разных страницах
Рекомендации по работе с такими блоками:
- Создавать отдельный CSS-класс для каждого блока.
- Использовать модификаторы для изменения состояния или вариации: button—primary, card—featured.
- Не связывать блок с родительским контейнером через селекторы CSS: header .card усложняет переиспользование.
- Документировать список повторно используемых блоков с их модификаторами и назначением.
Следуя этим принципам, один и тот же компонент можно использовать на всех страницах без дублирования кода и риска конфликтов стилей.
Избегание привязки к конкретной реализации и стилям
Названия классов не должны описывать визуальные характеристики, которые могут измениться в будущем. Например, red-button или large-box создают зависимость от текущего дизайна и усложняют поддержку при изменении цветовой схемы или размеров.
Лучше использовать описательные имена по назначению элемента или его роли: submit-button, sidebar, notification. Такие классы остаются актуальными независимо от изменений стиля.
Рекомендации для практического применения:
- Разделять функциональные и декоративные классы. Декоративные стили можно задавать через вспомогательные классы: text-center, bg-gray.
- Не включать цифры, цвета или размеры в названия блоков и элементов.
- Использовать модификаторы для состояния и вариаций вместо описания визуального эффекта: button—disabled, card—highlighted.
- Документировать стандарты именования в проекте, чтобы команда соблюдала единый подход.
Такой подход уменьшает дублирование кода и облегчает масштабирование проекта без изменения структуры HTML и CSS.
Проверка читаемости и понимания кода командой
Читаемость CSS-классов важно проверять не только при разработке, но и в процессе совместной работы команды. Одно и то же название должно быть понятно любому разработчику, даже если он впервые работает с проектом.
Рекомендации по проверке:
- Проводить регулярные код-ревью с акцентом на имена классов.
- Использовать стандартизированные списки блоков, элементов и модификаторов.
- Составлять документацию с примерами использования классов.
- Проверять классы на однозначность и отсутствие дублирующих или пересекающихся имён.
Процесс можно формализовать через чек-лист:
- Название отражает роль элемента, а не визуальный стиль.
- Следует выбранной методологии (BEM, атомарные классы, camelCase для модификаторов).
- Длина класса не превышает 3–4 слов.
- Отсутствуют сокращения, непонятные другим участникам команды.
- Модификаторы состояния оформлены единообразно (—active, —error).
Регулярная проверка повышает качество кода, облегчает поддержку и позволяет новым участникам команды быстро ориентироваться в проекте.
Вопрос-ответ:
Почему стоит использовать методологию BEM для имен классов?
Методология BEM разделяет блоки, элементы и модификаторы, что делает структуру кода прозрачной. Например, menu__item—active сразу показывает, что это элемент меню с активным состоянием. Такой подход снижает вероятность конфликтов имён и упрощает повторное использование компонентов на разных страницах.
Как выбрать между дефисом, нижним подчёркиванием и camelCase в названиях классов?
Дефис удобен для блоков и простых элементов (main-menu, footer-links), нижнее подчёркивание используется для элементов внутри блока в BEM (card__title, form__input), camelCase — для модификаторов состояния или динамических классов в JavaScript (isActive, hasError). Важно выбрать один формат для блоков и элементов и применять его последовательно по всему проекту.
Как правильно именовать классы для состояний элементов?
Состояния следует оформлять через модификаторы, а не менять базовое имя класса. Примеры: button—active для активной кнопки, form__input—error для поля с ошибкой, menu__item—hidden для скрытого пункта. Это упрощает управление стилями через CSS и JavaScript и позволяет избежать дублирования классов.
Нужно ли включать цвет или размер в название класса?
Лучше избегать привязки к конкретной реализации. Классы вроде red-button или large-box быстро устаревают при изменении дизайна. Названия должны отражать назначение: submit-button, sidebar, notification. Если требуется визуальная настройка, можно использовать отдельные вспомогательные классы, например text-center или bg-gray.
Как убедиться, что имена классов понятны всей команде?
Для проверки читаемости полезно проводить код-ревью с акцентом на имена классов, вести документацию с примерами и стандартами блоков, элементов и модификаторов. Чек-лист может включать: отражение роли элемента в имени, соответствие выбранной методологии, длина имени до 3–4 слов, отсутствие непонятных сокращений и единообразие модификаторов (—active, —error). Это ускоряет работу с кодом и снижает количество ошибок.
Как правильно организовать имена классов, чтобы код оставался понятным при масштабировании проекта?
Для масштабируемого проекта важно использовать последовательную методологию именования, например BEM, где блоки, элементы и модификаторы разделяются чёткими символами: block__element—modifier. Каждое имя должно отражать функцию элемента, а не его визуальный стиль, чтобы изменение дизайна не требовало редактирования HTML и CSS. Для повторно используемых блоков создаются отдельные классы, а состояния элементов обозначаются модификаторами (—active, —error). Дополнительно рекомендуется вести документацию по стандартным блокам и модификаторам, проводить код-ревью на читаемость и избегать сокращений, непонятных другим участникам команды. Такой подход позволяет добавлять новые компоненты, менять визуальные свойства и расширять проект без путаницы в названиях классов.
