По ссылкам находятся конфигурации Академии для этих инструментов. Конфигурации частично покрывают то, что описано в этом стиле кода, и в них нет ничего, что не описано ниже.
+
Это конфигурации Академии. Они проверяют часть правил из этого кодгайда — и только их.
@@ -112,10 +123,7 @@
Код
Группировка файлов
-
-
Файлы схожих типов группируются в папки: картинки, стили, скрипты, шрифты.
-
Если внутри папок файлов становится много или выделяются подгруппы, можно добавить вложенные папки.
-
+
Группируйте файлы по типу: картинки, стили, скрипты, шрифты. Если файлов много — добавляйте вложенные папки.
@@ -165,7 +173,7 @@
Группировка файлов
Форматирование кода
-
Код проекта соответствует параметрам EditorConfig:
+
Настройте EditorConfig, чтобы редактор автоматически форматировал код:
root = true
[*]
@@ -206,14 +214,15 @@
HTML
Базовые части разметки
-
Минимальная обязательная структура HTML-документы состоит из:
+
Каждый HTML-документ содержит:
-
Современный тип документа <!DOCTYPE html>
-
Корневой элемент <html> с языком документа lang
-
Метаинформация <head>
-
Заголовок документа <title>
-
Кодировка документа <meta charset="utf-8">. Кодировка символов на странице явно указана, чтобы обеспечить корректное отображение текста.
-
Тело документа <body>
+
<!DOCTYPE html> — указывает браузеру использовать современный режим рендеринга.
+
<html lang="ru"> — корневой элемент. Атрибут lang помогает скринридерам выбрать правильное произношение.
+
<head> — метаинформация о документе: заголовок, стили, скрипты.
+
<title> — заголовок страницы.
+
<meta charset="utf-8"> — кодировка документа. Указывайте явно, иначе браузер может неправильно отобразить текст.
+
<meta name="viewport" content="width=device-width, initial-scale=1"> — без него страница не адаптируется под мобильные устройства.
Имена тегов, атрибуты и их значения записаны строчными.
-
Исключение: атрибуты для SVG-элементов, например: viewBox, preserveAspectRatio и другие.
+
Пишите теги, атрибуты и значения строчными буквами. Исключение — SVG-атрибуты (viewBox, preserveAspectRatio и другие) — они чувствительны к регистру.
@@ -284,11 +341,7 @@
Регистр тегов и атрибутов
Форматирование тегов
-
-
Вложенность тегов обозначается переносами и отступами.
-
Каждый новый вложенный тег переносится на отдельную строку с отступом, кроме текстовых элементов.
-
Текст внутри тегов остаётся на одной строке с тегами.
-
+
Размещайте каждый вложенный тег на новой строке с отступом — так видна структура документа. Текстовое содержимое остаётся на одной строке с тегами, чтобы не добавлять лишние пробелы в вёрстку.
@@ -326,11 +379,7 @@
Форматирование тегов
Двойные и одиночные теги
-
-
Двойные теги имеют открывающий и закрывающий теги.
-
Одиночные теги не имеют закрывающий тег или слэш.
-
-
+
У двойных тегов есть открывающая и закрывающая части. Одиночные теги (img, input, br и другие) пишите без слэша в конце — это стандарт современного HTML.
@@ -363,10 +412,7 @@
Двойные и одиночные теги
Порядок атрибутов
-
-
Атрибут class идёт сразу после имени тега.
-
Атрибуты идут в одном порядке, чтобы упростить их чтение.
-
+
Ставьте class сразу после имени тега. Соблюдайте одинаковый порядок во всём документе: class, src или href, data-*, остальные — так код легче читать.
@@ -391,7 +437,7 @@
Порядок атрибутов
Логические атрибуты
-
Логические атрибуты записаны без значения и в единообразной последовательности во всём документе.
+
Логические атрибуты (disabled, required, checked и другие) пишите без значения — так короче и стандарт это позволяет. Соблюдайте одинаковый порядок во всём документе.
@@ -408,7 +454,7 @@
Логические атрибуты
Форматирование атрибутов
-
В записи атрибутов нет пробелов вокруг знака «равно» =.
+
Не ставьте пробелы вокруг знака = в атрибутах — так принято в HTML.
@@ -425,10 +471,7 @@
Форматирование атрибутов
Кавычки в атрибутах и в значениях
-
-
Значения атрибутов записаны в двойных кавычках.
-
Вложенные кавычки в значениях являются одинарными.
-
+
Оборачивайте значения в двойные кавычки ("). Для вложенных используйте одинарные (').
@@ -456,11 +499,7 @@
Кавычки в атрибутах и в зн
Размеры замещаемых элементов
-
-
У изображений, видео и iframe указаны размеры.
-
По возможности изображениям указываются действительные размеры, так как это улучшает производительность отрисовки страницы: браузер не будет перерисовывать страницу в процессе загрузки и отображения изображения.
-
В атрибутах нет единиц измерения.
-
+
Указывайте размеры для изображений, видео и iframe — так браузер зарезервирует место и не будет перерисовывать страницу при загрузке. Единицы измерения в атрибутах не нужны.
@@ -481,10 +520,32 @@
Размеры замещаемых элементов
+
+
+
Ленивая загрузка
+
Добавляйте loading="lazy" изображениям и iframe за пределами видимой области при загрузке. Для изображений в верхней части страницы этот атрибут не нужен — он замедлит их загрузку.
+
+
+
+
<!-- Хорошо: изображение первого экрана -->
+<img src="hero.jpg" alt="…" width="1200" height="600">
+
+<!-- Хорошо: изображение ниже fold -->
+<img src="card.jpg" alt="…" width="400" height="300" loading="lazy">
+
+<!-- Хорошо: iframe карты -->
+<iframe src="https://maps.google.com" loading="lazy"></iframe>
+
+<!-- Плохо: lazy на первом экране -->
+<img src="hero.jpg" alt="…" loading="lazy">
+
+
+
+
Разделители в имени класса
-
Разделителями в имени класса являются только дефисы - и подчёркивания _. В коде необходимо придерживаться одного стиля.
+
Используйте дефис (-) или подчёркивание (_) для разделения слов в именах классов. Выберите один стиль и придерживайтесь его.
@@ -504,29 +565,57 @@
Разделители в имени класса
-
Атрибут method в форме
-
В атрибуте method указан тип отправки данных.
+
Атрибуты action и method
+
Указывайте оба атрибута явно:
+
+
action — куда отправляются данные. Без него форма отправится на текущий URL.
+
method — как отправляются данные. Без него браузер использует GET, и данные попадут в URL.
+
<!-- Хорошо -->
+<form action="/submit" method="post"></form>
+<form action="/search" method="get"></form>
+
+<!-- Плохо: нет action -->
<form method="post"></form>
-<form method="get"></form>
-<!-- Плохо -->
-<form method=""></form>
+<!-- Плохо: нет method -->
+<form action="/submit"></form>
+
+<!-- Плохо: нет ни action, ни method -->
<form></form>
+
+
+
Безопасность внешних ссылок
+
Для ссылок с target="_blank" добавляйте rel="noopener" — это защита от атаки через window.opener, когда внешняя страница может получить доступ к вашей.
- Стилевые файлы подключены с помощью <link> внутри <head>. При этом атрибут type для тега <link> не указан, так как его значение text/css устанавливается по умолчанию.
-
+
Подключайте стили через <link> внутри <head>. Атрибут type не нужен — браузер по умолчанию считает, что это text/css.
@@ -554,16 +643,11 @@
Подключение стилей
Подключение скриптов
-
- Скрипты подключены в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого.
-
-
- При подключении скриптов в теге <script> атрибут type не указан, так как его значение text/javascript устанавливается по умолчанию.
-
+
Подключайте обычные скрипты перед </body>, чтобы не блокировать отрисовку страницы. Если скрипт нужен в <head> — добавьте атрибут defer. Скрипты с type="module" можно подключать в <head> без defer — они загружаются асинхронно. Атрибут type для обычных скриптов не нужен.
Имена классов такие, что по ним можно быстро понять, какому элементу страницы задан класс. Избегайте сокращений, но не делайте их слишком длинными (более трёх слов).
-
Для написания классов использованы английские слова и термины. В названиях классов и атрибутов нет транслита.
+
Увеличивайте отступ на 2 пробела для каждого уровня.
+
Отделяйте вложенные блоки пустой строкой от свойств родителя.
+
Ограничивайте глубину до 2 уровней — глубже читать сложно.
Селекторы, разделённые запятой, записаны на новых строках.
+
Размещайте каждый селектор группы на отдельной строке.
@@ -737,7 +953,7 @@
Перенос селекторов
Пробелы между комбинаторами
-
До и после комбинатора между селекторами стоит один пробел.
+
Ставьте пробелы до и после комбинаторов (+, >, ~) — так читабельнее.
@@ -756,11 +972,8 @@
Пробелы между комбинаторами
Формат цветов
-
-
Цвета записаны строчными в 6-значном формате HEX.
-
Шестнадцатеричное значение цвета не сокращено, а записано полностью из всех шести символов. Для записи использованы строчные буквы.
-
Цвета могут быть записаны функциями rgba или hsla, если нужна прозрачность.
-
+
Записывайте цвета строчными в шестизначном HEX-формате (#ff0000, а не #f00) — так легче искать и заменять цвета в коде. Для прозрачности добавляйте альфа-канал в rgb() через слэш: rgb(0 0 0 / 0.5).
+
Для дизайн-систем подойдёт oklch() — в нём легко создавать оттенки одного цвета, меняя только яркость.
Выносите повторяющиеся значения (цвета, отступы, размеры) в кастомные свойства — изменения в одном месте применятся везде. Глобальные значения объявляйте в :root, локальные — в селекторе компонента. Используйте var() с фолбэком для безопасности.
Объявляйте @keyframes до правил, использующих анимацию — так код читается сверху вниз. Называйте анимации по действию: fade-in, slide-up. Используйте from/to для простых, проценты — для сложных.
Объявляйте @font-face в начале файла. Указывайте font-display: swap — текст появится сразу системным шрифтом, затем заменится на загруженный. Используйте WOFF2 — он поддерживается везде и весит меньше.
Используйте числовые значения (400, 700) вместо ключевых слов normal и bold — они точнее и понятнее. Относительные значения bolder и lighter допустимы.
- Объявления логически связанных свойств сгруппированы в следующем порядке:
-
+
Группируйте свойства по смыслу — от влияющих на сетку к декоративным:
+
Кастомные свойства
Позиционирование
Блочная модель
Типографика
Оформление
Анимация
+
Интерактивность
Разное
-
- Позиционирование следует первым, потому что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков.
-
-
- Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь.
-
-
- Сгруппированные объявления в правиле отделены друг от друга пустой строкой.
-
-
- Порядок объявления подробных правил, таких как font-size, font-family, line-height, соответствует порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой идёт сокращённая версия.
-
+
Разделяйте группы пустой строкой. Сокращённые свойства ставьте перед подробными: сначала margin, потом margin-left.