0. Прежде чем думать о названии класса, выберите подходящее название для HTML-элементов
Если это поле, используйте элемент
inputЧитать HTML-документ будет гораздо легче.
Пример:
<div class='submit'/> <!-- Чёёё? --> <input class='submit'/> <!-- Аа, ясно -->
Источник: Рафаэль Гоитер (французская статья)
1. Назначайте классы как можно ниже по DOM-дереву
Это сказывается на названии классов. Всегда пишите название класса прямо в HTML-элементе, для которого нужно оформление, даже если на это приходится потратить дополнительные усилия. Если не ясно почему, почитайте нижеприведённую статью Криса Койера.
Пример:
<main class='mainly'> <p>Lorem ipsum</p> <!-- Я хотел бы застилизовать этот абзац --> </main>
main.mainly p { /* Не делайте этого */ } /* Вместо этого присвойте название класса p : <p class='paragraphly' /> */ .paragraphly { }
Источник: Крис Койер
2. Называйте классы по содержимому
Пример:
.c-header-logo { /* Просто прочитав это название, я догадался, что этот селектор указывает на лого в шапке. */ }
Источник: phpied.com
3. Не называйте класс по содержимому, если картинка нагляднее
Скажем, лого шапки на самом деле выглядит так:

Тогда не называйте его header-logo.
.guillotine { /* О, сразу видно, что мы хотим стилизовать */ }
4. Попробуйте суффикс -like для лучшей переносимости кода.
Пример:
h3, .h3-like { /* какое-то оформление */ }
<p class='h3-like'> <!-- Я НЕ заголовок h3, но поскольку дизайнер велел мне выглядеть так же, я не могу жаловаться на своё название класса --> </p>
Источник: KNACSS v4
5. Не используйте верблюжийРегистр
Это затрудняет чтение
Пример:
.navToOneModuleICreated { font-size:2em; } /* против */ .nav-to-one-module-i-created { font-size:2em; }
Источник: Гарри Робертс
6. Пробуйте БЭМ
На сегодняшний день это одно из самых популярных соглашений.
- Поначалу он кажется странным, но не бойтесь.
- Порог вхождения очень низкий
- Можно использовать его уже сейчас в любой части проекта.
- Долгосрочные перспективы колоссальны
(двойной дефис) означает вариант элемента.
(двойное подчёркивание) означает дочерний элемент.
Пример:
<button class='btn btn--warning'> <!-- oдин из вариантов .btn — .btn--warning --> <div class='btn__text'></div> <!-- один из дочерних элементов .btn — .btn__text--> </button>
.btn--warning { /* Ура! По соглашению я знаю, что код относится к варианту кнопки «warning», даже не заглядывая в HTML-код. Какое облегчение! */ } .btn__text { /* По той же причине я знаю, что эти стили предназначаются для текста в кнопке */ }
Источник: Калиг, пятьдесят оттенков БЭМ
Рекомендовано: Smashing Magazine, боремся с БЭМ
7. Пробуйте ещё страшнее
БЭМ открывает новые возможности, даже если поначалу их соглашения выглядят мерзко.
Тем не менее, такая своеобразность помогает глазу моментально уловить суть происходящего, и в случае БЭМ, поверьте, это работает.
Теперь можете пробовать более мерзкое соглашение, пока вы придерживаетесь его на всём проекте.
Пример:
.DIMENSIONS_OF_mycomponent { /* Куда ещё противнее. Зато теперь понятнее, о чём речь. */ /* Я использую его для классов-заготовок в SASS. */ /* Но всё же не злоупотребляйте этим правилом. */ }
8. Не сокращайте описывающие слова
Помимо уже устоявшихся
nav, txt, url… следует избегать любых аббревиатур.Источник: phpied.com
9. Пробуйте использовать только одну букву в качестве осмысленного префикса
В случае визуального компонента начинайте с
c-, а в случае объекта (напр. макет) — с o-, мне просто нравится этот трюк Гарри Робертса.Пример:
<button class='o-layout'> <div class='o-layout-item o-grid c-button'></div> <!-- С первого взгляда на HTML видно, что за что отвечает.-> </button>
Источник: Гарри Робертс
10. Пробуйте [], когда слишком много классов одного типа
Этот небольшой трюк помогает быстрее изучить HTML. Заметьте, в CSS-файле нет классов
.[ и .], они нужны только здесь, чтобы помочь другим читать HTML.Пример:
<button class='[ o-layout ]'> <div class='[ o-layout-item o-layout-item--first ] c-button'></div> <!-- С первого взгляда на HTML видно, что за что отвечает.--> </button>
Источник: исходный код «Inuit Kitchen Sink»
11. Используйте префикс js-, если он используется только для JavaScript
Если Javascript требуется выбрать элемент, не полагайтесь на CSS-стили. Задайте специальный префикс вроде
js-.Пример:
<button class='js-click-me'> <!-- При беглом просмотре HTML я понимаю, что у этой кнопки нет CSS-селектора для оформления. Но JavaScript использует её, видимо, чтобы поймать какое-то событие. --> </button>
Источник: Дерик Бейли, книга по marionnette.js
12. Старайтесь отделить родительский элемент от дочернего
Если у класса слишком много обязанностей, разделите его на 2 отдельных свойства.
Пример:
(плохо)
<button class='a'> <!-- Этот класс ниже включает сочетание свойств, некоторые из которых участвуют в отношении a-b, а некоторые — в отношении b-c, CSS-файл будет трудно читать.--> <div class='child-of-a-and-parent-of-c'> <div class='c'> </div> </div> </button>
(хорошо)
<button class='a'> <!-- Разделите на 2 класса--> <div class='child-of-a parent-of-c'> <div class='c'> </div> </div> </button>
13. Несемантические классы должны явно описывать свои свойства.
Большинство из них содержат только одно свойство, и незачем его скрывать.
.horizontal-alignment { /* Не делайте этого. Выровнять по горизонтали можно разными способами, но при виде этого селектора в HTML-файле совершенно не ясно, КАК ИМЕННО это сделано. */ text-align: center; } /* Предпочитайте этот способ. Смотрите выше про использование БЭМ и односимвольного префикса */ .u-text-align--center { text-align: center; }
14. Явные хаки (I)
Если вы не довольны вашем CSS-селектором, скажите это всем.
Это произойдёт в любом случае, даже с лучшими CSSупергеро(ин)ями, поэтому не стыдитесь этого.
Подберите в вашей команде слово, подходящее для таких случаев, и придерживайтесь его на протяжении всего проекта.
Лично я использую слово «HACK», потому что IDE Atom его автоматически подсвечивает.
Пример:
.my-component { margin-left: -7px; /* ХАК здесь: магическое число, нужное, чтобы компенсировать пробел */ }
15. Явные хаки (II)
Еще толковый вариант — собрать весь код со «странностями» в отдельный файл, shame.css
Опять же, Гарри Робертс подсказал
Источник: Гарри Робертс
16. Старайтесь избегать более двух слов для одного имени
Название должно говорить само за себя, в одно-два слова, иначе код будет трудно поддерживать.
Пример:
.button { /* Хорошо */ } .dropdown-button { /* Всё ещё хорошо */ } .dropdown-button-part-one { /* Хм, по-прежнему хорошо, но будет нечитаемым при добавлении дочернего элемента, например: */ } .dropdown-button-part-one__button-admin { /* Ой, всё!!! */ }
17. Используйте атрибут data-state для указания состояния компонента
Манипуляция состоянием — далеко не редкость. Это происходит насколько часто, что специальный атрибут для состояния экономит время и силы в долгосрочной перспективе.
Пример:
<button class='c-button c-button--warning is-active'> <!-- Не делайте этого --> </button> <button class='c-button c-button--warning' data-state='is-active'> <!-- Так-то лучше. Я удалил объявление класа, это гарантирует единственность состояния, и для тех, кто использует Sass, это сделает код чище.--> </button>
Источник: к сожалению, не могу вспомнить, кто об этом писал, но его совет оказался весьма полезным.
18. Используйте префиксы has- или is- для состояния
Манипуляция состоянием происходит очень часто (ещё раз). Поэтому придерживаться строгого соглашения наименования для состояния будет очень полезно.
Пример:
.activated { /* Не делайте этого. Я не совсем понимаю, о чём вы говорите? */ } .is-activated { /* Да, вы оформляете состояние. */ }
Источник: оформление кода в Mobify
19. Используйте дефис в качестве префикса при сочетании нескольких состояний
Нужно избегать сочетания состояний любой ценой. А когда это невозможно, на помощь придёт очень полезный трюк Бена Смифета.
Пример:
<button class="btn -color-red -size-large -shape-round"></button>
Источник: Бен Смифет
20. При объявлении селектора в HTML придерживайтесь одиночных кавычек вместо двойных
Это упрощает чтение документа.
Пример:
<button class="c-button"> <!-- ПЛОХОЙ ПРИМЕР: в нём используются " вместо '. В этом крошечном примере это не играет особой роли, но когда дело касается сотни селекторов в HTML-файле, одиночные кавычки — лучшая идея. --> </button> <button class='c-button'> <!-- Хорошо!--> </button>
Источник: я узнал это, когда работал с командой Predicsis
21. Не следуйте правилам
Я попытался дать некоторые рекомендации, основанные на личном опыте и статьях, которые оказались для меня наиболее полезными.
Я не говорю, что всё это пригодится и в вашем случае, поэтому мой наилучший совет:
1) Постарайтесь улучшать своё именование классов, 2) соблюдайте его последовательно для данного проекта, 3) но избегайте переусложнения.
Если правило вам не подходит, просто пропустите его
Наслаждайтесь!
Особая благодарность @HugoGiraudel, @kaelig и @gaetanbt за их отзывы.

