Библиотека Tippy.js предоставляет мощные возможности для создания всплывающих подсказок, тултипов и сложных интерактивных элементов. При работе с мобильными устройствами возникают специфические задачи: ограниченная площадь экрана, сенсорное управление и необходимость корректного позиционирования. Рассмотрим основные подходы к адаптации Tippy.js под мобильные устройства.
По умолчанию Tippy.js инициируется через события
mouseenter и focus. На мобильных устройствах
событие hover недоступно, поэтому
необходимо использовать сенсорные события:
tippy('.button', {
content: 'Нажмите, чтобы увидеть подсказку',
trigger: 'click', // заменяет hover для мобильных устройств
});
Ключевые моменты:
trigger: 'click' обеспечивает открытие тултипа при
касании.mouseenter focus для десктопов,
используя trigger: 'mouseenter focus click'.show() и
hide().На маленьких экранах стандартное позиционирование top,
bottom, left, right может
приводить к обрезанию тултипа. Tippy.js совместим с
Popper.js, что позволяет автоматически подбирать
оптимальное положение:
tippy('.button', {
content: 'Тултип с адаптивным позиционированием',
placement: 'auto', // выбирает оптимальное положение
fallbackPlacements: ['top', 'bottom', 'left', 'right'],
});
Рекомендации:
placement: 'auto' в сочетании с
fallbackPlacements предотвращает обрезание подсказки..tippy-box {
max-width: 90vw;
}
interactive: true) с прокруткой.На десктопе тултипы часто открываются при наведении и закрываются при уходе мыши. На мобильных устройствах стоит учитывать, что клик по экрану может совпадать с другими действиями, поэтому управление закрытием должно быть явным:
tippy('.button', {
content: 'Интерактивный тултип',
interactive: true, // позволяет взаимодействовать с элементами внутри тултипа
trigger: 'click',
hideOnClick: true, // автоматически закрывает при повторном нажатии
});
Особенности для мобильных устройств:
interactive: true предотвращает случайное закрытие при
попытке нажать на внутренние элементы тултипа.hideOnClick полезно для однократного взаимодействия и
предотвращения «залипания» тултипа на экране.onClickOutside.Для мобильных устройств важно, чтобы тултипы не занимали слишком много места и оставались читаемыми:
tippy('.button', {
content: 'Короткий текст или HTML-содержимое',
maxWidth: '80vw', // ограничивает ширину
arrow: true, // визуальный маркер
});
Советы:
maxWidth в процентах от ширины окна предотвращает выход
за границы экрана.arrow) и отступы можно настроить через
CSS:.tippy-box[data-theme~='light'] {
padding: 10px;
}
.tippy-arrow {
width: 8px;
height: 8px;
}
allowHTML: true.В сочетании с CSS и JS можно динамически изменять параметры Tippy.js в зависимости от ширины экрана:
const isMobile = window.matchMedia('(max-width: 768px)').matches;
tippy('.button', {
content: 'Адаптивный тултип',
trigger: isMobile ? 'click' : 'mouseenter focus',
placement: isMobile ? 'bottom' : 'top',
maxWidth: isMobile ? '90vw' : '200px',
});
Преимущества подхода:
tippyInstance.setProps() при изменении размера экрана.Для мобильного UX полезно контролировать тултипы программно:
const tip = tippy('.button', {
content: 'Динамический тултип',
trigger: 'manual',
});
document.querySelector('.button').addEventListener('click', () => {
tip.show();
});
Особенности:
trigger: 'manual' позволяет открывать и закрывать
тултип по любому событию.click вместо hover.placement: auto и
fallbackPlacements.max-width).interactive: true для взаимодействия внутри
тултипа.manual при сложной
логике.Эти методы позволяют Tippy.js оставаться гибким и удобным инструментом для создания всплывающих подсказок на мобильных устройствах, обеспечивая корректное отображение и взаимодействие даже на маленьких экранах.