Правила оформления HTML-кода
На этапе вёрстки собственных проектов необходимо на основе графического макета произвести html-вёрстку сайта, которая будет передана на следующий этап разработки.
Основные правила
- Для более эффективной организации работы следует использовать набор Быстрый старт. Он полностью соответствует требованиям данного документа.
- В качестве отступов используем табуляцию (а не пробелы). Вложенные блоки должны отделяться одним отступом.
- Запрещено использование таблиц для нетабличных данных!
- Запрещено вкладывать блочные элементы внутрь строчных!
- DOCTYPE по умолчанию: html
<!DOCTYPE html>
. - Кодировка по умолчанию: UTF-8
<meta charset="UTF-8">
. - Не забываем про метатег для IE
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
. - Если сайт адаптивный — не забываем про метатег
<meta name="viewport" content="width=device-width, initial-scale=1.0">
. - Для подключения стилей и скриптов не нужно указывать атрибут
type
:<link rel="stylesheet" href="..."> <script src="..."></script>
- Шапка сайта заключается в тег
<header></header>
. - Основная навигация по сайту — в тег
<nav></nav>
. - Контентные блоки сайта заключаются в тег
<section></section>
, но лишь в том случае, если они нормально воспринимаются отдельно от всего контента страницы. (например блок с новостями или статьями сайта или сама статья или детальная страница товара). - Подвал сайта — в тег
<footer></footer>
. - Если используемый тег имеет закрывающий тег — он должен быть закрыт не зависимо от желания разработчика.
<p>текст</p> <ul> <li>текст</li> </ul>
- Атрибуты, не требующие объявления значения, не должны содержать этого значения:
<input type="checkbox" checked disabled> <select> <option value="1" selected></option> </select>
- Если у тега много атрибутов — можно перечислять их с новой строки, при этом следует делать отступ перед объявлением атрибута:
<img class="..." src="..." alt="..." title="..." data-mfp-src="..." data-params="..." > <div class="..." id="..." data-params="..." > текст </div>
- Если необходимо передать в js неопределённое количество данных — следует использовать json-объект.
<script> $(document).on('click', '[data-basket-add]', function(e) { e.preventDefault(); var $basketAdd = $(this).data('basketAdd'); $.ajax({ ... data: $basketAdd, }) ... ; }); </script> <span data-basket-add='{"id":"150","name":"Заголовок товара"}'>текст</span>
- Значения атрибутов заключаем в двойные кавычки. Исключением являются атрибуты, используемые для передачи json-данных в js-обработчик.
<span data-basket-add='{"id":"150","name":"Заголовок товара"}'>текст</span>
- Вёрстка должна полностью проходить валидацию.
- При разметке страниц так же можно делать микроразметку.
- Ссылки на стандарт: schema.org, ruschema.org.
- Инструменты проверки: от google, от яндекса.
- Если закрывающий тег находится от открывающего дальше чем на 4-6 строк, то необходимо ставить после него html-комментарий. Пример:
<div class="container"> <div class="content"> <div class="col col-mb-12 col-6">Далеко-далеко за словесными горами в стране.</div> <!-- .col col-mb-12 col-6 --> <div class="col col-mb-12 col-6">Моей семь, агенство. Он, скатился!</div> <!-- .col col-mb-12 col-6 --> </div> <!-- .content --> </div> <!-- .container -->
- В подвале сайта необходимо предусмотреть блок с
id="bx-composite-banner"
, размером 182x31px. Этот блок необходим для отображения баннера композитного режима работы bitrix.
Создание стилей less/css
Под созданием стилей понимается создание одного результирующего файла стилей (css-файл) вне зависимости от использования препроцессоров (less). В отдельных случаях допускается использование нескольких css файлов, к примеру если в проекте есть плагины (карусель, слайдеры, внешние сервисы) с большими объёмами css-кода.
При создании стилей следует учитывать следующее:
- Правила написания LESS и CSS кода находятся на этой странице.
- Используем препроцессор LESS.
- В качестве локального компилятора рекомендуется использовать prepros при этом в настройках отключить авторасстановку префиксов, расставлять их следует либо вручную, либо через миксины. Это связано с техническими моментами компиляции средствами php на серверной стороне.
- В качестве серверного компилятора используем, встроенный в Быстрый старт, компилятор на php или компонент Less4Bitrix
- Все кликабельные элементы должны иметь
cursor: pointer;
, а так же визуально реагировать на три состояния: обычное, при наведении:hover
, активное:active
,:focus
. Если эти состояния не описаны в дизайне -следует поставить минус в карму дизайнеру иреализовать эти поведения на своё усмотрение, но не внося дисгармонии в общий дизайн сайта. - Все видимые инпуты форм должны реагировать на получение фокуса
:focus
и, если это предусмотрено дизайном, при наведении. Если эти состояния не описаны в дизайне -следует поставить минус в карму дизайнеру иреализовать реакцию на получение фокуса на своё усмотрение, но не внося дисгармонии в общий дизайн сайта. -
Не следует использовать следующие названия классов, т.к. они зарезервированы системными стилями bitrix:
.section
(исп. в всплывающем окне редактирования параметров компонентов).empty
(исп. в всплывающем окне редактирования параметров компонентов)
- Ни при каких условиях не используем reset.css Если вы не понимаете для чего нужен сброс стилей — просто попробуйте в контент вставить нумерованный список или параграф. Вместо reset.css используем normalize.css
- Стили для пользовательского интерфейса форм (инпуты, текстовые поля, кнопки) должны основываться на именах классов, а не на html-тегах. Т.е. к примеру класс
.btn
, применённый к диву, должен визуально превращать этот див в кнопку.
Написание необходимых скриптов js/jQuery
Под написанием js-скриптов понимается создание одного основного js-файла
- Правила написания js-кода находятся на этой странице.
- В качестве библиотеки используем jQuery 2.x. Если в ТЗ прописана поддержка IE8 - используем последнюю актуальную версию jQuery 1.x.
- Если какой то код можно превратить в функцию - делаем это.
- Если какую-то функцию можно превратить в плагин - превращаем.
-
Не используем устаревшие и неоптимальные функции.
// Плохо $('.element').click(function(){}); // Хорошо $(document).on('click', '.element', function(){});
- Инициализацию необходимых плагинов производим в одном основном рабочем файле, который подключается к странице. При этом учитываем тот факт, что элемент, на который навешивается плагин, может отсутствовать на странице (если плагин плохо написан, он может выдавать ошибку).
- При использовании плагинов следует правильно именовать их по типу jquery.[имя_плагина][.min].js и по умолчанию минимизировать код плагина, оставляя ссылку на источник, откуда взят плагин в комментариях на первой строке и версию плагина.
/*! http://site.ru | v.1.0 */ jQuery(document).ready(function(a){a(".btn-quont").on("click",function(){var b=a(this),c=b.parent().find("input").val();if("+"==b.text())var d=parseInt(c)+1;else if(c>0)var d=parseInt(c)-1;else d=0;b.parent().find("input").val(d)})});
-
Весь код, который не обрабатывает события пишем внутри функции и вызываем эту функцию в сависимости от текущего режима отображения страниц (композитный или обычный). Такая конструкция обеспечит безошибочное выполнение кода как в вёрстке, так и в продакшне.
Пример:
if (window.frameCacheVars !== undefined) { BX.addCustomEvent("onFrameDataReceived", function (json) { runFunction(); }); } else { jQuery(document).ready(function ($) { runFunction(); }); } function runFunction() { // Тут пишем основной код, не обрабатывающий события }
Подготовка изображений
При подготовке изображений для вёрстки следует учитывать следующее:
- Все иконки объединяем в спрайт. Если это возможно в текущем проекте — используем SVG.
- Вcе изображения, объёмом менее 500 байт смело перегоняем в base64. (Регистрируемся в сервисе для автоматической оптимизации картинок через kraken.io.)
- Для уменьшения объёма изображений используем сервис kraken.io, не забываем, что сжимать надо в режиме lossless (без потерь) или tinyPNG.
- Все изображения контента получаем через сервис imgholder.ru или lorempixel или другие подобные сервисы. (Вёрстку всё равно клиенту не показывает никто, а вычищать левые картинки из продакшна — плохая идея).
- Если в PSD используется такой способ реализации задумки дизайнера, при котором невозможно адекватно сохранить картинку — нужно передать дизайн на доработку, либо попросить дизайнера сохранить картинку в нужном формате,
пусть помучается.
Тестирование
При тестировании выделяем браузеры, под которые нужно делать:
- Абсолютную поддержку (полное соответствие дизайну). По умолчанию это браузеры, прописанные в ТЗ. Если в ТЗ нет такого, то тестируем под актуальными версиями Chrome, Firefox, Opera, а так же IE10 и выше. (IE9 с низким приоритетов).
- Относительную поддержку (не допускать явного визуального смещения элементов). Если при этом некоторые эффекты не будут отображаться (к примеру, вместо «вдавленного» текста - простой), об этом нужно предупредить менеджера.
- Если сайт адаптивный, то вёрстка тестируется на iPhone, iPad и на современном смартфоне и планшете Android (4.2+) в стандартных браузерах.