HTML
- Синтаксис
- Для отступов у вложенных элементов используются четыре пробела (tab);
- Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки;
- Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится;
- Необязательные закрывающие теги (например, </li> или </body>) не пропускаются;
- Отдельные логические блоки отбиваются пустой строкой;
- Не ставим пробелов перед и после символа =;
- Между атрибутами один пробел;
- Валидность
- HTML-доктайп
- В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах;
- Кодировка символов
- Кодировка символов на странице всегда должна быть явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна;
- Подключение стилей
- Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию;
- Подключение скриптов
- Скрипты должны подключаться в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого;
- При подключении скриптов в теге <script> атрибут type не указывается, так как его значение text/javascript устанавливается по умолчанию;
- Порядок атрибутов
- Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам;
- Остальные атрибуты могут быть расставлены в любом порядке, но тоже единообразно для одинаковых элементов;
- Логические атрибуты
- Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе;
- Подписи полей ввода
- Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>;
- Размеры картинок
- Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях. В случае пикселей размерность не нужна;
- По возможности изображениям указываются действительные размеры, так как это улучшает производительность отрисовки страницы: браузер не будет перерисовывать страницу в процессе загрузки и отображения изображения;
- Атрибут языка
- Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила;
CSS
- Синтаксис
- После значения свойства обязательно ставится точка с запятой;
- Для отступов внутри правил используются четыре пробела (tab);
- Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5;
- Названия тегов и свойств в правилах пишутся строчными буквами;
- Начальный ноль для значений сокращается (например, .5 вместо 0.5);
- Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются;
- После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен;
- После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость;
- До и после комбинатора между селекторами (например, p > a) ставится один пробел;
- Каждое объявление в правиле пишется на новой строке;
- Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки;
- Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой;
- Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0;
- Порядок свойств
Объявления логически связанных свойств группируются в следующем порядке:
- Позиционирование
- Блочная модель
- Типографика
- Оформление
- Анимация
- Разное
.declaration-order {
/* Позиционирование */
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 100;
/* Блочная модель */
display: block;
float: right;
width: 100px;
height: 100px;
margin: 10px;
padding: 10px;
/* Типографика */
font: normal 13px/1.5 "Arial", sans-serif;
font-style: normal;
font-size: 13px;
line-height: 1.5;
font-family: "Arial", sans-serif;
text-align: center;
color: #333333;
/* Оформление */
background-color: #f5f5f5;
border: 1px solid #e5e5e5;
border-radius: 3px;
opacity: 1;
/* Анимация */
transition: color 1s;
/* Разное */
will-change: auto;
}
Позиционирование следует первым потому, что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков.
Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь.
- Имена классов
- Имена классов пишутся строчными буквами, используется дефис (следуя принципу BEM);
- Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс;
- Для написания классов используются английские слова;
- Правило @import
- Правило @import работает медленнее, чем тег <link>. В стилях @import не должен использоваться;
- Варианты шрифта
- Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family;
В случае использования нестандартных шрифтов альтернативный веб-безопасный шрифт и тип семейства указываются, чтобы в случае отсутствия нестандартного шрифта в системе, изменения внешнего вида страницы были минимальны. Альтернативный шрифт должен быть такого же типа, что и нестандартный.
Порядок шрифтов следующий:
- нестандартный шрифт;
- веб-безопасный;
- тип шрифта.
Список веб-безопасных шрифтов можно посмотреть здесь.