Плагин animateFill в библиотеке Tippy.js добавляет
эффект «заливающей» анимации фона тултипа. В отличие от стандартной
анимации появления, где изменяются прозрачность и масштаб, здесь
создаётся визуальный эффект постепенного заполнения всплывающего
элемента цветом, что делает интерфейс более выразительным и
динамичным.
Плагин особенно полезен в интерфейсах, где важна визуальная обратная связь или требуется подчеркнуть появление подсказки.
Для использования animateFill необходимо явно подключить
плагин и соответствующие стили.
import tippy, { animateFill } from 'tippy.js';
import 'tippy.js/dist/tippy.css';
import 'tippy.js/dist/backdrop.css';
import 'tippy.js/animations/shift-away.css';
Ключевые моменты:
backdrop.css отвечает за дополнительный слой
(backdrop), который используется для анимации заливкиshift-away, scale, и др.) может
быть выбрана отдельноtippy('.btn', {
content: 'Подсказка',
animateFill: true,
plugins: [animateFill],
});
Обязательные параметры:
animateFill: true — включает эффектplugins: [animateFill] — регистрирует плагинБез подключения плагина параметр не будет работать.
При активации animateFill внутри тултипа создаётся
дополнительный элемент — backdrop. Он располагается под основным
контентом и анимируется независимо.
Структура DOM:
<div class="tippy-box" data-animatefill>
<div class="tippy-backdrop"></div>
<div class="tippy-content">...</div>
</div>
Анимация происходит за счёт изменения масштаба и формы backdrop-элемента.
Плагин тесно связан с параметром animation. Он не
заменяет стандартные анимации, а дополняет их.
Пример:
tippy('.btn', {
content: 'Анимация',
animateFill: true,
animation: 'shift-away',
plugins: [animateFill],
});
Популярные варианты:
shift-awayshift-towardscaleperspectiveВажно: визуальный результат зависит от комбинации
animation + animateFill.
tippy('.btn', {
content: 'Длительность',
animateFill: true,
duration: [500, 300],
plugins: [animateFill],
});
При использовании animateFill увеличение времени
появления делает эффект заливки более заметным.
Цвет backdrop наследует фон тултипа, но может быть изменён через CSS:
.tippy-box[data-theme~='custom'][data-animatefill] .tippy-backdrop {
background-color: #4a90e2;
}
Пример с темой:
tippy('.btn', {
content: 'Цветная заливка',
theme: 'custom',
animateFill: true,
plugins: [animateFill],
});
animateFill особенно хорошо сочетается с кастомными
темами.
.tippy-box[data-theme~='dark'] {
background-color: #333;
color: #fff;
}
.tippy-box[data-theme~='dark'][data-animatefill] .tippy-backdrop {
background-color: #333;
}
Важно синхронизировать:
Иначе при анимации возможен «разрыв» визуального эффекта.
animateFill добавляет дополнительный DOM-элемент и
CSS-анимации, что может влиять на производительность при большом
количестве тултипов.
Рекомендации:
tippy.delegate)backdrop.cssdurationanimateFill можно использовать вместе с другими
плагинами:
import tippy, { animateFill, followCursor } from 'tippy.js';
tippy('.btn', {
content: 'Комбинация',
animateFill: true,
followCursor: true,
plugins: [animateFill, followCursor],
});
Особенности:
Можно полностью изменить поведение анимации:
.tippy-backdrop {
transition: transform 0.6s ease-out, opacity 0.6s;
transform: scale(0);
}
.tippy-box[data-state='visible'] .tippy-backdrop {
transform: scale(1);
}
Таким образом создаются:
Интерактивные интерфейсы
Обучающие интерфейсы
UI с высокой визуальной насыщенностью
1. Плагин не работает Причина:
plugins: []
Решение:
plugins: [animateFill]
2. Нет эффекта заливки Причина — не подключён
backdrop.css
3. Некорректный цвет Причина — несоответствие темы и backdrop
<button class="btn">Наведи</button>
import tippy, { animateFill } from 'tippy.js';
import 'tippy.js/dist/tippy.css';
import 'tippy.js/dist/backdrop.css';
import 'tippy.js/animations/scale.css';
tippy('.btn', {
content: 'Пример animateFill',
animateFill: true,
animation: 'scale',
duration: 400,
plugins: [animateFill],
});
animateFill реагирует на стандартные состояния
Tippy:
visiblehiddenCSS-селекторы:
.tippy-box[data-state='visible'] .tippy-backdrop { ... }
.tippy-box[data-state='hidden'] .tippy-backdrop { ... }
Это позволяет тонко контролировать:
На мобильных устройствах:
durationanimateFill добавляет:
backdrop)За счёт этого достигается эффект «живого» интерфейса без усложнения логики JavaScript.