Как стать автором
Обновить
382.16

UX для frontend на основе дизайн-принципов MUI

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.1K

Привет, Хабр! Меня зовут Александр, я работаю frontend-разработчиком в Т-Банке. В этой статье я расскажу о UX (User Experience) на основе MUI (Material User Interface): исследую интересные практики и покажу, какие элементы UI можно использовать, чтобы улучшить UX.

Статья — выжимка из документации MUI по их принципам дизайна. Обратите внимание, что в статье нет акцента на особенностях UX, присущих MUI, но выделена полезная информация, которую можно использовать вне рамок MUI:

— поверхности;
— раскладка;
— сжатие;
— цвета;
— темная тема;
— показ ошибок.

Поверхности

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

К примеру, такой дизайн был в одном из разрабатываемых мной приложений.

Тень и граница у верхней панели приводили к лишней визуальной нагрузке
Тень и граница у верхней панели приводили к лишней визуальной нагрузке

Вид верхней панели казался странным, но я не мог понять почему. Как раз в то время, по счастливой случайности, я ознакомился с концепциями поверхностей в MUI и понял, что в верхней панели попросту использовалось слишком много разграничителей: через тень и границу. Я убрал границы и оставил только тень.

Панель без границы стала более «легкой»
Панель без границы стала более «легкой»

Панель будто бы вырвалась из оков границ, удалось сбросить лишнюю нагрузку с интерфейса.

Концепция показа областей интерфейса в MUI основана на том, что отображение элементов разбивается на определенные поверхности. При этом каждая поверхность может отделяться от другой на основе трехмерных координат с помощью света, поверхности и теней. Наиболее важную роль в выделении поверхностей играют тени, потому что они позволяют задавать высоту по Z-оси.

Тень отделяет одну поверхность от другой. Источник иллюстрации
Тень отделяет одну поверхность от другой. Источник иллюстрации

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

Диаграмма высоты поверхностей. Источник иллюстрации
Диаграмма высоты поверхностей. Источник иллюстрации

Элементы с равной высотой через тени расцениваются как равные по приоритету.

Диалоговое окно находится на том же уровне важности, что и текст. Источник иллюстрации 
Диалоговое окно находится на том же уровне важности, что и текст. Источник иллюстрации 

Затенение фона (skimming) выделяет поверхность по приоритету, но не подчеркивает изменение высоты по Z-оси.

Диалоговое окно акцентирует внимание на себе. Источник иллюстрации
Диалоговое окно акцентирует внимание на себе. Источник иллюстрации

Но не стоит злоупотреблять тенями и «навешивать» их на обычные элементы.

Выделение изображения тенями приводит к необоснованному акценту на нем. Источник иллюстрации
Выделение изображения тенями приводит к необоснованному акценту на нем. Источник иллюстрации

Раскладка

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

Раскладка, скорее всего, знакомая многим. Источник иллюстрации
Раскладка, скорее всего, знакомая многим. Источник иллюстрации

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

Примеры отображения элементов в панели приложения. Источник иллюстрации
Примеры отображения элементов в панели приложения. Источник иллюстрации

Для отделения панели приложения от других поверхностей приложения можно использовать заливку фона, границы или изменение высоты через тени.

Панель навигации может иметь свернутый и развернутый вид. При больших разрешениях монитора удобнее показывать панель в развернутом виде, а при маленьких разрешениях это может быть модальная панель навигации, которая при раскрытии может перекрывать контент (skimming).

Модальная панель навигации. Источник иллюстрации
Модальная панель навигации. Источник иллюстрации

На мобильных устройствах можно вынести часто используемые действия или навигацию в нижнюю панель.

Нижняя панель с действиями. Источник иллюстрации 
Нижняя панель с действиями. Источник иллюстрации 

Способ отображения основного контента играет важную роль, поэтому очень полезно группировать элементы. Группировку можно сделать по принципу схожести. Например, карточки с одинаковой внутренней раскладкой и типографикой будут восприниматься как одна группа.

Пример визуальной группировки карточек. Источник иллюстрации
Пример визуальной группировки карточек. Источник иллюстрации

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

Заголовки и описания статей сгруппированы через отступы. Источник иллюстрации)
Заголовки и описания статей сгруппированы через отступы. Источник иллюстрации)

Можно использовать явную группировку через установку границ для группы элементов или изменение высоты через тени.

