Когда у нас в eLama компонентов в библиотеке стало достаточно много, мы заметили, что ховеры не имеют системы: меняется цвет заливки, цвет рамки, цвет текста, появляется тень и т.д.
Мы делали это не со зла, в отдельных проектах так работало лучше, но глядя на интерфейс в целом, стало понятно, что это проблема.
Не всё бывает тем, чем кажется
При разработке интерфейсов мы опираемся на принцип — то, что ты делаешь должно работать так, как того будет ожидать пользователь. Если пользователь видит перед собой кнопку, то он будет ожидать от нее поведение кнопки, а значит она должна и вести себя ожидаемо.
Например, у нас в библиотеке есть ссылка и кнопка, визуально похожая на ссылку. Из-за того, что в их поведении при ховере не было сильного различия, мог возникать вопрос, что произойдет при нажатии — перекинет на другую страницу, или действие будет на текущей странице. Поначалу даже были случаи, когда разработчики использовали кнопку, как ссылку, руководствуясь тем, что она выглядит и ведет себя при ховере похоже на ссылку.
Какие ховеры вообще бывают
1. Изменение фона (появление подложки или изменение ее цвета)
2. Изменение бордера (появление или смена цвета)
3. Изменение цвета иконки или текста
4. Изменение местоположения
5. Добавление эффектов (тени, градиенты и т.д.)
6. Сложные ховеры (изменение размера, формы и т.д.)
На самом деле, типов ховеров может быть и больше, здесь перечислены, наверно, самые основные, и я думаю в комментариях вы сможете упомянуть еще какие-то.
Наводим порядок
Button, SelectList, Table, Chip, Lable, Switch, Pagination, навигация в левом меню
Какой тип решили использовать: Изменение фона
Кнопки в этой группе оказались самыми проблемными — у них оказалось сразу 3 типа ховера.
Мы решили сделать появление подложки единого цвета у кнопок, которые изначально не имеют никакого фона. Кнопки визуально похожие на ссылки получают важное отличие от ссылок при ховере.
Смену цвета у иконки мы оставили для активного состояния кнопки (например: tooltip или кнопка фильтров) и для того случая, когда зона наведения больше стандартного размера кнопки (например, у нас это кнопка закрытия toast)
Rating
Какой тип решили использовать: Изменение фона и изменение цвета иконки
В этом случае мы не стали менять тот ховер, какой был. Кнопка рейтинга похожа на обычной кнопку-иконку, у нее так же есть активное состояние, но эмоциональное значение у нее больше. Поэтому, чтобы усилить его, мы используем сразу два типа ховера.
RadioLine, CheckLine и Tab
Какой тип решили использовать: Изменение цвета текста
Приводим ховер в RadioLine, CheckLine к виду текущего ховера у табов — изменяем только цвет текста при наведении.
Убиваем двух зайцев разом: избавляемся от типа ховера с появлением обводки и улучшаем анимацию у RadioLine — в варианте с обводкой при перемещении синей подложки иногда заметно исчезающую обводку, что выглядит некрасиво.
Checkbox
Какой тип решили использовать: Изменение фона и бордера
Тут все просто: у компонента есть два состояния — выбранный и не выбранный — и соответственно два типа ховера — меняется фон и меняется бордер.
Input, MultiInput, TextArea, Select, Radiobutton
Какой тип решили использовать: Изменение бордера
Ховер на сложные элементы
У сложных элементов вроде карточки задачи на канбан-доске мы решили делать анимацию добавления эффекта при ховере — появление тени. Мы выбирали между тенью и появлением обводки, но обводку отмели, потому что обводка может частично теряться в элементе, в котором есть темные части по краям.
Но есть исключения
InputFile
У этого компонента есть два типа ховера — обычное наведение мышкой и перетаскивание файлов. Появление подложки при перетаскивании файлов это привычное поведение для такой кнопки, поэтому для обычного ховера оставляем смену цвета у иконки, чтобы эти два типа оставались разграниченными между собой.
Link Button
Не добавляем появление подложки, чтобы оставить визуальное отличие от кнопки при наведении.
Про анимацию ховеров
Практически у всех наших компонентов у ховера есть плавная анимация, но она нужна не всегда.
Без такой анимации можно обойтись в боковом меню, выпадающем списке и таблице. В том, что имеет структуру строк. Плавная анимация в таких случаях может выглядеть очень тягучей, если сделать ее слишком медленной, потому что она будет не поспевать за курсором. А если сделать ее слишком быстрой, то будет излишнее мерцание.
Но может быть и частичная анимация, например, так мы сделали у пагинации — при наведении на номер страницы подложка появляется плавно, но когда курсор уходит с нее, подложка исчезает мгновенно. Это было сделано, чтобы избежать ситуации, когда проводишь курсор по цифрам быстро и одновременно видны несколько подложек, потому что новые появляются, когда предыдущие еще не успели исчезнуть.
mSnus
Единственный известный мне традиционной способ показать пользователю, что кнопка или ссылка откроет новое окно — показать тултип "откроется в новом окне" при наведении.
Когда-то раньше было принято добавлять троеточие после текста кнопки, если она ведёт в новое окно, но сейчас это мало где сохранилось.
А так что кнопка, что ссылка могут вести и в новое окно, и в выполнять действие рамках страницы. Ховером это никак не обозначить.
Вообще ховер нужен за того, чтобы подтвердить пользователю факт наведения на нужный элемент, то есть готовность отреагировать на клик. Навешивать другие функции будет неинтуитивно.
dyakonov_design Автор
У себя в интерфейсе мы все же разграничили эти действия — кнопка отвечает только за действие на текущей странице, а на другие страницы ведет только ссылка.
Да, ховер нужен именно для того, для чего вы написали, но сделав его максимально непохожим у похожих кнопки и ссылки, мы хотим, чтобы пользователь в нашем интерфейсе и при помощи ховера заранее считывал отличие двух компонентов без дополнительных подсказок.
mSnus
но ведь это должн быть понятно до ховера и вообще без ховера (на мобильном, например), разве нет?
dyakonov_design Автор
Согласен, на мобильном ховеры не помогут. Можно у ссылок дефолтное состояние делать сразу с подчеркиванием, но, например, у ссылки внутри текста или для группы ссылок (футер на сайте) это будет излишне. Разницу между кнопкой и ссылкой еще можно обозначать текстом, например, если нужно что-то сделать на другом ресурсе, то и писать об этом в тексте ссылки. Например, не просто "Включить действие-конверсию", а "Включить действие-конверсию в Google Ads"
mSnus
Да, с подписями отличный вариант, спасибо