Переход с версии 4.x на более новые версии Tippy.js сопровождается значительными изменениями внутренней архитектуры. Основное отличие заключается в переходе на модульную структуру и более тесную интеграцию с Popper.js версии 2.
В версии 4.x библиотека была монолитной: весь функционал поставлялся «из коробки», включая анимации, темы и плагины. В новых версиях:
Это означает, что теперь подключение Tippy.js требует более явного управления зависимостями.
В версии 4.x использовался глобальный или CommonJS/UMD подход:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
В новых версиях применяется современный ES-модульный синтаксис с поддержкой плагинов:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
На первый взгляд код похож, однако:
Пример подключения плагина:
import tippy, { followCursor } from 'tippy.js';
tippy('.btn', {
followCursor: true,
plugins: [followCursor],
});
В версии 4.x использовалась более старая версия Popper.js. Обновление принесло:
Старые свойства, связанные с позиционированием, могли измениться или быть удалены.
Пример изменения:
Версия 4.x:
tippy('.btn', {
flip: true,
});
Новая версия:
tippy('.btn', {
popperOptions: {
modifiers: [
{
name: 'flip',
enabled: true,
},
],
},
});
Многие опции были либо переименованы, либо переработаны.
performance — удалёнarrowType — заменён на кастомный HTML или SVGflipBehavior — заменён системой модификаторов
PopperТеперь многие настройки требуют более явной конфигурации:
tippy('.btn', {
placement: 'top',
offset: [0, 10],
});
В версии 4.x стрелка задавалась строкой:
arrow: true
или:
arrowType: 'round'
В новых версиях:
Пример:
tippy('.btn', {
arrow: true,
});
Кастомная стрелка:
tippy('.btn', {
arrow: '<svg>...</svg>',
});
Одно из ключевых изменений — отказ от встроенного функционала в пользу плагинов.
tippy('.btn', {
followCursor: true,
});
import tippy, { followCursor } from 'tippy.js';
tippy('.btn', {
followCursor: true,
plugins: [followCursor],
});
Без подключения плагина опция не будет работать.
В версии 4.x анимации были встроены и управлялись через строковые значения:
animation: 'fade'
В новых версиях:
Пример:
tippy('.btn', {
animation: 'scale',
});
Для кастомных анимаций:
.tippy-box[data-animation='custom'] {
transition: transform 0.2s ease;
}
События остались, но были стандартизированы и расширены.
tippy('.btn', {
onShow(instance) {
console.log('Показ');
},
onHide(instance) {
console.log('Скрытие');
},
});
Новые версии обеспечивают:
В версии 4.x темы были частью библиотеки.
В новых версиях:
Пример:
tippy('.btn', {
theme: 'light',
});
CSS:
.tippy-box[data-theme~='light'] {
background-color: #fff;
color: #000;
}
Синтаксис в целом сохранился, но стал более гибким.
tippy('.btn', {
content: 'Подсказка',
});
tippy('.btn', {
content: '<strong>HTML</strong>',
allowHTML: true,
});
tippy('.btn', {
content(reference) {
return reference.getAttribute('data-title');
},
});
Триггеры (trigger) остались, но логика стала более
строгой.
tippy('.btn', {
trigger: 'mouseenter focus',
});
Особенности:
При обновлении важно учитывать удалённые возможности:
Использование устаревших опций больше не вызывает предупреждений — они просто игнорируются.
npm install tippy.js@latest
Любые расширенные функции необходимо импортировать отдельно.
popperOptionsНовые версии обеспечивают:
Для максимальной эффективности:
1. Плагин не подключён
followCursor: true // не работает
Решение:
plugins: [followCursor]
2. Старые параметры Popper
flipBehavior: 'clockwise'
Решение — использовать modifiers.
3. Сломанные стили
Причина:
Решение:
4. Проблемы с HTML-контентом
content: '<b>text</b>' // не работает
Решение:
allowHTML: true
Структура тултипа стала более предсказуемой:
<div class="tippy-box">
<div class="tippy-content"></div>
</div>
Это упрощает:
Новые версии лучше интегрируются с:
Благодаря:
Создание экземпляра:
const instance = tippy('.btn');
Работа с ним:
instance.show();
instance.hide();
instance.destroy();
В новых версиях:
Поддержка асинхронности стала удобнее:
tippy('.btn', {
async content() {
const data = await fetch('/api').then(r => r.text());
return data;
},
});
Добавлен более строгий контроль HTML:
allowHTML по умолчанию выключен