Меню
Поиск

Интерфейс и визуал · Паттерны и состояния

Как нарисовать загрузку, пустой экран, ошибку и успех

Экран бывает не только в состоянии «всё хорошо»: он грузится, бывает пустым, ломается и сообщает, что действие удалось. В уроке разберём, как перечислить состояния до того, как рисовать, чем пустой экран с объяснением отличается от недоделанного, когда показывать загрузку и какую, чем ошибка ввода отличается от ошибки системы и как подтвердить успех. Для практики — приложение магазина кофе, переключатель состояний, два тренажёра и поиск недоделанных состояний.

Пример для всего урока. Приложение того же магазина кофе, что и в темах про типографику, цвет и движение. Главный экран урока — «Мои заказы»: список прошлых заказов и кнопка «Повторить последний заказ». Вы увидите его во всех состояниях.

1Пять состояний одного экрана

Макет обычно рисуют в одном состоянии: данные есть, всё загрузилось, всё получилось. В остальных экран бывает не реже.

Посмотрите на «Мои заказы» глазами покупателя:

  • у нового покупателя заказов нет;
  • при плохой связи список грузится несколько секунд;
  • сервер иногда не отвечает;
  • после нажатия «Повторить» в списке появляется новый заказ.

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

«Мои заказы» · пять состояний

Обычное

←Мои заказы
№ 1042 · Эфиопия, Кения12 сентября · доставлен1 850 ₽
№ 1027 · Колумбия29 августа · доставлен890 ₽
№ 1011 · Эфиопия, 2 пачки14 августа · доставлен1 780 ₽
Повторить последний заказ
ОбычноеДанные есть, всё загрузилось. Чаще всего рисуют только это состояние.

Загрузка

←Мои заказы
Повторить последний заказ
ЗагрузкаСерые строки на месте заказов: видно, что будет список и какой он формы. Кнопка неактивна: повторять пока нечего.

Пусто

←Мои заказы
Заказов пока нетЗдесь будут все ваши заказы: состав, чек и кнопка, чтобы повторить заказ в одно нажатие.
Выбрать кофе
ПустоУ нового покупателя заказов нет, и это не ошибка. Экран говорит, что здесь появится, и ведёт туда, откуда начинается первый заказ.

Ошибка

←Мои заказы
Не удалось загрузить заказыЗаказы на месте, не пришёл ответ от сервера. Попробуйте ещё раз.
Повторить
ОшибкаСказано, что не получилось и что с данными, и есть кнопка, чтобы попробовать снова. Без неё остаётся только закрыть приложение.

Успех

←Мои заказы
Заказ № 1043 оформленЭфиопия, Кения · 1 850 ₽. Привезут завтра, 10:00–14:00.
№ 1043 · Эфиопия, Кениясегодня · оформлен1 850 ₽
№ 1042 · Эфиопия, Кения12 сентября · доставлен1 850 ₽
№ 1027 · Колумбия29 августа · доставлен890 ₽
УспехПосле нажатия «Повторить» видно номер нового заказа, сумму и когда привезут. Без этого покупатель не уверен, сработало ли нажатие, может нажать ещё раз и получить два одинаковых заказа.
Пять состояний, а экран один. Шапка и место на экране общие, меняется середина.

Сначала список состояний

Чтобы не пропустить ни одно состояние, перечислите их до того, как рисовать. Помогают четыре вопроса:

ВопросСостояние«Мои заказы»
Что видно, пока данные идут?ЗагрузкаСерые строки на месте заказов
Что, если данных нет?Пусто«Заказов пока нет» и кнопка в каталог
Что, если не получилось?ОшибкаЧто случилось и кнопка «Повторить»
Что после действия?УспехНомер нового заказа и когда его привезут
Список состояний пишется до макета. Состояние, которого нет в списке, в макете никто не нарисует.

Дизайнер Скотт Хёрфф в 2015 году назвал такой набор стеком интерфейса. В его списке пять состояний: идеальное, пустое, ошибка, частичное и загрузка. Частичное — когда данных мало, например один заказ вместо двадцати: экран не пустой, но выглядит не так, как в макете.

