13.8 C
Москва
17.10.2026
class="col col-md-3 pricing-items--blue">

Такой подход создаёт проблемы для разработчиков, которые будут поддерживать проект в будущем.

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

Действие/вид/родитель

Большинство хороших именований описывают один из этих критериев. Вне зависимости от методологии, вы описываете что-то из этого списка:

  • Действие. Часто классы, указывающие на действие применяются к элементам, с которыми можно взаимодействовать. Для кнопки в форме это может быть класс .btn-send , или класс slider-next для области переключения слайда.
 action="/">  class="btn-send">Отправить  
  • Вид. Такие классы иногда называют «класс-модификатор». Их цель состоит в точечном изменении элемента. Это может быть визуальный вид, состояние или поведение. Такие классы не одиноки, они всегда являются надстройками над классами. Если основной класс .btn , то классами-модификаторами могут быть .btn-green , btn-disable , btn-big .
 action="/">  class="btn btn-blue">Отправить  
  • Родитель. Элементы с такими классами явно описывают то, чьими потомками они являются. Если кнопка лежит в форме с классом order-form , то кнопка может иметь класс order-form__button
 action="/" class="order-form">  class="order-form__button">Отправить  

Изучайте вёрстку на Хекслете В рамках профессии «Верстальщик» мы познакомим вас с базовыми знаниями и принципами работы с HTML и CSS, расскажем о современных подходах и инструментах вёрстки, включая Flex, Grid, Sass, Bootstrap. Первые курсы в профессии можно пройти бесплатно. Регистрируйтесь и начинайте учиться!

Количество

Этот пункт интуитивно ясный, но редко выполняемый. Если обёртка подразумевает множество одинаковых элементов внутри, то стоит указать это в имени класса с помощью множественного числа.

 class="catalog-item">  class="item">
class="item">
class="item">
class="item"> class="item">

Чем плоха эта вёрстка? Представьте, что вы смотрите в редакторе, при этом схлопнув вложенности. В этом случае вёрстка внутри редактора будет выглядеть следующим образом:

 class="catalog-item">. 

О чём можно подумать, увидев класс .catalog-item ? Скорее этот элемент отвечает за конкретную карточку товара, а не за группу товаров. Добавление множественного числа сразу решит эту проблему:

 class="catalog-items">. 

Теперь нет неоднозначности — класс чётко говорит о том, что внутри не один элемент, а группа элементов.

Вывод

БЭМ нейминг для HTML верстки сайтов

Если давать имена CSS классам не задумываясь, то вскоре можно обнаружить в проекте такие имена как text-1, text-2 и text-3. Или например button-1, button-2 и так далее. Чем больше растет проект и чем чаще в проекте встречаются похожие, но с небольшими различиями элементы, тем сложнее придумать им название так чтобы в названиях CSS классов можно было легко ориентироваться. БЭМ нейминг решает эту задачу.

Сразу отмечу что методология это рекомендации к тому как придумывать CSS имена. Нарушение методологии не приведет к технической ошибке, однако ухудшит читаемость вашего кода другими специалистами верстальщиками.

Идея БЭМ нейминга состоит в том чтобы с помощью имен CSS классов определить независимые блоки, обозначить их элементы и определить возможные модификации. Рассмотрим подробнее.

Примечание

В данной статье описывается альтернативный синтаксис БЭМ нейминга, который называется Two Dashes. Этот стиль визуально более выразителен и легче воспринимается для чтения. Описание стиля Two Dashes в официальной документации.

Правила формирования имен классов в БЭМ нейминге

Пример именования по БЭМ неймингу:

.block /* Блок */ .block__element /* Элемент */ .block--modifier /* Модификатор для Блока*/ .block__element--modifier /* Модификатор для Элемента */

Основные понятия БЭМ нейминга

Блоки

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

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

Имя для блока описывается одним или несколькими словами. Несколько слов в имени блока разделяются дефисом -.

Имя блока пишется строчными буквами, не имеет заглавных. В имени используются полные слова, без сокращений.

product_card productCard ProductCaRD s-products btnPrimary Card
product-card section-products header footer button card

Элементы

Элемент — это составная часть блока. Элемент является частью блока и находится внутри него.

Если мы рассмотрим блок карточки с товаром, то его внутренние составные части это и есть элементы данного блока. Например элементами карточки с товаром будут: заголовок карточки, цена, изображение товара, описание товара, кнопка покупки.

Элементы всегда принадлежать какому-либо блоку. Не бывает независимых элементов. Принадлежность элемента к блоку описывается двойным подчеркиванием __ . В имени элемента всегда вначале указывается имя блока к которому он принадлежит, далее после двойного подчеркивания идет имя элемента. block__element

Рассмотрим пример с элементами внутри карточки.

card-title cardPrice card_description card--button
card__title card__price card__description card__button

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

