HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Именование - сложная задача как для начинающих, так и для опытных разработчиков. Выбор правильного названия элемента - залог читабельной вёрстки, при которой она понятна при одном взгляде на классы. Неважно, что вы используете в работе: БЭМ, OOCSS, SMACSS, или не используете методологий вообще - выбирайте имя с умом.</p>
1 <p>Именование - сложная задача как для начинающих, так и для опытных разработчиков. Выбор правильного названия элемента - залог читабельной вёрстки, при которой она понятна при одном взгляде на классы. Неважно, что вы используете в работе: БЭМ, OOCSS, SMACSS, или не используете методологий вообще - выбирайте имя с умом.</p>
2 <p>Что же отличает хорошее именование от плохого? Идеально, если класс раскрывает суть блока. Если это компонент, то он должен быть назван так, чтобы по нему можно было понять, какую структуру он представляет. Если это класс с одним единственным стилем, который не привязан к компоненту, как это делается в Atomic CSS, такой класс должен полностью описывать свойство, которое используется.</p>
2 <p>Что же отличает хорошее именование от плохого? Идеально, если класс раскрывает суть блока. Если это компонент, то он должен быть назван так, чтобы по нему можно было понять, какую структуру он представляет. Если это класс с одним единственным стилем, который не привязан к компоненту, как это делается в Atomic CSS, такой класс должен полностью описывать свойство, которое используется.</p>
3 <h2>Содержание</h2>
3 <h2>Содержание</h2>
4 <ul><li><a>Смысл</a></li>
4 <ul><li><a>Смысл</a></li>
5 <li><a>Нотация</a></li>
5 <li><a>Нотация</a></li>
6 <li><a>Действие/вид/родитель</a></li>
6 <li><a>Действие/вид/родитель</a></li>
7 <li><a>Количество</a></li>
7 <li><a>Количество</a></li>
8 <li><a>Вывод</a></li>
8 <li><a>Вывод</a></li>
9 </ul><h2>Смысл</h2>
9 </ul><h2>Смысл</h2>
10 <p>Это одна из самых частых ошибок в именовании. Встретив в HTML класс section-top, можно запутаться:</p>
10 <p>Это одна из самых частых ошибок в именовании. Встретив в HTML класс section-top, можно запутаться:</p>
11 <ul><li>Это первая секция?</li>
11 <ul><li>Это первая секция?</li>
12 <li>Это область заголовка внутри секции?</li>
12 <li>Это область заголовка внутри секции?</li>
13 <li>Это фиксированная секция?</li>
13 <li>Это фиксированная секция?</li>
14 </ul><p>Без изучения вёрстки и CSS узнать это невозможно.</p>
14 </ul><p>Без изучения вёрстки и CSS узнать это невозможно.</p>
15 <p>Другая проблема: указание порядка нахождения секции в классе. Взгляните на пример:</p>
15 <p>Другая проблема: указание порядка нахождения секции в классе. Взгляните на пример:</p>
16 <p>Сейчас всё расположено логично, проблем не будет. Но вот приходит заказчик и просит поменять секции местами. Теперь вёрстка выглядит так:</p>
16 <p>Сейчас всё расположено логично, проблем не будет. Но вот приходит заказчик и просит поменять секции местами. Теперь вёрстка выглядит так:</p>
17 <p>Такое изменение изменило представление о том, как структурирована вёрстка. Если изменение месторасположения блока ломает логический порядок из-за названий классов, то стоит пересмотреть подход к именованию.</p>
17 <p>Такое изменение изменило представление о том, как структурирована вёрстка. Если изменение месторасположения блока ломает логический порядок из-за названий классов, то стоит пересмотреть подход к именованию.</p>
18 <p>Опишите то, о чём секция, если в этом есть необходимость. Если секция содержит список цен, то класс pricing, pricing_section будет хорошим вариантом. Если стили этих классов совпадают, то имеет смысл создать отдельный класс, например container или section-wrapper.</p>
18 <p>Опишите то, о чём секция, если в этом есть необходимость. Если секция содержит список цен, то класс pricing, pricing_section будет хорошим вариантом. Если стили этих классов совпадают, то имеет смысл создать отдельный класс, например container или section-wrapper.</p>
19 <blockquote><h3>Также полезно</h3>
19 <blockquote><h3>Также полезно</h3>
20 <p>Совершенный код:<a>ошибки именования в программировании I</a>.</p>
20 <p>Совершенный код:<a>ошибки именования в программировании I</a>.</p>
21 </blockquote><h2>Нотация</h2>
21 </blockquote><h2>Нотация</h2>
22 <p>Разные подходы к написанию CSS породили разные варианты написания классов. Это могут быть:</p>
22 <p>Разные подходы к написанию CSS породили разные варианты написания классов. Это могут быть:</p>
23 <ul><li>button-blue</li>
23 <ul><li>button-blue</li>
24 <li>button_blue</li>
24 <li>button_blue</li>
25 <li>button--blue</li>
25 <li>button--blue</li>
26 </ul><p>и так далее.</p>
26 </ul><p>и так далее.</p>
27 <p>В CSS нет строгих правил именования, поэтому вы можете использовать любой вариант, который нравится. При этом некоторые разработчики используют разные типы именования в пределах одного проекта. По такому CSS гораздо труднее ориентироваться. Использование такого подхода по непонятным причинам распространено.</p>
27 <p>В CSS нет строгих правил именования, поэтому вы можете использовать любой вариант, который нравится. При этом некоторые разработчики используют разные типы именования в пределах одного проекта. По такому CSS гораздо труднее ориентироваться. Использование такого подхода по непонятным причинам распространено.</p>
28 <p>Найти логику такого построения невозможно. Она понятна только тому, кто эти классы создавал. Возможно, какие-то классы уже заняты в проекте, возможно, некоторые классы писал другой разработчик.</p>
28 <p>Найти логику такого построения невозможно. Она понятна только тому, кто эти классы создавал. Возможно, какие-то классы уже заняты в проекте, возможно, некоторые классы писал другой разработчик.</p>
29 <p>Проблема именования распространена при использовании фреймворков, например,<a>Bootstrap</a>. Используя привычное именование, верстальщик применяет стандартные компоненты фреймворка и не думает о том, чтобы привести именование к единому знаменателю.</p>
29 <p>Проблема именования распространена при использовании фреймворков, например,<a>Bootstrap</a>. Используя привычное именование, верстальщик применяет стандартные компоненты фреймворка и не думает о том, чтобы привести именование к единому знаменателю.</p>
30 <p>Такой подход создаёт проблемы для разработчиков, которые будут поддерживать проект в будущем.</p>
30 <p>Такой подход создаёт проблемы для разработчиков, которые будут поддерживать проект в будущем.</p>
31 <p>Вспомним, что регистр учитывается при создании классов. Использование единого подхода важно и здесь. Стараясь полностью описать класс, разработчик хочет указать как можно больше слов. В результате встречаются такие классы: .btnInOrderForm. Сам по себе такой подход возможен, хоть и не распространён в вёрстке. При этом важно соблюдать последовательность. Если вы используете верхний регистр, то и другие классы из нескольких слов должны следовать этому подходу.</p>
31 <p>Вспомним, что регистр учитывается при создании классов. Использование единого подхода важно и здесь. Стараясь полностью описать класс, разработчик хочет указать как можно больше слов. В результате встречаются такие классы: .btnInOrderForm. Сам по себе такой подход возможен, хоть и не распространён в вёрстке. При этом важно соблюдать последовательность. Если вы используете верхний регистр, то и другие классы из нескольких слов должны следовать этому подходу.</p>
32 <h2>Действие/вид/родитель</h2>
32 <h2>Действие/вид/родитель</h2>
33 <p>Большинство хороших именований описывают один из этих критериев. Вне зависимости от методологии, вы описываете что-то из этого списка:</p>
33 <p>Большинство хороших именований описывают один из этих критериев. Вне зависимости от методологии, вы описываете что-то из этого списка:</p>
34 <ul><li>Действие. Часто классы, указывающие на действие применяются к элементам, с которыми можно взаимодействовать. Для кнопки в форме это может быть класс .btn-send, или класс slider-next для области переключения слайда.</li>
34 <ul><li>Действие. Часто классы, указывающие на действие применяются к элементам, с которыми можно взаимодействовать. Для кнопки в форме это может быть класс .btn-send, или класс slider-next для области переключения слайда.</li>
35 </ul><ul><li>Вид. Такие классы иногда называют "класс-модификатор". Их цель состоит в точечном изменении элемента. Это может быть визуальный вид, состояние или поведение. Такие классы не одиноки, они всегда являются надстройками над классами. Если основной класс .btn, то классами-модификаторами могут быть .btn-green, btn-disable, btn-big.</li>
35 </ul><ul><li>Вид. Такие классы иногда называют "класс-модификатор". Их цель состоит в точечном изменении элемента. Это может быть визуальный вид, состояние или поведение. Такие классы не одиноки, они всегда являются надстройками над классами. Если основной класс .btn, то классами-модификаторами могут быть .btn-green, btn-disable, btn-big.</li>
36 </ul><ul><li>Родитель. Элементы с такими классами явно описывают то, чьими потомками они являются. Если кнопка лежит в форме с классом order-form, то кнопка может иметь класс order-form__button</li>
36 </ul><ul><li>Родитель. Элементы с такими классами явно описывают то, чьими потомками они являются. Если кнопка лежит в форме с классом order-form, то кнопка может иметь класс order-form__button</li>
37 </ul><h2>Количество</h2>
37 </ul><h2>Количество</h2>
38 <p>Этот пункт интуитивно ясный, но редко выполняемый. Если обёртка подразумевает множество одинаковых элементов внутри, то стоит указать это в имени класса с помощью множественного числа.</p>
38 <p>Этот пункт интуитивно ясный, но редко выполняемый. Если обёртка подразумевает множество одинаковых элементов внутри, то стоит указать это в имени класса с помощью множественного числа.</p>
39 <p>Чем плоха эта вёрстка? Представьте, что вы смотрите в редакторе, при этом схлопнув вложенности. В этом случае вёрстка внутри редактора будет выглядеть следующим образом:</p>
39 <p>Чем плоха эта вёрстка? Представьте, что вы смотрите в редакторе, при этом схлопнув вложенности. В этом случае вёрстка внутри редактора будет выглядеть следующим образом:</p>
40 <p>О чём можно подумать, увидев класс .catalog-item? Скорее этот элемент отвечает за конкретную карточку товара, а не за группу товаров. Добавление множественного числа сразу решит эту проблему:</p>
40 <p>О чём можно подумать, увидев класс .catalog-item? Скорее этот элемент отвечает за конкретную карточку товара, а не за группу товаров. Добавление множественного числа сразу решит эту проблему:</p>
41 <p>Теперь нет неоднозначности - класс чётко говорит о том, что внутри не один элемент, а группа элементов.</p>
41 <p>Теперь нет неоднозначности - класс чётко говорит о том, что внутри не один элемент, а группа элементов.</p>
42 <h2>Вывод</h2>
42 <h2>Вывод</h2>
43 <ul><li>Определяйте название класса исходя из того, что за элемент перед вами.</li>
43 <ul><li>Определяйте название класса исходя из того, что за элемент перед вами.</li>
44 <li>Не используйте абстрактные имена блоков, такие как .block, .block-1, .block-top и так далее.</li>
44 <li>Не используйте абстрактные имена блоков, такие как .block, .block-1, .block-top и так далее.</li>
45 <li>Используйте один подход к именованию внутри одного проекта.</li>
45 <li>Используйте один подход к именованию внутри одного проекта.</li>
46 </ul>
46 </ul>