2Пустой экран: что здесь будет и что сделать

Пустой экран — не ошибка, но и не повод оставить белое место. Он объясняет, что здесь появится, и показывает первый шаг.

Пустота бывает трёх видов, и в каждом нужно сказать разное.

Почему пустоПример в магазинеЧто сказатьЧто предложить
Ещё ничего нет«Избранное» у нового покупателяЧто здесь появится и как сюда попадаютПерейти в каталог
Ничего не нашлосьПоиск с фильтром, под который нет товаровЧто искали и что мешаетСбросить фильтр, показать похожее
Всё сделаноНовых уведомлений нетЧто всё в порядкеОбычно ничего: пусто, потому что всё хорошо

Пустой поиск

Частая пустота — в поиске. Например, покупатель ищет кофе без кофеина, а включённый раньше фильтр «Молотый» оставляет ноль товаров.

Поиск без результатов · без объяснения и с объяснением

Без объяснения

←Поиск
эфиопия без кофеина
Молотый ×
Зёрна
Капсулы
Ничего не найдено

С объяснением и действием

←Поиск
эфиопия без кофеина
Молотый ×
Зёрна
Капсулы
Молотого такого нет«Эфиопия без кофеина» есть только в зёрнах, две пачки.
Сбросить фильтр «Молотый»
Эфиопия без кофеиназёрна, 250 г990 ₽
Слева непонятно, в чём дело: опечатка, товара нет или мешает фильтр. Справа видно, что мешает, и одно нажатие ведёт к результату.

В Nielsen Norman Group советуют для пустых экранов три вещи:

  • сообщить, что происходит;
  • подсказать, как здесь всё устроено;
  • дать прямой путь к главному действию.

Иллюстрация без текста ни одну из них не выполняет: она красивая, но не говорит, что делать.

Какими словами писать такой экран, разобрано в уроке «Тексты ошибок и пустых состояний», Junior.

Пустой экран отвечает на два вопроса: что здесь будет и что сделать сейчас. Для пустоты «всё сделано» второй ответ может быть «ничего не нужно».

3Загрузка: когда показывать и какую

Загрузку показывают там, где ожидание заметно. Где оно незаметно, индикатор только мелькает.

Ожидание человек замечает не сразу. Якоб Нильсен описал эти границы ещё в 1993 году:

  • ответ быстрее 0,1 секунды кажется мгновенным;
  • до секунды задержку уже видно, но мысль не прерывается;
  • после 10 секунд внимание уходит на другое.

От этого и зависит, что показывать.

Сколько ждатьЧто показатьПример
Меньше секундыНичего, кроме отклика на само нажатиеПереключить вкладку, отфильтровать уже загруженный каталог
От 1 до 10 секундИндикатор на месте того, что грузится: скелет для списка или экрана, крутилку для кнопки или одного блокаОткрыть список заказов, отправить отзыв
Больше 10 секундПрогресс с долей выполненного и возможность заняться другимОтправить фото чека, выгрузить историю покупок за год

Скелет или крутилка

Скелет — это серые блоки на месте будущего содержимого. Он лучше крутилки там, где грузится целый экран или список.

Список заказов грузится · крутилка и скелет

Крутилка на весь экран

←Мои заказы

Скелет на месте списка

←Мои заказы
Повторить последний заказ
Крутилка говорит только «подождите». Скелет показывает, что будет список и где встанет кнопка, и экран не прыгает, когда заказы пришли.
Не показывайте индикатор, если ответ приходит быстрее секунды. Крутилка, которая мелькает на долю секунды, выглядит как сбой. Если ответ бывает и быстрым, и медленным, индикатор появляется, только когда ответа нет дольше секунды.

Проверьте себя

Восемь случаев ожидания в приложении. Что показать, пока ждём?