Модификатор — это дополнительный класс который добавляется к html тегу с блоком или элементом. Модификатор — модифицирует (изменяет) отображение блока на странице. Модификатор не может использоваться на теге отдельно от блока или элемента.

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

Например у нас есть блок карточки товара card, и нужно сделать модификатор для карточки товара по распродаже, который будет менять ее фон. Имя такого модификатора будет следующее: card—sale

Давайте придумаем модификатор для элемента. Например в карточке товара есть его цена. Цена это элемент блока card и имеет класс card__price . Модификатором для такого элемента будет класс card__price—sale, в котором мы сначала повторяем имя элемента, далее после двойного дефиса указываем имя модификатора.

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

card_sale card-sale cardSale sale

Правильные имена модификаторов:

card--sale cart__price--sale

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

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

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

 
12000 РУБ

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

 
12000 РУБ

Выводы и пример разметки с БЭМ неймингом

Пример карточки с товаром. Блок — это карточка, её элементы это изображение, название, цена и ссылка «подробнее».

 

Apple Watch

12000 РУБ Подробнее

Пример карточки с товаром с модификатором. Модификатор sale установлен для блока карточки и для элемента с ценой.

 

Apple Watch

12000 РУБ Подробнее

Пример карточки с вложенными элементами. Зачастую вам могу потребоваться дополнительные обертки внутри блока. Они также будут являться его элементами. Важно помнить все элементы внутри блока принадлежат непосредственном этому блоку. Даже если они вложены друг в друга. Не бывает элементов от элементов. Элементы бывают только от блока.

Вложенность в БЭМ нейминге

Блоки. Блоки могут быть вложены друг в друга.

Элементы. Элемент который принадлежит к блоку может находится только в нем. Элемент не может находится за пределами блока к которому он принадлежит.

Элементы одного блока могут находится друг в друге. Элементы можно вкладывать друг в друга, потому как всегда могут понадобиться дополнительные обертки и структурные элементы.

Важно помнить, все элементы внутри блока принадлежат непосредственном этому блоку. Даже если они вложены друг в друга. Не бывает элементов от элементов! Элементы бывают только от блока.

Несмотря на то что price и read-more вложены в details, они все равно являются элементами от блока card.

Исключения

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

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

Пример кода с вынесением в блоки кнопок и заголовков.

Пример блока карточки товара. Кнопка — отдельный блок.

 

Apple Watch

12000 РУБ
Подробнее

Пример блока секции. Заголовок header — отдельный блок. Карточки card и пагинация pagination — также отдельные блоки.

Ссылки

Вы можете поделиться этой статьей в любой из соцсетей, представленных ниже:

Как правильно называть блоки div?

Может вопрос и глупый но все же. Допустим я открыл макет в psd начинаю разделять его на блоки так как не знаю англ языка начинается бред типа block 1 и.т.д. Но я знаю что это не правильно будет говнокод. Поэтому хотел бы узнать как вы называете блоки

1 комментарий

Простой 1 комментарий

SkiperX

Алекс Глебов @SkiperX Куратор тега CSS

да да
суровые имена программистов)
у блока есть смысл все равно
преимущества, клиенты, отзывы и тд
берешь гугл переводчик и переводишь
у элементов item link group cart и тд

слов которыми обзывают элементы не так много
бем помогает не повторяться, добавляя имя блока
если мало названия блока, можно привязать к названию страницы еще, main или inner
тогда точно хватит

Подскажите как правильно называть блоки при верстке, есть ли какие то стандарты?

1) Какие существуют компоненты (почва, платформы, API, SDK и т.п.)?! 2. Как правильно называть это ПО?!
Сразу 2 вoпpoca: 1) Какие существуют в наше время ещё компоненты, кроме указанных: • Microsoft .

Как правильно называть интерфейсы в Java
Здравствуйте! Как правильно именуются интерфейсы в Java. Допустим у меня есть класс Fish.

Как правильно называть некоторые термины?
Читаю статьи на разных сайтах по HTML 5 и не много запуталась. Например на Хабре font — называют.

