VIDEMIND
UI/UX Дизайн-системыГид

Состояния компонентов: что забывают нарисовать

Загрузка, ошибка, пустота, отключено, фокус с клавиатуры. Разбираем полный набор состояний и то, почему интерфейс разваливается именно на них.

Состояния компонентов: что забывают нарисовать — графика VIDEMIND
VIDEMIND · generated
Содержание · 10
  1. Идеальный макет — редкое состояние
  2. Полный список
  3. Пустые состояния
  4. Загрузка
  5. Длинный контент
  6. Почему состояний всегда больше, чем нарисовано
  7. Как состояния описывают, чтобы их не теряли
  8. Элементы, которые рисуют каждый день
  9. Выбор между похожими элементами
  10. Что в итоге

Загрузка, ошибка, пустота, отключено, фокус с клавиатуры. Разбираем полный набор состояний и то, почему интерфейс разваливается именно на них.

Идеальный макет — редкое состояние

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

Реальность состоит из ожидания, ошибок, пустых списков, длинных имён и отсутствующих изображений. Именно там интерфейсы и ломаются.

Полный список

Минимальный набор, который нужно нарисовать для любого нетривиального компонента.

СостояниеКогдаЧто забывают
DefaultОбычное
HoverНаведение мышиНет на тач-устройствах
Focus-visibleКлавиатураУбирают обводку
ActiveНажатиеНет отклика
DisabledНедоступноНе объясняют причину
LoadingОжиданиеПрыгает вёрстка
ErrorОшибкаСообщение без решения
EmptyНет данныхПросто пусто
OverflowДлинный контентЛомает раскладку
Состояния компонентов: что забывают нарисовать — графика VIDEMIND
VIDEMIND · generated

Пустые состояния

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

Отдельно стоит различать «пусто, потому что вы ещё ничего не создали» и «пусто, потому что фильтр ничего не нашёл» — это разные экраны с разными действиями.

Пустое состояние с объяснением и первым действием вместо пустого экрана
Пустое состояние с объяснением и первым действием вместо пустого экранаVIDEMIND · generated

Загрузка

Спиннер по центру пустого экрана — худший вариант: он не сообщает, сколько ждать, и вёрстка прыгает при появлении контента. Скелетоны, повторяющие форму будущего содержимого, решают обе проблемы.

Для действий короче 300 мс индикатор вообще не нужен: он только добавляет мельтешение.

  • До 300 мс — без индикатора.
  • 300 мс – 2 с — скелетон или локальный индикатор.
  • Дольше 2 с — прогресс и возможность отменить.
  • Кнопка при отправке — состояние loading и защита от двойного нажатия.

Длинный контент

Тесты на реальных данных выявляют больше проблем, чем любые ревью макетов. Имя из тридцати символов, название товара в четыре строки, число с семью разрядами — всё это ломает аккуратные макеты.

Простое правило: рисуйте компоненты сразу в трёх вариантах — минимальный контент, типичный и максимальный.

Состояния компонентов: что забывают нарисовать — графика VIDEMIND
VIDEMIND · generated
В макете у компонента два состояния, в работающем продукте — восемь. Ненарисованные придумает разработчик в последний день.

Почему состояний всегда больше, чем нарисовано

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

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

Как состояния описывают, чтобы их не теряли

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

Загрузку стоит разделять на две: короткую, где достаточно погасить кнопку, и длинную, где нужен скелет содержимого. Граница проходит примерно на секунде — дольше этого пустое место читается как поломка.

Состояния компонентов: что забывают нарисовать — графика VIDEMIND
VIDEMIND · generated

Элементы, которые рисуют каждый день

Список состояний относится к любому элементу, но у ходовых элементов есть и собственные правила, о которых спорят реже, чем стоило бы. Аккордеон сворачивает разделы и потому прячет содержимое от поиска по странице: он уместен там, где читатель ищет один раздел из многих, и вреден там, где нужно прочесть всё. Табы решают ту же задачу иначе — показывают один срез из нескольких равноправных, — и ломаются, когда срезов больше пяти или когда их названия не помещаются в строку.

Тултип — подсказка по наведению, и это делает его недоступным для касания: на телефоне наведения нет. Если в подсказке лежит что-то нужное, она должна быть либо подписью, либо раскрывающимся блоком по нажатию. Тост — короткое уведомление у края экрана; его беда в том, что он исчезает сам, поэтому в тосте не бывает важного: только подтверждение того, что человек и так сделал.

Выбор между похожими элементами

  • Чекбокс — независимые варианты, любое число может быть выбрано; радиокнопка — один из нескольких, и снять выбор нельзя.
  • Радиокнопок больше пяти — это уже список; меньше двух — не радиокнопка, а чекбокс.
  • Переключатель применяют только там, где действие происходит сразу; если нужно нажать «Сохранить», это чекбокс.
  • Автодополнение помогает при известном списке — города, марки; при свободном вводе оно мешает, подставляя не то.
  • Подсказки автодополнения выбираются клавиатурой: стрелки и Enter обязательны, иначе элемент недоступен без мыши.
Состояния компонентов: что забывают нарисовать — графика VIDEMIND
VIDEMIND · generated

Что в итоге

Интерфейс определяется не идеальным макетом, а тем, как он ведёт себя при загрузке, ошибке, пустоте и длинном контенте.

Рисуйте каждый компонент в трёх объёмах контента и не забывайте focus-visible — это половина доступности.

Коротко

Какие состояния нужно описывать обязательно?
Обычное, наведение, фокус, нажатие, отключено, загрузка, ошибка и пустое. Пропускают обычно фокус и пустое состояние — первое ломает работу с клавиатуры, второе встречает нового пользователя.
Чем отличается отключённая кнопка от скрытой?
Отключённая сообщает, что действие возможно, но сейчас недоступно, — и обязана объяснить почему. Если объяснить нечего, кнопку лучше не показывать вовсе.
Продолжить тему · Дизайн-системы

Доступность интерфейса

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

Нашли ошибку или неточность в атрибуции? Напишите нам

Обсуждение

Загружаем…

Только имя и мысль. Ссылки, разметку, код и номера телефонов журнал не публикует — учётных записей на сайте нет, и оставлять здесь ссылку бессмысленно.

0 / 1500