Lottie Web предоставляет несколько режимов отрисовки анимаций: SVG, Canvas и HTML. HTML-режим основан на построении анимации через DOM-элементы и CSS-трансформации, что принципиально отличает его от векторного SVG-подхода и растрового Canvas-рендеринга.
В HTML-режиме каждый визуальный элемент анимации преобразуется в
отдельный DOM-узел. Вместо отрисовки графики на холсте или через
SVG-дерево создаётся структура HTML-элементов, чаще всего
div, span и вложенные контейнеры с абсолютным
позиционированием.
Основная идея заключается в том, что трансформации композиции After Effects транслируются в CSS-свойства:
transform: translate()scale()rotate()opacityclip-path или overflow-маскиКаждый кадр анимации фактически становится обновлением стилей DOM, а не перерисовкой графического контекста.
Внутренне HTML-рендерер Lottie Web строится вокруг нескольких ключевых слоёв:
В отличие от SVG-рендерера, где существует единый графический документ, HTML-режим опирается на независимые узлы DOM, что приводит к более высокой стоимости управления деревом элементов.
Каждый слой After Effects отображается в HTML как отдельный контейнер:
div с clip-path или
border-radiusimg или div с
background-imagespan или div с текстовым
содержимымПреобразование сложных shape-путей в HTML-структуру приводит к разбиению кривых на набор ограниченных геометрических примитивов. Это ограничивает точность по сравнению с SVG.
HTML-движок использует CSS transform matrix для объединения всех преобразований слоя:
В результате вычисляется итоговая матрица, которая применяется к DOM-элементу. Это позволяет минимизировать количество изменений отдельных CSS-свойств, но не устраняет затрат на перерасчёт layout в сложных сценах.
HTML-рендеринг чувствителен к количеству DOM-узлов. При увеличении количества слоёв резко возрастает нагрузка на:
Особенно критично влияние:
В сравнении с SVG, HTML может проигрывать в стабильной производительности на сложных анимациях, но выигрывать в сценариях с простыми трансформациями и необходимостью интеграции с HTML-интерфейсом.
В Lottie Web выбор рендерера задаётся при инициализации:
lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'html',
loop: true,
autoplay: true,
path: 'animation.json'
});
HTML-режим требует, чтобы контейнер был частью DOM-дерева и имел вычисляемые размеры. Без заданной ширины и высоты результат рендеринга становится непредсказуемым из-за особенностей CSS layout.
HTML-рендерер не использует векторную систему масштабирования как SVG. Вместо этого применяется CSS scaling на корневом контейнере:
transform: scale() на root-элементеviewBox-подобные вычисления внутри
Lottie engineПри изменении размеров контейнера возможны артефакты округления пикселей, особенно при дробных значениях scale.
Text Layer в HTML-режиме отображается через DOM-текст, что создаёт отличия от SVG:
Поддержка кастомных шрифтов требует предварительной загрузки через CSS:
@font-face {
font-family: 'CustomFont';
src: url('font.woff2') format('woff2');
}
Lottie применяет стили через inline CSS, что может конфликтовать с глобальными стилями приложения.
Одной из наиболее сложных частей HTML-рендеринга является реализация масок. В отличие от SVG clipPath, HTML использует комбинацию:
overflow: hiddenclip-pathНе все типы масок After Effects поддерживаются напрямую. Feathered masks и сложные альфа-маски могут эмулироваться через дополнительные DOM-слои, что увеличивает нагрузку на рендеринг.
HTML-режим ограниченно поддерживает визуальные эффекты:
linear-gradientradial-gradientbox-shadowОднако сложные эффекты After Effects, такие как:
могут быть либо упрощены, либо полностью эмулированы через дополнительные элементы.
Поскольку элементы являются полноценными DOM-узлами, появляется возможность прямого взаимодействия через стандартные браузерные события:
Это создаёт отличие от SVG-режима, где события часто проходят через абстракции рендерера. В HTML-режиме возможно навешивание обработчиков на конкретные слои:
anim.addEventListener('DOMLoaded', () => {
const element = document.querySelector('.lottie-layer');
element.addEventListener('click', () => {
anim.pause();
});
});
Однако структура классов и идентификаторов не всегда стабильна, поскольку генерируется динамически.
HTML-рендерер использует requestAnimationFrame как
основной механизм обновления. На каждом цикле выполняются:
При высокой нагрузке возможны пропуски кадров, особенно если количество DOM-операций превышает возможности main thread.
HTML-режим имеет ряд системных ограничений:
Также отсутствует аппаратное ускорение уровня Canvas/WebGL, что делает режим менее подходящим для тяжёлых сцен.
HTML-рендеринг часто применяется в контексте UI-компонентов, где важно:
Особенно полезен сценарий, где Lottie-анимация должна быть частью интерфейса, а не отдельным графическим объектом. DOM-природа упрощает синхронизацию с существующими компонентами и стилями приложения.
HTML-режим зависит от реализации CSS и DOM-движка браузера. Основные различия проявляются в:
Chromium-браузеры демонстрируют наиболее стабильное поведение, тогда как в других движках возможны расхождения в отрисовке сложных сцен.
DOM-структура HTML-рендерера сохраняется в памяти на протяжении всей анимации. При частых повторных инициализациях без корректного destroy возникают:
Корректное управление жизненным циклом требует полного удаления контейнера и очистки ссылки на анимацию.
HTML-режим занимает промежуточное положение между SVG и Canvas:
Это делает его специализированным инструментом для конкретных архитектур интерфейсов, где важна гибридность анимации и разметки.