Тренажёр · что показать, пока ждём
  1. Фильтр «Зёрна» в уже загруженном каталоге. Список меняется за десятую долю секунды.

  2. Список заказов открывается, обычно за 2–3 секунды.

  3. Кнопка «Отправить отзыв»: отправка идёт около 2 секунд, экран остаётся тем же.

  4. Фото чека для возврата отправляется 20–40 секунд.

  5. Вкладки «Кофе» и «Чай»: содержимое обеих уже в телефоне.

  6. Карточка товара открывается из каталога: фото и описание приходят за 1–2 секунды.

  7. Выгрузка истории покупок за год в файл, около минуты.

  8. Кнопка «Применить» у промокода: проверка идёт 1–3 секунды.

Сначала прикиньте, сколько ждать, потом — что именно грузится: целый экран или одна кнопка.

4Ошибка ввода и ошибка системы

Ошибку ввода человек исправляет сам, ошибку системы — нет. Поэтому показывают их по-разному.

Ошибка ввода — человек ввёл то, что нельзя принять: в телефоне не хватает цифры, не указан дом. Причина в поле, и исправить её можно в этом же поле.

Ошибка системы — не получилось по причине, которую в поле не исправить: пропала связь, не ответил сервер, не ответил платёжный сервис.

Адрес доставки · две разные ошибки

Ошибка ввода

←Адрес доставки
УлицаЛесная
Домнапример, 8к2
Укажите номер дома
Квартира14
Сохранить адрес

Ошибка системы

←Адрес доставки
УлицаЛесная
Дом8к2
Квартира14
Адрес не сохранилсяНе ответил сервер. Всё введённое осталось в полях, нажмите ещё раз.
Сохранить ещё раз
Слева ошибка стоит у поля и говорит, что вписать. Справа поля в порядке, поэтому сообщение стоит у кнопки: что не получилось, что с данными и что нажать.
ВопросОшибка вводаОшибка системы
Кто исправитЧеловек, в этом же полеНе человек: остаётся повторить, подождать или выбрать другой путь
Где показатьУ поля с ошибкойТам, где было действие: у кнопки или на месте списка
Что сказатьЧто вписать: «Укажите номер дома»Что не получилось и что с данными: «Адрес не сохранился, введённое осталось в полях»
Когда показатьКогда человек закончил с полем или нажал кнопку, а не на каждой букве. Пустое поле, из которого человек просто ушёл, — ещё не ошибкаСразу, как стало ясно, что не получилось
Что сохранитьВсё, что человек ввёл. Заставлять вводить заново — худшее, что можно сделать после ошибки

Когда проверять поле, большие системы решают по-разному. В Nielsen Norman Group советуют показывать ошибку сразу, как человек закончил с полем. GOV.UK проверяет только по кнопке «Продолжить»: так человек не видит ошибок, пока заполняет форму. Оба способа лучше, чем проверка на каждой букве. Подробно этот спор разобран в уроке «Формы», Middle.

Не показывайте ошибку одним цветом. Красную рамку без текста не заметит тот, кто плохо различает цвета, а заметивший не поймёт, что исправить. По WCAG ошибку ввода описывают текстом — это критерий 3.3.1, уровень A.

То же с кодами и общими словами. «Ошибка 500» ничего не говорит покупателю, а «Что-то пошло не так» не говорит, что делать дальше.

Проверьте себя

Восемь ситуаций в приложении. Чья это ошибка?

Тренажёр · чья это ошибка
  1. В номере телефона девять цифр после +7.

  2. Список заказов не загрузился: сервер не ответил.

  3. По запросу «без кофеина» с фильтром «Капсулы» ничего не нашлось.

  4. Промокод введён верно, но его срок закончился 1 сентября.

  5. Оплата не прошла: платёжный сервис не ответил за 30 секунд.

  6. В корзине нет товаров.

  7. В поле «Дата доставки» набрано 31.09.

  8. Фото к отзыву не отправилось: пропала связь.

Спросите себя: может ли человек исправить это в поле? Если да — ошибка ввода. Если данных просто нет — это не ошибка, а пустое состояние.

5Успех: сказать, что получилось

