На главную

CSS interest-delay: умные задержки для лучшего UX


В спецификации CSS Basic User Interface Module Level 4 появилось свойство interest-delay. Оно позволяет задать задержку “интереса”(внимания) для элемента. Сейчас это работает только в 142 Хроме.

Что такое «внимание пользователя»?

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

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

Точно так же, если пользователь уже начал взаимодействовать с элементом (например, навёл курсор на ссылку, и появилось выпадающее меню), то при переходе курсора с самой ссылки на это меню интерфейс не должен мгновенно «забыть», что пользователь всё ещё работает с ним. Иначе меню закроется в самый неподходящий момент.

Пример проблемы без interest-delay

Рассмотрим боковую навигацию без использования interest-delay. Попробуйте навести курсор на компьютере на первый пункт меню “Дизайн”, а после выбрать пятый пункт подменю “Гайдлайны”. Вы не сможете этого сделать, так как путь вашего курсора проходить через второй пункт меню “Разработка”, а значит вы уже взаимодейсвуете с ним поэтому появится подменю разработки. По сути вам нужно пройти следующий путь:

  • Навести курсор на первый пункт меню “Дизайн”;
  • Далее очень аккуратно переместить курсор на первый пункт подменю “Цветовые схемы”;
  • После перевести курсор ровно вниз на последний пункт подменю “Гайдлайны”.

Правда ведь удобно? 😁

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

.sidebar {
  interest-delay: 200ms 400ms;
}

Как управлять задержками?

Для управления этими задержками в CSS существуют специальные свойства:

  • interest-delay-start — задаёт, сколько времени должно пройти после того, как пользователь начал проявлять интерес, прежде чем элемент «официально» получит этот интерес.
  • interest-delay-end — задаёт, сколько времени должно пройти после того, как пользователь перестал проявлять интерес, прежде чем элемент «официально» потеряет его.

Также есть сокращённое свойство:

  • interest-delay — позволяет задать обе задержки сразу.

Возможные значения

Оба свойства (interest-delay-start и interest-delay-end) принимают следующие значения:

  • normal — браузер сам определяет задержку, исходя из платформенных соглашений. ⚠️ Важно: эти задержки никогда не равны нулю. Они могут отличаться друг от друга и даже зависеть от способа проявления интереса (например, наведение мыши и долгое нажатие могут иметь разные задержки).

  • <time> — вы сами указываете длительность задержки в миллисекундах (ms) или секундах (s). Например: 200ms, 0.5s.

Как работает сокращённая запись?

Свойство interest-delay работает так же, как и другие сокращённые свойства в CSS:

  • Если указано одно значение, оно применяется и к началу, и к окончанию задержки:

    interest-delay: 300ms;
    /* то же самое, что:
       interest-delay-start: 300ms;
       interest-delay-end: 300ms; */
  • Если указано два значения, первое относится к началу, второе — к окончанию:

    interest-delay: 200ms 500ms;
    /* то же самое, что:
       interest-delay-start: 200ms;
       interest-delay-end: 500ms; */

Дополнительные сведения

  • Применяется ко всем элементам.
  • Наследуется от родительских элементов.
  • Не поддерживает проценты.
  • Анимируется по вычисленному значению (computed value).

Что будет в будущем?

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