В Intro.js каждый шаг привязан к конкретному элементу DOM с помощью
селектора. Корректное отображение подсказок зависит от правильного
определения позиции элемента на странице. Библиотека использует свойства
offsetTop, offsetLeft, а также методы
getBoundingClientRect() для вычисления координат и
размещения подсказки относительно целевого элемента. Ошибки
позиционирования чаще всего связаны с неверным учётом этих значений,
особенно при вложенных контейнерах с нестандартными CSS-свойствами
(position: relative, overflow: hidden,
transform и др.).
position: relative/absolute/fixed
Элементы с position: relative могут смещать подсказку, если
родительский контейнер также имеет нестандартное позиционирование.
Подсказка в таком случае вычисляется относительно ближайшего
позиционированного родителя, а не всего документа.
overflow: hidden или
overflow: auto Подсказки, выходящие за пределы
контейнера с обрезкой, могут быть скрыты или обрезаны. Необходимо
учитывать прокрутку контейнера и при необходимости использовать событие
onchange для корректировки позиции.
CSS-трансформации (transform: scale(),
translate()) Трансформации создают новый контекст
для вычислений координат. В таких случаях подсказка может отобразиться
не там, где ожидается. Рекомендуется избегать применения трансформаций к
контейнерам, содержащим элементы, к которым привязан шаг Intro.js, либо
вручную корректировать координаты через API
introJs().setOption('position', ...).
Подсказки могут некорректно позиционироваться при работе с элементами, которые динамически изменяют размер или положение (например, выпадающие меню, модальные окна, табы). В таких случаях важно:
introJs().refresh() после изменения DOM
или при отображении нового контента.introJs().onbeforechange(function(targetElement) { ... })
для корректировки позиции и видимости элемента перед отображением
подсказки.На мобильных устройствах и при изменении размеров окна подсказки
могут накладываться на элементы или уходить за границы экрана. Intro.js
учитывает видимую область (viewport) для автоматической
корректировки позиции, но это может конфликтовать с кастомными стилями.
Практические рекомендации:
scrollToElement: true для
автоматической прокрутки к элементу..introjs-tooltip и .introjs-helperLayer.Intro.js позволяет вручную управлять положением подсказки через
параметр position для каждого шага:
top – подсказка выше элемента.right – справа от элемента.bottom – под элементом.left – слева от элемента.auto – автоматический выбор позиции с
учётом видимой области.Для динамических интерфейсов может потребоваться программное
изменение позиции через
introJs().setOption('tooltipPosition', 'top') или
вычисление координат с помощью JS перед показом шага.
Если целевой элемент находится внутри скрытого контейнера
(display: none) или вкладки, подсказка не будет отображена.
Для корректного отображения:
display: block
или активная вкладка).onbeforechange для программного
переключения вкладок или раскрытия секций.z-index и перекрытиямиПодсказки и подсвечивающий слой (helperLayer) должны
быть выше всех элементов интерфейса. Конфликты могут возникнуть из-за
CSS z-index других элементов. Решения:
z-index для
.introjs-helperLayer и .introjs-tooltip.overflow: hidden, который может обрезать подсказку.introJs().onchange(function(targetElement) { console.log(targetElement.getBoundingClientRect()); })
для анализа координат.window.scrollX, window.scrollY).Эти подходы позволяют минимизировать ошибки позиционирования, корректно работать с адаптивными интерфейсами, динамическими элементами и кастомными CSS, обеспечивая стабильное отображение подсказок Intro.js.