После действия человек должен знать, что оно удалось. Насколько заметным сделать подтверждение, зависит от важности действия.

ДействиеКак подтвердитьПример
Результат видно сразу на местеНичего дополнительноНажали «+», и на кнопке стало «2 пачки»
Результат в другом месте экрана или приложенияКороткая плашка, которая уходит сама«Добавлено в корзину» внизу экрана
Важное действие или такое, которое не отменитьЭкран или блок с подробностями: что сделано, номер, что будет дальше«Заказ № 1043 оформлен, привезут завтра»
После оплаты · общее слово и результат

Общее слово

Оплата
Успешно!
ОК

Результат и что дальше

Заказ оформлен
Заказ № 1043 оплачен1 850 ₽ списано с карты •• 4417.
ДоставкаЗавтра, 10:00–14:00 · ул. Лесная, 8к2, кв. 14
Курьер позвонит за час. Отменить заказ можно до 20:00 сегодня.
К заказу
Слева непонятно, что именно успешно и что теперь делать. Справа видно, что сделано, сколько списано и что будет дальше.
Подтверждение называет результат. Не «Успешно», а «Заказ № 1043 оплачен». Не «Готово», а «Адрес сохранён».

6Найдите недоделанные состояния

Листы состояний четырёх экранов, которые команда магазина отдала в разработку. Пять мест в них недоделаны.

Нажимайте на куски экранов, которые вы бы переделали. Под каждым куском написано, когда он появляется. В разборе будет, что с ним не так.

Листы состояний · найдите недоделанное

Мои заказы

←Мои заказы
первое открытие · 2–3 с переключение «Текущие / Прошлые» · 0,2 с у нового покупателяЗаказов пока нетЗдесь будут все ваши заказы и кнопка, чтобы повторить заказ.Выбрать кофе

Поиск

←Поиск
после поискадекаф если ничего не нашлосьНичего не найдено

Адрес доставки

←Адрес доставки
в телефоне не хватает цифрыТелефон+7 912 345 67 8 дом не указанДомнапример, 8к2Укажите номер дома

Оплата

←Оплата
после нажатия «Оплатить», пока нет ответаИдёт оплата… оплата не прошла · плашка пропадает через 3 сЧто-то пошло не так оплата прошлаУспешно!ОК
  1. Скелет списка при первом открытии.Оставить. Ждать 2–3 секунды, грузится весь список. Серые строки показывают его форму, и экран не прыгает, когда заказы пришли.
  2. Крутилка на весь экран при переключении вкладок, 0,2 секунды.Убрать. Ответ быстрее секунды. Крутилка мелькнёт и закроет весь экран, будто что-то сломалось. Вкладка должна открываться сразу.
  3. «Заказов пока нет» и кнопка «Выбрать кофе».Оставить. Сказано, что здесь будет, и есть путь к первому заказу.
  4. Запрос остался в поле поиска.Оставить. Видно, что именно искали, и запрос можно поправить, не набирая заново.
  5. «Ничего не найдено» — и больше ничего.Дописать. Непонятно, опечатка это, товара нет или мешает фильтр. Скажите, что мешает, и дайте действие: сбросить фильтр, показать похожее.
  6. Поле «Телефон» с красной рамкой и без текста.Дописать. Цвет не все различают, а заметивший не поймёт, что не так. Под полем нужен текст: «В номере 10 цифр после +7, сейчас 9».
  7. Поле «Дом» с текстом «Укажите номер дома».Оставить. Ошибка у поля, текстом, и сказано, что вписать.
  8. Кнопка «Идёт оплата…» неактивна, пока нет ответа.Оставить. Видно, что нажатие принято, и второй раз не нажать — деньги не спишутся дважды.
  9. Плашка «Что-то пошло не так» пропадает через 3 секунды.Переделать. Это ошибка системы, и в ней самое важное: списаны ли деньги и что делать. Сообщение остаётся на экране, пока человек не решит, что дальше, и в нём есть «Повторить оплату».
  10. «Успешно!» и кнопка «ОК».Дописать. Непонятно, что успешно: оплата, заказ, доставка? Назовите результат — «Заказ № 1043 оплачен», — сумму и что будет дальше.

