Чек-лист паритета UI для веба и нативных приложений
Используйте этот чек-лист паритета UI, чтобы сохранить согласованность типографики, отступов, пустых состояний и поведения компонентов между веб- и нативными приложениями.

Что такое паритет UI (и почему он так легко ломается)
Паритет UI — это когда ваше веб-приложение и нативное мобильное приложение ощущаются как один и тот же продукт. Не обязательно одинаковые пиксели, но одинаковый смысл, одинаковые ожидания и одинаковые результаты, когда кто-то нажимает, вводит или ждёт.
Простой тест: если пользователь понял что-то на одном экране, это понимание должно переноситься на эквивалентный экран на другой платформе.
Чаще всего людей путают мелкие различия. Если на вебе кнопка называется «Save», а на мобильном — «Done», пользователь на секунду остановится. Если отступы плотнее на одной платформе, экран кажется более напряжённым, даже если функции те же. Если тап по строке списка на мобильном открывает детали, а на вебе показывает чекбокс, люди начинают угадывать, вместо того чтобы доверять интерфейсу.
Что должно совпадать точно? Всё, что влияет на понимание и уверенность. Для большинства продуктов это значит:
- Имена и подписи для одинаковых действий и место их появления
- Основные макеты ключевых экранов (навигация, главные действия, критическая информация)
- Состояния: загрузка, ошибка, отключено и пустые результаты
- Поведение компонентов (тап, свайп, long-press, клавиатура, фокус)
- Тон и структура сообщений (что случилось, что делать дальше)
Что можно адаптировать? То, что в основном про комфорт на платформе. Отрисовка шрифтов, safe area и нативные паттерны вроде жеста назад в iOS или системных кнопок Android могут отличаться, пока пользователи всё равно попадают в нужное место и понимают изменения.
Практическая цель — «предсказуемые паттерны». Если кто-то обновляет профиль на вебе, он должен распознать те же поля, те же правила валидации и то же сообщение об успехе на мобильном. Даже если вы быстро собираете приложение с помощью AppMaster (веб-UI плюс нативные UI для iOS/Android), паритет требует явных правил, чтобы приложения развивались в одном направлении, а не как два похожих, но разных продукта.
Задайте общую базу перед сравнением экранов
Проверки паритета разваливаются, когда каждую платформу меряют по разному представлению о «правильно». Прежде чем сравнивать веб и нативные экраны, договоритесь, что считать «тем же» экраном, и зафиксируйте это. Это не увлекательно, но экономит часы переделок.
Вам не нужен огромный спецификатор. Нужны несколько правил, которые остановят самое распространённое рассогласование:
- Типографика: размеры, межстрочный интервал и как текст переносится или обрезается
- Отступы: паддинги, маргины, шаги сетки и когда использовать компактный vs комфортный режимы
- Цветовые роли: primary, danger, muted, минимальные контрасты и ожидания в тёмной теме
- Компоненты: какие кнопки, поля, карточки и паттерны навигации — «утверждённые»
- Состояния: загрузка, ошибка, пусто, отключено и позитивная обратная связь
Дальше выберите один источник правды. Некоторые команды используют дизайн-файл; другие опираются на токены и короткое письменное руководство. Важно, чтобы правила жили в одном месте и изменения фиксировались. Если вы строите в AppMaster, полезно синхронизировать токены и переиспользуемые компоненты между веб- и мобильными билдерами UI, чтобы одинаковые решения появлялись везде.
Наконец, задайте ритм и ответственность. Относитесь к паритету как к тестированию, а не как к последней полировке. Решите, когда проходят ревью (перед релизами и после изменений в общих компонентах), кто подписывает (дизайн за визуал, продукт за смысл, QA за кейсы и покрытие устройств) и что означает «готово» (несоответствия либо исправляют, либо явно принимают с объяснением).
Пример: если в портале клиентов появляется новая страница «Invoices», заранее решите, как таблицы сворачиваются на мобильном, как пустые состояния объясняют отсутствие счетов и что делает кнопка «Pay now», когда устройство офлайн. С такой базой ревью становится быстрой проверкой дрейфа, а не спором о вкусе.
Правила типографики, которые нужно сохранить на всех платформах
Типографика — место, где «почти одинаково» быстро превращается в «это уже другой продукт». Начните с наименования стилей простыми токенами (H1, H2, Body, Caption) и применяйте их одинаково на вебе и в нативе.
Выбирайте шрифты с учётом платформы. Используйте по одному основному семейству для каждой платформы, которое передаёт одинаковую личность и плотность, затем задайте fallback. Например: системный шрифт на iOS (SF), системный шрифт на Android (Roboto) и веб-шрифт, который выглядит похоже, с безопасным fallback на system-ui. Цель — не буквальная идентичность, а тот же тон и читаемость.
Определите шкалу типов один раз и не давайте никому придумывать новые размеры. Например:
- H1: 28–32px, line height 1.2–1.3
- H2: 20–24px, line height 1.25–1.35
- Body: 16px, line height 1.4–1.6
- Secondary: 14px, line height 1.4–1.6
- Caption: 12–13px, line height 1.3–1.5
Поведение текста важно не меньше, чем размер. Решите, как вы обрабатываете длинные заголовки и непредсказуемые данные (имена, адреса, темы тикетов), чтобы веб и мобильный не расходились:
- Заголовки: максимум 2 строки, затем обрезать с троеточием
- Ячейки таблиц: одна строка, обрезать, показывать полное значение по тапу/ховеру
- Параграфы: перенос естественный, без разрывов слов
- Числа: используйте табличные цифры если доступны, выравнивайте дробные части
Выравнивание — ещё одно частое несоответствие. По умолчанию используйте левое выравнивание для большинства текстов, особенно форм и списков. Центрируйте только краткие одноцелеые элементы вроде заголовка успеха или заголовка пустого состояния.
Задайте минимумы доступности и считайте их обязатальными. Старайтесь не опускаться ниже 16px для основного текста на мобильных, избегайте очень тонких начертаний в маленьких размерах и держите контраст достаточным для чтения при ярком освещении. Если вы используете AppMaster, сделайте эти значения общими дизайн-токенами, чтобы экраны читались одинаково на вебе и в нативе.
Правила отступов и макета (включая safe areas на мобилке)
Отступы — место, где «почти то же» превращается в «чувствуется иначе». Если веб-экран «дышит», а мобильный выглядит сжатым, пользователи это заметят, даже если цвета и шрифты совпадают.
Начните с одной шкалы отступов, которой пользуются обе платформы. Простая шкала с шагом 4 удобно ложится на CSS и нативные сетки. Правила держите простыми: связанные элементы получают меньшие промежутки, чем отдельные секции, один дефолтный паддинг экрана фиксирован, а исключения редки и документированы.
Типичная база выглядит так:
- Общие шаги: 4, 8, 12, 16, 24
- Промежутки между связанными элементами: 8–12
- Промежутки между секциями: 16–24
- Дефолтный паддинг экрана: 16
Затем стандартизируйте safe area на мобильных. Контент не должен располагаться под вырезом, индикатором домой или системными панелями. Одно ясное правило помогает: «Весь основной контент уважает safe area + базовый паддинг». Если есть нижняя панель, учитывайте её высоту в inset контента, чтобы последний элемент списка был доступен.
Плотность списков тоже требует явного выбора. Выберите два варианта и назовите их (compact и comfortable). Определите высоту строки, вертикальные отступы и использование разделителей. Применяйте один и тот же вариант на вебе и мобилке для одного и того же типа экрана, чтобы «список счетов» не выглядел как два разных экрана.
Точки касания — часть отступов. На мобильных контролы должны быть удобны для нажатия даже при плотной верстке. Надёжный минимум — 44×44 для тапов, с достаточным промежутком между действиями, чтобы избежать ложных нажатий.
Для веба пропишите поведение в ключевых брейкпоинтах: количество колонок, поведение сайдбара и момент, когда списки превращаются в карточки. Во время проверки паритета сравнивайте намерение, а не пиксели. Веб может показывать больше информации сразу, но не должен менять иерархию или скрывать ключевые действия.
Если вы строите в AppMaster, хранение тех же отступных токенов в веб- и мобильных билдерах UI поможет экранам быть согласованными по умолчанию.
Состояния: загрузка, ошибка, отключено и пустые экраны
Согласованность чаще ломается именно в состояниях, а не на «счастливом пути». Рассматривайте UI состояний как первый класс дизайна с одинаковой структурой, тоном и действиями на вебе и в нативе.
Начните с действий. Первичные действия должны быть очевидны и находиться в постоянных местах (например, справа внизу в веб-диалогах и фиксированная нижняя кнопка на мобильном). Вторичные действия не должны конкурировать с первичным. Деструктивные действия требуют дополнительного подтверждения: явная подпись («Delete project»), шаг подтверждения и безопасный путь назад («Cancel»).
Отключённые контролы не должны выглядеть как баги. Используйте состояние disabled только когда действие действительно нельзя выполнить, и объясняйте причину рядом с контролом. Текст-помощник лучше тултипов, которые мобильные пользователи редко увидят. Если пользователь может исправить ситуацию — скажите как («Добавьте способ оплаты, чтобы включить Checkout»). Если нет — укажите, когда это станет доступно («Доступно после одобрения»).
Правила для загрузки
Выберите один паттерн загрузки для каждого контекста и придерживайтесь его на обеих платформах:
- Используйте skeleton для содержимого страницы, которое появится на месте (таблицы, карточки, списки).
- Спиннер — только для коротких блокирующих ожиданий (вход, отправка формы).
- Ставьте индикатор туда, куда уже смотрит пользователь: внутри кнопки, которую он нажал, или в той части контента, которая меняется.
- Предотвращайте «прыжки» макета, резервируя место для ключевых элементов (заголовок, основная кнопка).
Правила для ошибок и пустых состояний
Ошибки должны быть конкретными, спокойными и восстанавливаемыми. По возможности размещайте сообщение рядом с проблемой (уровень поля). Иначе используйте баннер или диалог с одним очевидным действием восстановления: «Повторить», «Изменить данные» или «Обратиться в поддержку». Избегайте обвиняющего тона.
Пустые состояния лучше всего работают по повторяемому шаблону: короткий заголовок, одно предложение подсказки и одна первичная кнопка, соответствующая тому, что пользователь ожидает сделать дальше. Пример: в портале клиентов, собранном на AppMaster, пустая вкладка «Invoices» может показывать «No invoices yet» с CTA «Create invoice», везде одинаково по тексту и поведению.
Правила поведения компонентов (не только внешний вид)
Два экрана могут выглядеть похоже и всё равно ощущаться по-разному. Поведение — то, что пользователь замечает в первую очередь: что происходит при двойном тапе, как показываются ошибки, вернёт ли «назад» туда, куда ожидают. Ваш чек-лист паритета должен покрывать правила взаимодействия, а не только цвета и шрифты.
Опишите правила взаимодействия для ключевых компонентов
Зафиксируйте одну «истину» для каждого компонента, затем сопоставьте её с паттернами каждой платформы, не меняя итогового результата.
- Buttons: определите реакцию при нажатии (ripple, highlight, haptic), есть ли смысл в long-press и как предотвращаете двойную отправку (блокировка на короткое время или до ответа сервера).
- Forms: решите, когда проходит валидация. Многие команды валидируют поля по blur для email и показывают ошибки только при отправке для необязательных полей. Держите расположение ошибок одинаковым и всегда ставьте фокус на первое невалидное поле.
- Lists: выберите основной паттерн обновления. На мобильном это может быть pull-to-refresh, на вебе — кнопка обновить, но оба должны обновлять одни и те же данные и сохранять предсказуемую позицию прокрутки. Также определите один подход к пагинации: нумерация страниц, «Load more» или бесконечный скролл.
- Navigation: сделайте поведение назад соответствующим намерению, а не особенностям платформы. Опишите, как работают deep links, как закрываются модальные окна и когда поток — полноэкранный, а когда — modal.
- Search: стандартизируйте, что делает кнопка очистки (только текст или текст + результаты), держите текст для пустых результатов одинаковым и делайте чипы фильтров удаляемыми одним тапом.
Небольшой пример для теста
Представьте портал клиентов, где ищут счета, открывают детали и оплачивают. На мобильном быстрый двойной тап по «Pay» может создать два списания, если показывается спиннер, но действие не блокируется. На вебе нажатие Enter может отправить форму, даже если поле невалидно.
Если вы строите это в AppMaster, задайте одинаковые правила в бизнес-процессе (единственный in-flight запрос на платёж, одинаковые триггеры валидации) и совпадающее поведение UI в веб- и мобильных билдерах. Решите один раз, а затем проверяйте на каждом релизе: два тапa, отправка с ошибками, обновление, назад, очистка поиска.
Пошагово: как провести ревью паритета
Ревью паритета лучше всего работают как повторяемый ритуал. Цель — поймать «та же фича, другой опыт» до того, как это заметят пользователи.
Начните с набора экранов для сравнения: вход, поиск, детальный экран, отправка формы и настройки. Используйте одинаковые тестовые данные на вебе и мобилке, чтобы сравнивать поведение, а не контент.
Проводите ревью в одном порядке:
- Подтвердите, что подписи, действия и результаты совпадают.
- Проверьте состояния: загрузка, ошибка, пусто, отключено, успех.
- Проверьте поведение: тап, фокус, клавиатура, прокрутка, подтверждения.
- Затем проверьте отступы, типографику и визуальную полировку.
- Повторно протестируйте после исправлений хотя бы один «золотой» путь.
Карточка оценки ускоряет принятие решений. Для каждого экрана или компонента помечайте: совпадает (один замысел и поведение, только платформенные отличия), допустимая разница (другая UI-реализация, тот же результат, задокументировано) или несоответствие (меняет смысл, добавляет шаги или ломает правило).
Когда логируете несоответствие, приложите два скриншота, точное правило, которое нарушено (например, «расположение primary action» или «тон пустого состояния») и влияние на пользователя в одном предложении. Если вы строите в AppMaster, укажите, связано ли это с настройкой билдера UI, правилом переиспользуемого компонента или самим бизнес-процессом.
Будьте готовы исправлять и правила. Если одно и то же «несоответствие» повторяется, значит руководство неясно или нереалистично. Обновите систему, вместо того чтобы постоянно править экраны по одному.
Частые ловушки, которые приводят к рассогласованию
Большинство проблем паритета — не крупные решения. Это мелкие изменения, которые просачиваются в процессе реализации, багфиксов и правок в последний момент. Чек-лист помогает, но только если вы знаете, где обычно начинается дрейф.
Copy drift — классика. Веб может писать «Save changes», а мобильный — «Update», хотя действие одинаково. Пользователи чувствуют это как трение, особенно при сбросе пароля, редактировании профиля и подтверждении платежа.
Отступы дрейфуют тише. Кто-то добавил 6px паддинга, чтобы починить один экран, и это «исключение» постепенно распространяется. Через несколько спринтов веб выглядит воздушным, а мобильный — сжатым, хотя оба «должны» использовать одну и ту же систему.
Проблемы с состояниями создают наибольшее непонимание. Веб может показывать ясные пустые состояния и ошибки, а мобильный оставляет пустой экран, бесконечный спиннер или молча «падает». Обычно это происходит, когда состояния обрабатываются в разных местах (фронтенд на вебе, нативная логика — в мобильном коде).
Во время ревью обращайте внимание на:
- Разные подписи для одного и того же действия или разный тон для одного и того же сообщения
- Случайные паддинги или маргины вне шкалы отступов
- Отсутствующие состояния загрузки, ошибки, пустого или отключённого состояния на одной платформе
- Просачивание платформенных настроек по умолчанию (переключатели, pickers, alerts) без явного правила
- Регрессии доступности: запутанный порядок фокуса на вебе или слишком маленькие цели на мобильном
Простой пример: в портале клиентов веб показывает «No invoices yet» с подсказкой и кнопкой добавления способа оплаты, а мобильный — просто пустой список. Исправление — не визуальная полировка, а согласование контента пустого состояния и ожидаемого поведения кнопки, затем применить это везде.
Даже если вы строите и веб, и натив в AppMaster, паритет всё равно требует правил для текста, токенов отступов и обработки состояний, чтобы каждый экран не становился исключением.
Быстрый чек-лист паритета (5 минут перед релизом)
Быстрая проверка ловит то, что пользователи замечают первым: текст, который кажется не на месте, кнопки, которые ведут по-разному, и экраны, выглядящие незавершёнными.
Откройте один «референтный экран» на вебе и на телефоне. Возьмите самый используемый поток (вход, поиск, оформление заказа, форма запроса) и быстро проверьте:
- Типографическая шкала: заголовки, основной текст и подписи соответствуют одной шкале размеров и правил веса. Проверьте межстрочный интервал, особенно на маленьких телефонах.
- Отступы и комфорт для касаний: паддинги вокруг карточек, форм и диалогов выглядят согласованно. На мобильном убедитесь, что контент не зажат у выреза или индикатора «домой».
- Состояния экранов: ключевые экраны явно показывают загрузку, ошибку, пустоту и отключённость. Пользователь всегда понимает, что происходит и что делать дальше.
- Поведение компонентов: первичные действия отправляют одинаково, показывают одинаковую обратную связь и предотвращают двойные нажатия. Поведение «назад» не должно неожиданно терять введённые данные.
- Смысл копирайта: подписи и сообщения ошибок совпадают по смыслу, а не только по словоформе. Если на вебе «Billing address», мобильный не должен случайно называть это «Payment info», если это одно и то же.
Если что-то не так, спросите себя: «Почувствует ли пользователь, что переключился на другой продукт?» Исправьте самое важное несоответствие первым.
Пример: в клиентском портале на AppMaster форма может выглядеть одинаково, но мобильная версия позволяла дважды нажать «Submit» при медленной сети. Добавьте явный индикатор загрузки и заблокируйте кнопку до завершения запроса, чтобы поведение совпало и не было дубликатов.
Пример: приведение клиентского портала к единому виду на вебе и мобильном
Представьте простой портал с тремя экранами: Login, Profile и Orders list. Веб используется на ноутбуке сотрудниками поддержки. Мобильное приложение — клиентами в пути. Вы хотите один и тот же поток и смысл, даже если UI-детали отличаются.
Типичное рассогласование — когда у клиента нет заказов. На вебе страница Orders может показывать дружелюбное пустое состояние с иконкой, коротким сообщением и кнопкой «Browse products». На мобильном тот же экран иногда превращается в пустой список без подсказок. Пользователи думают, что приложение сломано.
Исправление — воспринимать паритет как набор правил, а не догадок. Как эти правила применяются:
- Шаблон пустого состояния: одна структура и копия на обеих платформах: заголовок («No orders yet»), одна полезная строка и одна явная CTA. Вторичные действия — ссылки, а не кнопки.
- Иерархия кнопок: одна первичная кнопка на экране. И на вебе, и на мобильном «Browse products» — primary. «Contact support» — вторичный и визуально легче.
- Шкала отступов: используйте одинаковые шаги (например 8, 16, 24), чтобы макет казался родственным. Мобильный может добавить чуть больше вертикального паддинга для удобства касаний, но всё равно пользоваться той же шкалой.
Поведение обычно ломает паритет сильнее, поэтому опишите его явно:
- Обновление: мобильный поддерживает pull-to-refresh; веб — иконку обновления. Оба запускают одинаковое состояние загрузки и по возможности сохраняют позицию прокрутки.
- Пагинация: веб показывает «Load more» и управление размером страницы; мобильный использует бесконечный скролл или «Load more». Важно, чтобы новые элементы добавлялись, а не заменяли список.
- Ошибки: при падении загрузки Orders обе платформы показывают одно и то же сообщение и действие «повторить». Не прячьте ошибки за тостом на одной платформе и за полноэкранным сообщением на другой.
В итоге важен результат: пользователь понимает, что происходит и что ему делать дальше. UI уважает платформу (safe areas, поведение клавиатуры, hover vs tap), но продукт ощущается как единый портал.
Следующие шаги: поддерживать паритет по мере роста продукта
Паритет легко сделать один раз и легко потерять, как только продукт начнёт быстро меняться. Новые фичи, быстрые исправления и запросы под конкретную платформу быстро накапливаются. Цель — сделать «оставаться согласованным» путём наименьшего сопротивления.
Считайте чек-лист живым документом. После каждого релиза фиксируйте, что поменялось и что вас удивило. Если экран вышел с другим пустым состоянием на мобильном, превратите это в правило или пример, чтобы не повторять ошибку.
Сделайте согласованность путём наименьшего сопротивления
Чем больше можно переиспользовать, тем меньше решений нужно принимать заново. Постройте небольшой набор переиспользуемых компонентов и шаблонов страниц для общих паттернов: списки, детальные экраны, формы и «нет результатов». Держите один источник правды для общего текста (подписи кнопок, сообщения пустых состояний), чтобы веб и нативный интерфейсы не раскачивались в разные стороны.
Простая рутина поможет команде быть честной:
- Обновляйте правила паритета в заметках к релизу, а не через недели.
- Добавляйте пункты паритета в acceptance criteria фичи (состояния, отступы, поведение).
- Требуйте скриншоты или короткие записи с обеих платформ при PR или QA-подписании.
- Ведите список «одобренных отличий», чтобы исключения были явными, а не случайными.
- Планируйте быструю проверку паритета после изменений в дизайн-системе.
Встраивайте паритет в процесс разработки
Какими бы инструментами вы ни пользовались, стремитесь к общим токенам, общим шаблонам и общим правилам поведения. Если вы используете AppMaster, стоит рассматривать токены и переиспользуемые UI-паттерны как общие активы между веб- и мобильными билдерами и держать ключевую логику в Business Process Editor. Так паритет будет поддерживаться тем, как продукт строится, а не героическими последними ревизиями.
Если хотите, чтобы это прижилось — выберите одну ближайшую фичу и добавьте проверки паритета в её definition of done. Это простой способ превратить «быть согласованными» в работу, которую команда действительно может проверить.
Вопросы и ответы
UI-паритет означает, что пользователь может переходить между вашим веб-приложением и нативным мобильным приложением, не переучиваясь. Смысл, иерархия, состояния и результаты должны совпадать, даже если платформенные детали (safe area, системная навигация) отличаются.
Начните с того, что влияет на понимание и доверие: подписи действий, расположение основных кнопок, ключевые макеты экранов, состояния (загрузка/ошибка/пусто/отключено) и поведение основных компонентов. Если разница меняет ожидание пользователя, это должно быть согласовано.
Разрешите платформенные комфортные отличия, но соблюдайте одинаковый результат. Можно использовать системные шрифты, учитывать safe area и следовать iOS/Android-паттернам навигации, главное — чтобы пользователь узнавал экран, главную цель и итог действия.
Выберите один источник правды и зафиксируйте его. Напишите короткую базу по типографике, отступам, цветовым ролям, утверждённым компонентам и шаблонам состояний, и относитесь к изменениям как к версиям правил, а не к разовым правкам.
Используйте небольшой набор токенов, которых никто не будет придумывать заново. Определите типовую шкалу, правила обрезки и свёртки текста, а также минимальные читаемые размеры на мобильных устройствах, чтобы длинные заголовки и значения в таблицах вели себя предсказуемо.
Примите единую шкалу отступов для обеих платформ и избегайте «слегка другого» паддинга вне шкалы. Определите стандартный отступ экрана, разрывы между связанными элементами и явные правила для safe area, чтобы контент не оказался под вырезом или системной панелью.
Шаблонизируйте состояния вместо того, чтобы рисовать их на лету. Единое расположение и тон сообщений для индикаторов загрузки, ошибок, пустых экранов и пояснений к отключённым элементам помогут ни одна платформа не выглядеть сломанной, если что-то идёт не по плану.
Опишите правила взаимодействия, а не только внешний вид. Решите, как предотвратить двойные отправки, когда срабатывает валидация, что делает кнопка «назад», как работает обновление и как очищается поиск, чтобы тап, клавиатура и навигация вели себя одинаково на вебе и мобильном.
Короткая бок о бок проверка по фиксированному набору ключевых потоков с теми же тестовыми данными. Сначала проверьте подписи и результаты, затем состояния и поведение, и только потом визуальную полировку; логируйте несоответствия с указанием нарушенного правила и влияния на пользователя.
Делитесь токенами и переиспользуемыми UI-паттернами, держите критическую логику в одном месте. В AppMaster синхронизируйте дизайн-токены и повторно используемые компоненты между веб- и мобильным билдерами UI, а важную логику — в Business Process Editor, чтобы исправления применялись везде.


