Передача макетов разработчику — момент, когда дизайн перестаёт быть красивой картинкой и начинает жить в коде. Если этот этап поставлен шатко, даже идеальные экраны превращаются в хаос: «плавающие» отступы, потерянные состояния, самодельная анимация, которая ломает восприятие. Разработчик тратит часы на угадывание, дизайнер — на бесконечные правки, а продукт страдает в первую очередь.
За годы работы в финтехе и edtech я вывел систему, которая убирает боль из хенд-оффа. Никакой воды — только настройки, чек-листы и приёмы, проверенные десятками проектов.
—
## Что такое хенд-офф и почему он так важен?
**Хенд-офф** (hand-off) — это не «скинуть ссылку на Figma». Это полноценная передача дизайна команде разработки: визуальные макеты, логика взаимодействия, технические спецификации и семантика. Важно понимать: разработчик видит интерфейс не как целостную картину, а как набор переменных, отступов и обработчиков событий. Если какая-то деталь не описана, он её либо додумает, либо проигнорирует — и оба варианта ведут к расхождению с макетом.
Плохой хенд-офф бьёт сразу по трём точкам: разработчик уходит в бесконечные вопросы, визуальная целостность расползается, а пользователь получает непредсказуемое поведение — кнопку, которая не реагирует на нажатие, или форму, которая исчезает без обратной связи.
На практике в финтех-проектах мы сталкивались с ситуацией, когда не описанное состояние загрузки кнопки «Оплатить» приводило к двойным списаниям. А в edtech отсутствие варианта пустого состояния списка курсов вызывало фантомную вёрстку с пустыми карточками. Хенд-офф — это мостик между дизайном и кодом, и от его прочности зависит, останется ли продукт удобным и безошибочным.
—
## Этап 1: Подготовка макетов перед передачей
Макет — это технический документ, а не просто артборд. Разработчик должен понимать структуру, адаптивность и все состояния элементов без дополнительных пояснений.
### 1.1. Структура и организация файлов
Безымянные страницы «Page 1», «Flow» и хаотичные фреймы — главный враг быстрой ориентации. В одном банковском проекте мы однажды полдня искали экран подтверждения перевода, потому что файл был свален в один уровень. После этого я всегда настаиваю на чёткой структуре.
**Рекомендуемая структура:**
* **Cover Page:** Описание проекта, версия, ответственный дизайнер и дата актуальности.
* **Design System:** Все компоненты, цветовые токены, типографика и иконки — как эталон для разработчиков.
* **Mobile / Desktop:** Разделение по платформам, если проект мультиплатформенный.
* **Flows:** Конкретные пользовательские сценарии: «Регистрация», «Покупка», «Восстановление пароля».
* **States:** Сгруппированные состояния ключевых элементов (активное, ошибочное, загрузка, пустое).
* **Assets:** Экспортированные графические ресурсы в необходимых форматах.
**Чек-лист организации:**
- ☐ Все страницы имеют понятные названия — никаких Test и Untitled.
- ☐ Компоненты вынесены в отдельную библиотеку; локальные варианты синхронизированы с DS.
- ☐ Auto Layout используется на всех повторяющихся блоках — карточки, формы, списки.
- ☐ Нет скрытых, пустых или дублирующихся слоёв.
- ☐ Все иконки — векторные (SVG), растровые изображения оптимизированы под WebP или PNG.
### 1.2. Использование Auto Layout и адаптивности
Разработчик работает с CSS Flexbox и Grid — mental model очень близка к Auto Layout в Figma. Если дизайнер не использует авто-лейаут, он заставляет верстальщика вручную вычислять отступы и логику растяжения, что плодит баги.
**Что нужно проверить:**
* Кнопки, карточки и поля ввода обёрнуты в Auto Layout с понятными значениями padding и gap.
* Отступы одинаковы для однотипных элементов — это сокращает количество переменных в коде.
* Поведение при изменении ширины: «Fill container» или «Hug contents» должны соответствовать ожидаемому результату на разных разрешениях.
**Типичный случай из практики:** В edtech-проекте форма регистрации была собрана на абсолютных позициях. На мобильных устройствах поля вылезали за границы экрана. После перевода на Auto Layout с Fill container баги по адаптиву сократились на две трети.
### 1.3. Состояния (States) и интерактивность
Статичная картинка не говорит разработчику, что происходит при нажатии, наведении или ошибке. Если в макете нет прописанных состояний, разработчик реализует их на своё усмотрение — обычно в минимальном виде или вовсе пропускает.
Обязательный минимум:
* **Default** — базовое состояние.
* **Hover** — реакция на наведение курсора.
* **Active / Focus** — для клика и навигации с клавиатуры.
* **Disabled** — неактивный элемент.
* **Error** — валидация с текстом ошибки.
* **Success / Loading** — обратная связь после действия.
В Figma это делается через **Variants** компонента. Например, поле ввода должно включать варианты: empty, filled, error, disabled. Когда разработчик видит один компонент с понятными вариациями, ему достаточно один раз настроить поведение, а не угадывать на каждом экране. В проекте интернет-банка мы специально выделяли loading state для кнопки «Оплатить», чтобы избежать повторных кликов при медленном ответе сервера. Это убрало целый класс пользовательских жалоб.
—
## Этап 2: Описание логики и интерактивности
Макет — это не картинка, это инструкция. Разработчик должен видеть не только расположение элементов, но и то, как они взаимодействуют друг с другом.
### 2.1. Прототипирование в Figma
Встроенный инструмент Prototype позволяет показать переходы, модальные окна и даже базовые анимации на одном дыхании. Разработчик может просто кликнуть по прототипу и сразу понять навигационную логику, не открывая отдельные фреймы.
**Базовый подход:**
- Выберите интерактивный элемент.
- Перейдите на вкладку «Prototype».
- Протяните связь к целевому экрану.
- Настройте анимацию — Smart Animate для плавных изменений, Slide In/Out для боковых панелей.
- Укажите триггер: On Click, While Hover, After Delay.
В реальном проекте регистрации пользователя я связывал все экраны цепочкой и добавлял анимацию появления модалки подтверждения. Разработчик сразу видел: клик по «Зарегистрироваться» → модальное окно → успех с авторедиректом. Это сняло горы вопросов на созвоне.
### 2.2. Описание анимаций и переходов
Анимация — функциональный элемент. Она подсказывает пользователю, что произошло действие, и сглаживает когнитивную нагрузку. Если анимация не описана, разработчик использует дефолтные переходы браузера, которые редко совпадают с дизайном.
**Что должно быть зафиксировано:**
* Тип анимации: появление, сдвиг, масштабирование, изменение прозрачности.
* Длительность и кривая easing (например, ease-out для естественного замедления).
* Направление: слева направо, снизу вверх.
* Триггер: клик, наведение, состояние загрузки.
Пример описания из практики:
«Модальное окно подтверждения появляется с анимацией Slide Up, 400ms, easing: ease-out. Закрытие — Slide Down, 300ms. Если действие невозможно, окно вибрирует (shake) 200ms. Индикатор загрузки карты появляется через 200ms после клика с плавным увеличением непрозрачности от 0 до 1.»
Такая конкретика избавляет от «поплывшей» анимации и даёт разработчику цифры для ключевых кадров.
### 2.3. Логика ошибок и подтверждений
Без описания сценариев ошибок и успеха интерфейс остаётся немым. В макете важно не только нарисовать красный бордер, но и указать, какой текст появляется, где именно и как долго висит уведомление.
Жизненный пример: форма ввода email. Если введены некорректные данные, поле подсвечивается, под ним появляется сообщение «Некорректный формат email», и кнопка отправки становится неактивной. При успешной валидации — зелёная галочка и автоматическая смена состояния кнопки. Всё это должно быть в макете в виде отдельных вариантов компонента. Я всегда добавляю в документацию блок «Edge cases» с указанием, как система реагирует на пустые поля, превышение лимита символов или потерю соединения.
—
## Этап 3: Технические требования и спецификации
Здесь дизайнер перестаёт быть визуализатором и становится инженером: все значения должны быть переданы в том виде, в котором они лягут в CSS-код.
### 3.1. Цветовая палитра
Недостаточно показать цвет — его нужно дать в форматах HEX, RGB, HSL и при необходимости с альфа-каналом. Разработчик должен иметь возможность скопировать значение напрямую.
Рекомендация: если в Figma настроены Color Styles с осмысленными названиями (Primary, Text/Light, Danger), их можно связать с CSS-переменными. Это ускоряет работу и снижает вероятность путаницы.
Пример таблицы цветов для передачи:
| Название стиля | HEX | RGB | HSL | Alpha |
|---|---|---|---|---|
| Primary | #2196F3 | 33, 150, 243 | hsl(210, 100%, 50%) | 1.0 |
| Error | #F44336 | 244, 67, 54 | hsl(0, 90%, 50%) | 1.0 |
| Success | #4CAF50 | 76, 175, 80 | hsl(120, 40%, 50%) | 1.0 |
| Text Dark | #333333 | 51, 51, 51 | hsl(0, 0%, 20%) | 1.0 |
В одном edtech-проекте мы столкнулись с тем, что разработчик использовал розовый вместо красного для ошибок, потому что в макете был только визуальный образец без точного HEX. С тех пор я всегда дублирую цвета таблицей.
### 3.2. Шрифты и типографика
Типографика должна быть описана в виде готовых текстовых стилей. Разработчику нужны конкретные значения: семейство, размер, насыщенность, высота строки и межбуквенный интервал.
Что передавать:
* Family: Roboto, Inter, локальная системная замена.
* Size в px.
* Weight (число: 400, 500, 700).
* Line Height в px или относительное значение.
* Letter Spacing, если оно не дефолтное.
* Цвет (HEX).
Таблица стилей:
| Название | Family | Size | Weight | Line Height | Letter Spacing | Color |
|---|---|---|---|---|---|---|
| H1 | Inter | 32px | 700 | 1.2 | 0px | #333333 |
| H2 | Inter | 24px | 700 | 1.3 | 0px | #333333 |
| Body | Inter | 16px | 400 | 1.5 | 0px | #333333 |
| Caption | Inter | 12px | 400 | 1.4 | 0px | #666666 |
Если в проекте используется вариативный шрифт, указывайте диапазон весов и осей. Разработчику это сэкономит десятки минут на подгонку.
### 3.3. Отступы и сетка
Отступы — это не «примерно 15px», а жёсткая система. Я всегда рекомендую 8‑пиксельную сетку как стандарт, который хорошо ложится на большинство экранов и упрощает верстку.
Типовые значения:
- Малый отступ: 8px
- Средний: 16px
- Большой: 24px
- Очень большой: 32px
Если макет использует отступы 15px или 23px, это сигнал, что дизайн не приведен к системе. Разработчику придётся либо городить исключения, либо округлять, что искажает задумку.
### 3.4. Иконки и изображения
Иконки — SVG, это аксиома. Растровые иконки мы используем только в исключительных случаях (например, сложные эмбеддинговые изображения). Для фото и иллюстраций указываем формат: WebP для современного веба с фолбэком на JPEG/PNG, если нужна поддержка старых браузеров.
Размеры иконок должны быть кратки: 16px, 24px, 32px, 48px. Все иконки собраны в компонентной библиотеке — разработчик может выгрузить их пакетом и использовать как компоненты или спрайт.
В реальной работе я сталкивался с тем, что неоптимизированные PNG-иконки размером 200×200px замедляли загрузку страницы в разы. Сейчас правило простое: если элемент векторный, он должен быть SVG.
—
## Этап 4: Коммуникация и процесс передачи
Техническая часть — лишь половина успеха. Без качественной синхронизации с командой разработки любой макет рискует быть понятым превратно.
### 4.1. Встреча по передаче (Hand-off Meeting)
Кинуть ссылку в чат недостаточно. Даже идеально подготовленный файл может вызвать вопросы, которые проще решить голосом. Я провожу короткую встречу в Figma Live или Zoom, где последовательно прохожу по флоу, фиксирую ключевые решения и отвечаю на вопросы.
Примерный план встречи:
- Показываю обзор: основные экраны, структура файла.
- Прохожу по одному-двум самым сложным сценариям.
- Объясняю логику неочевидных переходов и анимаций.
- Оставляю время на вопросы и записываю встречу для тех, кто не смог присутствовать.
Однажды в финтех-проекте мы ввели практику пятиминутных видеоразборов сложных участков — это полностью убрало повторные созвоны.
### 4.2. Использование комментариев в Figma
Комментарии — отличный инструмент для локальных уточнений прямо на макете. Но только если использовать их по делу: «Как это должно менять состояние при ошибке сети?» или «Тут отступ маловат, проверим?». Критика и длинные дискуссии должны уйти в мессенджер или трекер задач.
Я рекомендую в начале проекта назначить ответственного разработчика, который сводит все комментарии и превращает их в задачи. Так вопросы не теряются, а дизайнер не отвлекается на каждый мелкий запрос.
### 4.3. Документация и чек-листы
Документ с кратким обзором проекта и сводкой всех спецификаций — это must-have. Он служит единым источником истины для всей команды. Обычно я включаю туда ссылки на цветовые стили, типографику, сетку, описание компонентов и сценарии edge cases.
Чек-лист готовности к передаче:
| Шаг | Описание | Выполнено |
|---|---|---|
| 1 | Макет полностью готов (все состояния, логика) | ☐ |
| 2 | Использованы Auto Layout и компоненты | ☐ |
| 3 | Цветовая палитра и шрифты описаны в стилях | ☐ |
| 4 | Отступы и сетка соответствуют стандартам | ☐ |
| 5 | Иконки и изображения в правильном формате | ☐ |
| 6 | Проведена встреча по передаче | ☐ |
| 7 | Документация и чек-листы созданы | ☐ |
| 8 | Разработчик получил ссылку и ознакомился | ☐ |
—
## Типовые ошибки и как их избежать
Ошибки в хенд-оффе стоят дорого. Вот те, с которыми я сталкивался чаще всего, и способы их предотвратить.
### Ошибка 1: Использование фиксированных размеров
Фиксированная ширина кнопки 200px на десктопе ломается на планшете. Как избежать: всегда настраивать Auto Layout с Fill container или Hug contents, проверять поведение на трёх контрольных точках: 320px, 768px, 1440px. В одном проекте мы специально ввели правило: каждый компонент до передачи должен пройти стресс-тест на изменение ширины контейнера.
### Ошибка 2: Отсутствие состояний
Если в макете только Default, разработчик не воспроизведёт ни hover, ни disabled. Решение: сделать компонент с вариантами через Variants. Обязательно включить loading state для действий, которые требуют серверного ответа.
### Ошибка 3: Неясная логика взаимодействия
«После клика что-то появляется» — не инструкция. Как исправить: все переходы и модальные окна должны быть связаны в прототипе. Для сложных кейсов добавляю поясняющую заметку прямо во фрейм: что является триггером и какая ожидается анимация.
### Ошибка 4: Произвольные отступы
Отступ 15px не существует в стандартной сетке. Решение: придерживаться 8px baseline, в исключительных случаях 4px. Разработчик сможет оперировать переменными, а не магическими числами.
### Ошибка 5: Отсутствие документации
Без единого документа команда через месяц забудет, почему был выбран именно этот цвет ошибки. Чек-лист: файл документации (Figma/Notion) с цветами, типографикой, описанием нестандартных решений и ссылками на компоненты.
—
## Чек-лист: готовность макета к хенд-оффу
Перед тем как нажать «Share», пройдите по этому списку. Если все пункты отмечены — можно смело отправлять.
### Визуальная часть
- ☐ Все страницы и фреймы осмысленно названы.
- ☐ Компоненты вынесены в библиотеку.
- ☐ Auto Layout применён к карточкам, формам, спискам.
- ☐ Нет скрытых или неиспользуемых слоёв.
- ☐ Иконки в SVG, изображения оптимизированы.
- ☐ Варианты состояний включают Default, Hover, Active/ Focus, Disabled, Error, Success / Loading.
### Логика и интерактивность
- ☐ Прототип покрывает основные сценарии.
- ☐ Анимации задокументированы: тип, длительность, easing, направление.
- ☐ Логика ошибок и подтверждений описана (текст, положение, тайминг).
- ☐ Все переходы между экранами показаны и промаркированы.
### Технические требования
- ☐ Цвета вынесены в таблицу с HEX, RGB, HSL, Alpha.
- ☐ Типографика оформлена в виде стилей с полным перечнем параметров.
- ☐ Отступы приведены к 8-пиксельной сетке.
- ☐ Иконки и изображения в нужных форматах и разрешениях.
### Коммуникация
- ☐ Проведена встреча по передаче (запись доступна).
- ☐ Документация передана вместе с файлом.
- ☐ Разработчик подтвердил ознакомление.
- ☐ Ключевые вопросы вынесены в комментарии Figma и обработаны.
Если всё выполнено, ваш макет готов к хенд-оффу без стресса и догадок.
—
## FAQ: Часто задаваемые вопросы о хенд-оффе
### 1. Что делать, если разработчик не понимает макет?
Не играйте в испорченный телефон. Откройте Figma Live и проведите короткую демонстрацию. Если барьер системный — запишите пятиминутный скринкаст с озвучкой логики. В одном финтех-проекте мы создали мини-библиотеку таких видео, и число однотипных вопросов упало на 80%.
### 2. Как описать анимации, если в Figma нет нужного типа?
Используйте максимально близкий аналог (Smart Animate, Slide) как отправную точку. Остальное опишите текстом: свойства «transform», длительность, кривую. Разработчик воспроизведёт это вручную — главное, чтобы он понимал, что должно получиться.
### 3. Что делать, если макет не соответствует техническим ограничениям?
Не продавливайте красоту в ущерб реализуемости. Обсудите с разработчиком: возможно, вместо сложной анимации достаточно микро-взаимодействия. Учитывайте реальные API-лимиты, производительность на слабых устройствах и доступность.
### 4. Как использовать Auto Layout для адаптивности?
Стройте компоненты с шириной Fill container или Hug contents. Проверьте, как они перестраиваются при изменении ширины родителя — в Figma это делается обычным перетаскиванием краёв фрейма в режиме prototype.
### 5. Что делать, если разработчик не использует Figma?
Экспортируйте макеты в PDF или PNG с аннотациями, приложите спецификацию отдельно. Но всё же уговорите команду хотя бы на бесплатный аккаунт — без прямого доступа в макет процесс кратно дольше.
### 6. Как проверить, что макет готов к хенд-оффу?
Пройдите по чек-листу из предыдущего раздела. Если все пункты с галками — макет готов.
### 7. Что делать, если макет не соответствует стандартам дизайна?
Приведите его к стандартам до передачи. Если время поджимает, зафиксируйте расхождения в документации и создайте задачу на рефакторинг в ближайшем спринте.
### 8. Как использовать комментарии в Figma для уточнений?
Выделяйте конкретный элемент и пишите вопрос в контексте. Назначайте ответственного разработчика. Комментарий должен быть точным, а не «что-то тут не так». После решения закрывайте треды.
### 9. Что делать, если макет не соответствует требованиям пользователя?
Вернитесь на этап UX-исследования. Хенд-офф — не место для выяснения потребностей; к этому моменту сценарии должны быть валидированы.
### 10. Как использовать документацию для передачи макета?
Документация — это не книга, а шпаргалка. Соберите в одном месте все токены, компоненты и edge cases. Держите её актуальной и привязывайте к версии макета.
—
## Вывод: Хенд-офф как инструмент качества
Хенд-офф — это не бюрократия, а инвестиция в скорость и качество. Когда дизайнер даёт разработчику всё необходимое в понятной форме, время на реализацию сокращается, а процент багов на этапе тестирования падает. Файл превращается в продукт, а не в источник раздражения.
Ключевые правила, которые стоит держать в голове:
- Auto Layout и компоненты — ваша защита от адаптивного хаоса.
- Варианты состояний обязательны для каждого интерактивного элемента.
- Прототип заменяет десяток текстовых пояснений.
- Цвета и типографика передаются в стилях и таблицах, а не на глаз.
- 8‑пиксельная сетка — стандарт, вокруг которого всё строится.
- Встреча и документация закрывают коммуникационные разрывы.
Хенд-офф — это начало разработки. Сделайте так, чтобы разработчик сразу начал кодить, а не расшифровывать замысел. Тогда ваш интерфейс окажется именно таким, каким вы его задумали, и пользователь почувствует разницу.