Все пять найдены. Почти везде состояние нарисовано, но человеку не сказано, что случилось и что делать дальше. А крутилка стоит там, где ждать не приходится.

Нормальные куски тоже можно нажать: вы прочитаете, почему там всё в порядке, а счётчик «Найдено» не изменится.
Состояние без текста — недоделанный экран. Про каждое спросите: понятно ли, что случилось, и понятно ли, что делать.

7Задание

Возьмите свой экран и нарисуйте все его состояния. Выпишите, какого из них раньше не было в макете.

Часть 1 · Составить список, 15 минут

  1. Выберите экран с данными: список, поиск, форму, корзину. Экран, где ничего не грузится и ничего не вводят, для задания не подойдёт.
  2. Ответьте на четыре вопроса из начала урока: что видно, пока данные идут; что, если их нет; что, если не получилось; что после действия.
  3. Разберите пустоту по видам: бывает ли здесь «ещё ничего нет», «ничего не нашлось», «всё сделано».
  4. Разберите ошибки: по каждому полю — что можно ввести не так, и отдельно — что может не получиться у системы.
Состояния экрана · заполните перед макетом
ЭКРАН: ______________________        Дата: __.__.____

ОБЫЧНОЕ: что видно, когда всё есть: ______________________

ЗАГРУЗКА
сколько обычно ждать: ___ с   в худшем случае: ___ с
что показать: ничего / индикатор на месте / скелет / прогресс с долей

ПУСТО
ещё ничего нет:     текст ______________   действие ______________
ничего не нашлось:  текст ______________   действие ______________
всё сделано:        текст ______________

ОШИБКА ВВОДА (по полям)
поле ______________: что не так ______________   текст у поля ______________
поле ______________: что не так ______________   текст у поля ______________

ОШИБКА СИСТЕМЫ
что не получилось: ______________   что с данными: ______________
что предложить: повторить / подождать / другой путь: ______________

УСПЕХ
как подтвердить: видно на месте / плашка / экран с подробностями
текст: ______________________

РАНЬШЕ НЕ БЫЛО В МАКЕТЕ: ______________________
Строку «раньше не было в макете» заполняйте честно: ради неё задание и делается.

Часть 2 · Нарисовать, 45 минут

  1. Скопируйте основной экран столько раз, сколько состояний в списке. Шапка и навигация общие, меняется середина.
  2. Нарисуйте каждое состояние по списку: загрузку по длительности, пустоту по виду, ошибку ввода у поля, ошибку системы у действия.
  3. Впишите настоящие тексты, а не «Текст ошибки». Пустое состояние без слов — недоделанный экран.
  4. Положите состояния рядом и подпишите, когда какое появляется.

Часть 3 · Проверить, 10 минут

  1. Пройдите каждое состояние двумя вопросами: понятно ли, что случилось; понятно ли, что делать.
  2. Покажите лист разработчику или коллеге и спросите, чего не хватает. Каждое «а что здесь показывать?» — пропущенное состояние.
Как понять, что задание выполнено. У экрана нет ни одного состояния, про которое разработка спросит «а что здесь показывать».

Что должно получиться

  • Лист состояний экрана: обычное, загрузка, пусто, ошибки, успех.
  • Заполненный шаблон с текстами для каждого состояния.
  • Строка о том, какого состояния раньше не было в макете.

План работы: 15 минут на список, 45 на макеты, 10 на проверку. Всего — чуть больше часа.

Частые сложности

  • «Пустое состояние бывает раз в жизни». Зато это первое, что видит новый человек. По нему он решает, понятно ли здесь хоть что-то.
  • «Текст ошибки напишет разработка». Разработка напишет то, что знает: код и слово «Ошибка». Что человеку делать дальше, знает тот, кто проектировал сценарий.
  • «Не знаю, сколько будет грузиться». Спросите разработку, сколько обычно и сколько в худшем случае. Нарисуйте состояние для худшего, а рядом допишите: показывать, только если ответа нет дольше секунды.
  • «Состояний слишком много». Большинство отличаются только серединой экрана. Нарисуйте середину, остальное скопируйте.