Регистрация: 24.03.2016
Сообщений: 14
Denis Landar,

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
Основные .wrapper - /*обвертка сайта*/ .hedader - /*верхняя часть сайта*/ .sidebar - /*сайдбар (левая или правая часть сайта)*/ .content - /*тело сайта (центральная часть)*/ .footer - /*нижнаяя часть сайта*/ Название блока (обвертка) .bl .block .box .wrap .inner .container .main Секции блока .head, .header - /*верхняя часть блока например заголовок*/ .cnt, .content, .body - /*тело блока например текс с картинкой*/ .footer - /*нижняя часть блока к примеру дата добавления, категория и т.д.*/ Колонки .column, .col - /*колонка*/ Списки .list .item Позиционные классы .top /* элемент сверху**/ .left /* элемент слева*float:left */ .right /* элемент справа*float:right */ .bottom /* элемент внизу**/ .center /* элемент отцвентрирован* margin:0 auto; */ .fixed - /*фиксированный элемент postion:fixed */ Переходы .next - /*следующий*/ .prev - /*предыдущий*/ .last - /*последний*/ .first - /*первый*/ .back - /*назад*/ .ahead - /*вперед*/ Чисельные .one .thwo .three .four .five Размеры .xs, .tiny - /*очень маленький*/ .s, .small - /*маленький*/ .md, .medium - /*средний */ .lg, .large, .big - /*большой */ .xl, .extra-large - /*очень большой*/ Цвета .danger - /*цвет опасности*/ .default - /*стандартный цвет*/ .warning, .error - /*цве ошибки*/ .success - /*цвет успеха (к примеру верно введн код подтвержления)*/ .primary - /*основной цвет */ Кнопки .button, .btn - /*кнопка*/ .loading - /*загрузка*/ .close - /*закрыть*/ .open - /*открыть*/ .touch - /*клик*/ .edit - /*редактировать*/ .more - /*больше*/ .remove - /*удалить*/ .logout - /*выход*/ .select - /*выбрать*/ .divider - /*выпадающийся список меню*/ .caret, .arrow - /*стрелочка*/ .up - /* Вверх**/ .down - /* Вниз**/ .delete - /* удалить**/ .reply - /*ответить*/ Персона .profile - /*профиль*/ .person - /*человек*/ .ava, .avatar - /*аватарка, картинка*/ .name - /*имя*/ .description - /*описание*/ .address - /*адресс*/ .nickname - /*ник*/ .birthday - /*дата рождения*/ .sex - /*пол*/ .author - /* автор**/ Заголовки .title - /*заголовок*/ .short-title - /*скороченный заголовок*/ .full-title - /*полный заголовок*/ Ссылки .link - /*ссылка*/ Текст .text, .txt, .paragraph - /*текст*/ .info, .information - /*информация*/ Картинки .image, .img - /*картинка*/ .icon, .ic - /*иконка*/ .bg - /*фоновая картинки или цвет*/ Формы .search, .form-search - /*поиск по сайту*/ .input - /*текстовый элемент*/ .form - /*форма*/ .form-group - /*группа элементов формы*/ .help-block - /*текст подсказки*/ .label - /*название элемента формы*/ Катагории .type - /*тип*/ .cat, .category - /*катигория*/ .subcat, .subcategory - /*подкатегория*/ .section - /*раздел*/ .subsection - /*подраздел*/ Видео .video .play - /*пуск*/ .stop - /*стоп*/ .pause - /*пауза*/ Социальные сети .social - /* социальные сети**/ .vk - /*вконтакте*/ .fb - /*фейсбук*/ .twit - /*твиттер*/ .inst - /*инстаграм */ Активные классы .none - /*скрытый элемент*/ .disabled - /*заблокированный*/ .active, .current - /*активный */ .selected - /*выбраный*/ .visible - /*видный элемент*/ .focus - /*нажатый*/ Временные классы .time - /*время*/ .date - /*дата*/ .day - /*день*/ .month - /*месяц*/ .year - /*год*/ Очистка .clear, .clearfix, .clr - /*очистка*/ Разделители .separator, .divide - /*разделитель вертикальный для слов */ .br, .line - /*разделитель горизонтальный для блоков*/ Остоньлые названия .logo - /*лого сайта*/ .new - /*новинка*/ .sale - /*распродажа*/ .feedback - /*обратная связь*/ .support - /*помощь */ .group - /*группа*/ .module - /*модуль*/ .posters - /*пост*/ .form - /*форма*/ .tabs - /*вкладки*/ .slider - /*слайдер*/ .news - /*новости*/ .table - /*таблица*/ .full - /*полный*/ .breadcrumbs - /*Хлебные крошки*/ .pagination, .pager - /*Нумерация страниц*/ .navbar, .nav, .menu, .navigation - /*Навигация (меню)*/ .dropdown - /*выпадающейся меню */ .comment - /*комментарий*/ .subscription - /* Подписка**/ .special - /* особенный элемент**/ .standard - /* стандартный элемент**/ .screens - /* Скрины**/ .rate - /* рейтинг**/ .online - /* онлайн**/ .panel - /* панель**/ .popup - /* попап**/ .version - /* версия**/ .page - /* страница**/ .banners - /* баннер**/ .map - /* Карта**/ .more - /*еще, подробнее*/ .tags - /* тег**/ .price - /* цена**/
Читать:
Как расположить контент по центру css

Похожие записи

Куда заливать отбеливатель в стиральной машине

admin

Как подключить флешку к ipad

admin

Как нарисовать равнобедренный треугольник

admin