Каждый элемент явно отделен от другого границей. Источник иллюстрации 
Каждый элемент явно отделен от другого границей. Источник иллюстрации 

В MUI есть таблица, которая помогает определить поведение и отображение компонентов при изменении размеров экрана:

Тип компонента

Мобильное отображение

Планшетное отображение

Десктопное отображение

Навигация (вариант 1)

Нижняя навигация

Шторка навигации (navigation rail)

Боковая панель

Навигация (вариант 2)

Модальная панель навигации

Модальная панель навигации

Открытая боковая панель

Коммуникация

Полноэкранное модальное окно

Модальное окно

Модальное окно

Действия

Нижняя панель

Меню

Меню

Сжатие

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

Задачи, подразумевающие интерактивность, и компоненты, основанные на уведомлениях, не должны применять сжатие. Например, увеличение сжатия в диалоговом окне уменьшает фокусировку, читаемость и важность.

Высокая степень сжатия приводит к ухудшению работы с модальным окном. Источник иллюстрации 
Высокая степень сжатия приводит к ухудшению работы с модальным окном. Источник иллюстрации 

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

Компоненты с большим сжатием должны иметь более крупные внешние и внутренние отступы.

Чем выше степень сжатия, тем больше внешние отступы. Источник иллюстрации 
Чем выше степень сжатия, тем больше внешние отступы. Источник иллюстрации 

Цвета

Основной цвет (primary) чаще всего применяется в приложении для различия UI-элементов между собой:

  • Primary-цвет можно по умолчанию применять к кнопкам или, к примеру, к заголовкам, чтобы сделать акцент на них. Нежелательно использовать primary-цвет для обычного текста параграфов.

  • Secondary-цвета позволяют добавить еще больше особенностей в приложение. Такие цвета можно применять на floating-кнопках, прогресс-барах, заголовках, при выделении текста и так далее.

Бирюзовый secondary-цвет на floating-кнопке. Источник иллюстрации 
Бирюзовый secondary-цвет на floating-кнопке. Источник иллюстрации 

Цвета могут иметь темные и светлые вариации.

Фиолетовый primary-цвет использует темный вариант (700) для системной панели сверху. Источник иллюстрации 
Фиолетовый primary-цвет использует темный вариант (700) для системной панели сверху. Источник иллюстрации 

Увеличение контраста между цветом фона и элементом на нем может привести к увеличению акцента.

Выбранные элементы показываются белым, сильно контрастируя с фоном. Источник иллюстрации 
Выбранные элементы показываются белым, сильно контрастируя с фоном. Источник иллюстрации 

Если приложение не содержит высококонтрастных цветов, применение контрастного цвета на элементах выделит их и придаст важности.

Заголовки выделяются на фоне бело-серой палитры приложения. Источник иллюстрации
Заголовки выделяются на фоне бело-серой палитры приложения. Источник иллюстрации

Цвета должны консистентно использоваться по всему приложению. Допустим, если для индикации выбора используется secondary-цвет, все подобные индикации должны выделяться этим цветом.

Очевидно, но черный цвет текста рекомендуется использовать на светлом фоне, а белый цвет — на черном.

Вместо использования оттенков серого для цвета текста или иконок на цветном фоне куда лучше применить прозрачность. Так текст будет смотреться более мягко в сочетании с фоном.

Применение прозрачности к черному тексту слева. Источник иллюстрации 
Применение прозрачности к черному тексту слева. Источник иллюстрации 

Разный уровень прозрачности текста может показывать определенные состояния. Выделяющийся текст может иметь процент прозрачности около 87%, подсказки и обычный текст — около 60%, но подсказка текста ошибки должна иметь прозрачность 100%. Disabled-текст — около 38%. То же самое можно сказать про иконки.

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

Кстати, в MUI есть удобные инструменты для генерации цветовой палитры и генерации темы.

А MUI 3 предлагает реализацию динамической генерации цветов для мобильных устройств.

Темная тема

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

Принципы построения темной темы:

  • оттенки серого лучше, чем черный цвет.

  • больше темного, чем акцентных и светлых цветов.

  • важно следить за контрастом, чтобы все было хорошо видно.

В темной теме высота поверхностей измеряется яркостью цвета. Чем выше яркость, тем выше поверхность. Для этого создается верхний слой (overlay), который накладывается на поверхность. Overlay на основной слой позволяет увеличить контраст между разными поверхностями и выразить высоту.