8Чек-лист и ошибки

Экран готов, если

  • Состояния перечислены до макета: загрузка, пусто, ошибка, успех
  • Пустое состояние говорит, что здесь будет и что сделать сейчас
  • Загрузка показана там, где ждать дольше секунды
  • Для ожидания дольше 10 секунд есть прогресс с долей
  • Ошибка ввода стоит у поля и описана текстом
  • Ошибка системы говорит, что не получилось, что с данными и что делать
  • После ошибки введённое не пропадает
  • Подтверждение называет результат, а не «Успешно»

Что мешает

  • «Нарисую потом». Потом состояние рисует разработка — как успеет и без текста.
  • Картинка вместо объяснения. Пустой экран красивый, но непонятно, что делать.
  • Крутилка на всё. Даже там, где ответ приходит за долю секунды.
  • «Что-то пошло не так». Человек не знает, что именно, и не знает, что делать.
  • Ошибка одним цветом. Красную рамку видят не все, и непонятно, что исправить.

9Три ступени темы

В этом уроке учимся рисовать основные состояния экрана. На следующих ступенях — проверять экран на крайних случаях и описывать поведение элементов, а потом собирать общие паттерны для всего продукта.

СтупеньЧто нужно уметьКак проверить результат
Junior — этот урок Перечислять состояния до макета; рисовать пустой экран с объяснением и действием; выбирать индикатор загрузки по длительности; отличать ошибку ввода от ошибки системы; называть результат в подтверждении У экрана нет состояния, про которое разработка спросит «а что здесь показывать»
Middle Проверять экран на длинном тексте, сотнях строк, пустых полях, отсутствии прав и медленной сети; отличать состояние элемента от состояния экрана; описывать поведение словами Разработка задала по макету меньше трёх вопросов о поведении
Senior Находить задачи, которые в продукте решены по-разному, собирать из них общий паттерн, заменять разнобой и выводить устаревшее Новый экран с этой задачей собран по паттерну кем-то другим
Ориентир по этой теме: про любой экран вы можете сказать, как он выглядит, пока грузится, когда пуст, когда сломался и после того, как всё получилось.

Что почитать дальше

  • Designing Empty States in Complex Applications: 3 GuidelinesNielsen Norman Group, Кейт Каплан · на английском · бесплатноТри правила для пустых экранов: сообщить, что происходит, подсказать, как здесь всё устроено, и дать путь к главному действию. Там же — почему нельзя показывать «Нет записей», пока данные ещё грузятся. Статья 2021 года, примеры из сложных рабочих приложений.
  • Skeleton Screens 101Nielsen Norman Group, Самхита Танкала · на английском · бесплатноКогда показывать скелет, когда крутилку, а когда полосу прогресса: меньше секунды — ничего, до 10 секунд — скелет для целого экрана и крутилка для одного блока, дольше — прогресс. Там же — почему скелет из одной шапки и подвала не помогает.
  • Error-Message GuidelinesNielsen Norman Group, Тим Нойзессер и Эван Санволл · на английском · бесплатноКак показать ошибку, чтобы её заметили, как написать, чтобы поняли, и как сберечь силы человека — в том числе не стирать то, что он ввёл. Уточнение к уроку: человек ушёл из пустого поля — это ещё не ошибка.
  • Empty statesIBM Carbon Design System · на английском · бесплатноТри вида пустоты в дизайн-системе IBM: данных ещё нет, пусто после действия человека (поиск без результатов, всё сделано) и пусто из-за ошибки или прав, — что сказать и что предложить в каждом. Справка дизайн-системы для рабочих приложений.
  • Refactoring UIАдам Уотан и Стив Шогер, 2018 · книга на английском · платнаяГлава «Don’t overlook empty states» из раздела «Finishing Touches»: пустой экран как место для первого действия. Три страницы, текст закрыт.