{"id":14286,"url":"\/distributions\/14286\/click?bit=1&hash=d1e315456c2550b969eff5276b8894057db7c9f3635d69a38d108a0d3b909097","title":"\u041f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0418\u0422-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u044b","buttonText":"","imageUuid":""}

Неработающие кнопки

Кнопки, которые активны в любой ситуации, давно уже вошли в число «лучших практик” UX-дизайна, однако до сих пор в интерфейсах встречаются и неактивные кнопки. В 2021 году коллеги из «Открытия» попросили меня подготовить презентацию с теоретическим обоснованием концепции "кнопки должны быть всегда активны”. Удобно иметь под рукой аргумент, чтобы предъявить менеджеру продукта. Теперь я оформил презентацию в виде статьи и надеюсь, что она будет полезна как продуктовым дизайнерам, так и менеджерам.

Слева: ручка активна. Справа: ручка неактивна, предложите 5 вариантов как открыть дверь

Предназначение кнопок

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

Недостаточно данных

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

Пользователь может не предоставить данные:

  1. на текущем экране
  2. на прошлом шаге
  3. на сторонних сервисах (например, не подтвердить адрес электронной почты)

Компоненты программы могут не предоставить данные:

  1. из-за ошибки соединения (медленный интернет)
  2. из-за долгих вычислений (типа генерации ключей)
  3. из-за внутренней ошибки программы

Таким образом, существует по меньшей мере 6 возможных объяснений, почему действие заблокировано.

Пользователь ничего не знает о внутреннем устройстве программы и не может достоверно определить причину, по которой кнопка неактивна. Реакция пользователя сводится к вариантам "я что-то сделал не так" или "программа не даёт мне сделать что я хочу”. Оба варианта вызывают негативные эмоции.

Единственный для пользователя вариант избежать негативных эмоций – не заметить неактивную кнопку вовсе. Именно такой паттерн и применяют дизайнеры: делают неактивные элементы по возможности незаметными.

Но это не сильно помогает. Давайте посмотрим на такую компоновку и сравним варианты:

Активная кнопка:

  • ✅ Хорошо заметна
  • ✅ Находится в удобном для нажатия месте
  • ✅ Нажимается
  • ❌ Преждевременное нажатие приводит к ошибке

Неактивная кнопка:

  • ❌ Плохо заметна
  • ❌ Находится в удобном для нажатия месте (зря его занимает)
  • ❌ Не нажимается
  • ❌ Преждевременное нажатие ни к чему не приводит

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

Включаем кнопки!

Пусть кнопка будет всегда активна. Пользователь в любое время может попытаться совершить действие. Если попытка отклонена, интерфейс сообщит о причине – укажет на недостающие данные (например, выделит красным цветом). Пользователю не придётся гадать, что именно он (или программа) делает не так.

Прячем кнопку под скроллинг

Хорошо, если удастся спрятать кнопку в самый низ, под скроллинг – никто не увидит активна она или нет. А когда пользователь заполнит все данные и долистает донизу, тогда и увидит активную кнопку. Соблюдается принцип своевременности, всё классно. Давайте сравним варианты.

Кнопка на виду:

  • ✅ Хорошо заметна
  • ✅ Находится в удобном для нажатия месте
  • ❌ Отнимает пространство
  • ❌ Преждевременное нажатие приводит к ошибке

Кнопка скрыта под скроллингом:

  • ❌ Незаметна, если не пролистать экран
  • ✅ Находится в удобном для нажатия месте (после ввода всех данных)
  • ✅ Не отнимает пространство
  • ✅ Преждевременное нажатие маловероятно

Действительно, за второй вариант набирается больше аргументов. Значит, лучше прятать кнопку под скроллингом. Но в реальности пользователи не ведут себя идеально. Некоторые пролистывают страницу вниз, не заполнив данные. Если такой пользователь увидит неактивную кнопку, перед ним встанет вопрос: почему кнопка не работает. Как мы определили выше, ответов может быть как минимум 6. Это перебор. Так что даже спрятанная внизу кнопка должна быть активной.

Правила расположения кнопки

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

Слева – контент умещается на экран. Справа – контент не умещается на экран.

Мало контента:

  • ✅ Кнопка хорошо заметна
  • ✅ Находится в удобном для нажатия месте
  • ✅ Не отнимает пространство
  • ❌ Преждевременное нажатие приводит к ошибке

Много контента:

  • ❌ Кнопка незаметна, если не пролистать экран
  • ✅ Находится в удобном для нажатия месте (после ввода всех данных)
  • ✅ Не отнимает пространство
  • ✅ Преждевременное нажатие маловероятно

Мне, как дизайнеру, проще сделать одну универсальную компоновку: привязать кнопку к нижнему краю экрана и всегда показывать её поверх контента (такой вариант я показывал выше). И программисту проще сделать одну компоновку. Дизайнер с программистом невольно путают простоту интерфейса и простоту создания интерфейса, от чего выдумывают, будто их простое решение упростит жизнь также и пользователю. Но аргументы за универсальную компоновку легко опровергнуть. Пользователю удобно всегда нажимать в одно и то же место? Нет, пользователь нажимает во множество разных мест на экране, ему всё равно. Пользователь хочет видеть главную кнопку в одном и том же месте? А он и увидит в том же месте, когда пролистает страницу до конца. И так далее.

В итоге, всё говорит в пользу адаптивного правила: мало контента – кнопка видна, много контента – кнопка скрыта под скроллингом.

Отключаем кнопки!

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

В начале статьи я писал про “лучшие практики”. У меня есть отдельная статья «Нет никаких UX-трендов», и я собираюсь написать ещё одну статью, где критически рассмотрю “лучшие практики”. Изучая тренды, я пришёл к выводу, что существует только один тренд – технический прогресс. UX-дизайнер лишь использует новые технологии, чтобы приблизить опыт использования цифровых продуктов к реальному опыту, к заложенному природой механизму восприятия человека. То же с лучшими практиками – они хороши лишь тем, что приближают цифровой опыт к реальному. Приближение к реальности – и есть единственная лучшая практика. В случае с кнопками напрашивается простая аналогия из окружающего мира: если что-то не работает, значит оно сломано. Если сущность не реагирует на касание, значит она умерла.

Заключение

Итак, по итогам вышесказанного следует придерживаться следующих правил:

  • Кнопка всегда активна
  • Если при нажатии на кнопку не выполнены условия для совершения действия, интерфейс указывает на них
  • Мало контента – кнопка видна
  • Много контента – кнопка не перекрывает контент, а убрана под скроллинг
  • Деструктивное необратимое действие – кнопка неактивна, нужно снять с предохранителя

Если хотите посмотреть больше реальных кейсов продуктового дизайна – заходите ко мне на manwe.ru

0
12 комментариев
Написать комментарий...
Милая Мила

проблема неработающих кнопок -частое явление , кто-то либо адаптируется и не решает этот вопрос , хотя как правило если кнопка есть , нужно ее починить

Ответить
Развернуть ветку
uxvoin

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

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

Ответить
Развернуть ветку
Валерий Гордеев

Никогда кстати не задумывался, почему кнопки бывают неактивными

Ответить
Развернуть ветку
pixelday
Изучая тренды, я пришёл к выводу, что существует только один тренд – технический прогресс.

👍

Ответить
Развернуть ветку
The A

Сначала пишете, что кнопка должна быть активной (пользователь нажмёт её и ему высветится, что осталось заполнить). А далее приводите точно такой же пример, но утверждаете что тут-то можно сделать неактивной. Оба примера идентичные...

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

Ответить
Развернуть ветку
Глеб Голубев

Неактивная кнопка

"Плохо заметна" - так сделайте ее хорошо заметной, подберите более темный серый. Главное оставить ее в чб, чтобы она отличалась от активной цветной кнопки, в вашем случае.

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

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

"Преждевременное нажатие ни к чему не приводит" - см. выше.

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

Ответить
Развернуть ветку
Александр Мачуговский
Автор

Кажется, Вы написали комментарий, не дочитав статью до конца.

Ответить
Развернуть ветку
The A

Если неактивная кнопка может нажиматься, то это уже активная кнопка :)

Ответить
Развернуть ветку
Глеб Голубев

Вот тут точнее изобразил

Ответить
Развернуть ветку
Just Michael

В итоге "открытие" стало неактивной кнопкой и как неликвид продано с дисконтом

Ответить
Развернуть ветку
Александр Мачуговский
Автор

в итоге чего?

Ответить
Развернуть ветку
nikitaglebov

Пару дней заметил на каком-то популярном сайте такую фигню: с мобильной версии сообщение об акции не закрывается, но если включить с телефона версию для ПК, то все ок

Ответить
Развернуть ветку
9 комментариев
Раскрывать всегда