Чем выше поверхность, тем выше яркость overlay над ней. Источник иллюстрации 
Чем выше поверхность, тем выше яркость overlay над ней. Источник иллюстрации 

Соотношение контраста между текстом и поверхностью должно быть примерно 15,8:1, и это подходит под стандарты WCAG's AA (соотношение текста и фона 4,5:1):

Пример правильной (сверху) и неправильной (снизу) контрастности в темной теме. Источник иллюстрации 
Пример правильной (сверху) и неправильной (снизу) контрастности в темной теме. Источник иллюстрации 

Primary- и secondary-цвета следует использовать с пониженной контрастностью, чтобы избегать напряжения глаз.

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

Еще несколько комментариев: 

  • Brand-цвета можно использовать без снижения контрастности, но с осторожностью.

  • Яркие цвета лучше всего использовать для небольших поверхностей вроде кнопок, переключателей и так далее. Можно применять и поверхности со светлой темой, чтобы выделить их. Например, для модальных окон или уведомлений.

  • Чем важнее текст, тем менее прозрачным он должен быть.

Показ ошибок. Оптимистичные и пессимистичные обновления

Как правило, приложение с хорошим UX подразумевает не только красивые цвета, удобное расположение кнопок и так далее. Важную роль играет фидбэк от взаимодействия пользователя с приложением.

Если приложение не дает должного фидбэка или дает его с опозданием, пользователь может посчитать, что приложение «тормозит». Подобное восприятие приложения пользователем называют порогом Доэрти: ответная реакция от системы должна быть быстрой, около 400 миллисекунд, иначе система будет казаться медленной. Например, при долгой загрузке изображения можно сначала загрузить его эскиз и размывать это изображение. Или не обязательно ждать отклика от системы — например, на запрос. Можно сразу отобразить желаемый отклик на действие пользователя, а потом уже показать уведомление, когда запрос завершится.

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

Но пока что все это теория, и неплохо бы подкрепить слова примерами.

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

Пример показа пустого экрана дашборда
Пример показа пустого экрана дашборда

Система не получила прав пользователя, и это критическая ошибка. На верхнем скриншоте видно, что пользователь не сможет работать с приложением, поэтому нет смысла показывать сломанную функциональность из-за ошибки.

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

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

Уже лучше, но стоит обратить внимание на текст ошибок и не смущать пользователя терминами наподобие «пермишены» и «запрос».

Пользователю не всегда важно знать технические подробности ошибок
Пользователю не всегда важно знать технические подробности ошибок

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

В таком случае лучше показать уведомление, которое пользователь может заметить, а может упустить из виду, продолжив работу.

Не удалось получить подсказки, но продолжить работу можно
Не удалось получить подсказки, но продолжить работу можно

Не всегда важно ожидать окончания того или иного запроса или процесса в приложении. Для улучшения UX можно сразу показывать результат действия пользователя — это называется оптимистичными обновлениями.

К примеру, такое часто практикуется при отправке сообщений.

Сначала обновляем UI, потом обрабатываем запрос
Сначала обновляем UI, потом обрабатываем запрос

Куда менее предпочтительно было бы блокировать экран на время загрузки сообщения и показывать диалоговое окно об ошибке, если отправка сообщения провалилась. Это пессимистичное обновление.

Сначала обрабатываем запрос, потом обновляем UI
Сначала обрабатываем запрос, потом обновляем UI

Заключение

Я рассмотрел разные стороны построения UX на основе дизайн-принципов MUI.

Благодаря изучению MUI я получил массу полезной информации о UX, которую можно взять за основу, когда возникнут вопросы о построении интерфейсов.

Вот несколько важных для меня выводов: 

  • Концепция выделения поверхностей по высоте через тени и подложки (в темной теме) выглядит интересно и вполне может быть применима вне рамок MUI.

  • При построении раскладки вполне можно будет опираться на таблицу раскладок MUI, упомянутую в статье.

  • Понимание различия цветов (primary, secondary и так далее) позволит грамотно построить цветовую схему и выдержать цветовое оформление приложения.

  • Правильный показ ошибок обеспечит хорошее впечатление от пользования приложением и ответит на вопрос, какую ошибку показывать в том или ином случае.

А что вы думаете по поводу пользы знания UX для frontend-разработчика? И из каких источников черпаете информацию?

Теги:
Хабы:
Всего голосов 14: ↑14 и ↓0+14
Комментарии2

Публикации

Информация

Сайт
l.tbank.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия