Shepherd.js — библиотека для создания интерактивных туров по интерфейсу, которая активно использует кастомные стили и встроенные классы для позиционирования подсказок, стрелок и кнопок управления. При интеграции с существующими проектами часто возникают конфликты со стилями, особенно если проект уже использует CSS-фреймворки, кастомные темы или глобальные правила стилизации.
Наследование глобальных стилей Shepherd.js
применяет к подсказкам свои классы (shepherd-element,
shepherd-header, shepherd-text,
shepherd-button). Если в проекте есть глобальные правила
для, например, button или h3, они могут
непредсказуемо переопределять оформление подсказок.
CSS-фреймворки и сброс стилей Использование
Bootstrap, Tailwind или Material UI может приводить к тому, что стили
Shepherd.js будут нарушены. Например, box-sizing,
padding, margin или z-index могут
наследоваться от общих правил и ломать позиционирование.
Конфликт z-index Подсказки создаются поверх всех
элементов страницы, но если у других элементов задан высокий
z-index, подсказки могут быть перекрыты. Это особенно
актуально для модальных окон или фиксированных шапок.
Проблемы с шрифтами и размерами Shepherd.js
рассчитывает размеры и позицию подсказок на основе контента. Глобальные
правила для font-family, font-size,
line-height могут изменить высоту блока, что приведет к
смещению стрелок и нарушению визуальной логики тура.
Изоляция стилей через префиксы Все кастомные стили для Shepherd.js должны быть привязаны к его классам, чтобы минимизировать наследование глобальных правил:
.shepherd-element {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
padding: 16px;
font-size: 14px;
line-height: 1.5;
}
.shepherd-button {
background-color: #007bff;
color: #fff;
border: none;
padding: 8px 12px;
cursor: pointer;
}Использование встроенной темы Shepherd.js
позволяет подключать готовые темы через объект
defaultStepOptions:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
Это уменьшает вероятность конфликтов с внешними стилями.
Контроль z-index Важно явно задавать
z-index для подсказок и стрелок, особенно если используются
модальные окна:
.shepherd-element {
z-index: 10000;
}Использование Shadow DOM (опционально) В случаях, когда конфликт со стилями критичен, подсказки Shepherd.js можно обернуть в Shadow DOM. Это полностью изолирует CSS библиотеки от глобальных правил проекта, но требует дополнительной настройки позиционирования.
Переключение между классами и inline-стилями
Shepherd.js позволяет добавлять стили через объект style в
каждом шаге:
tour.addStep({
text: 'Пример шага с кастомным стилем',
attachTo: { element: '#button1', on: 'bottom' },
classes: 'custom-step',
style: { backgroundColor: '#f0f0f0', color: '#333' }
});
Это позволяет переопределить глобальные стили без изменения CSS-файлов проекта.
!important.button или
h3, не учитывая, что Shepherd.js использует эти элементы
внутри подсказок.position: absolute и z-index
для подсказок, что приводит к их скрытию под другими элементами.Конфликт с Tailwind Tailwind применяет
box-sizing: border-box и font-family: sans ко
всем элементам. Чтобы исправить смещение стрелок, нужно явно задать
классы для подсказок:
.shepherd-element {
box-sizing: content-box;
font-family: 'Roboto', sans-serif;
}Конфликт с Bootstrap модальными окнами Если
подсказка появляется поверх модального окна, но не видна, достаточно
поднять z-index выше уровня модалки:
.shepherd-element {
z-index: 1050; /* выше Bootstrap modal z-index */
}Перекрытие кастомных шрифтов Если глобальный шрифт слишком крупный и ломает размеры подсказки, использовать inline-стиль:
tour.addStep({
text: 'Текст с кастомным шрифтом',
style: { fontSize: '14px', fontFamily: 'Arial, sans-serif' }
});Эффективная работа с Shepherd.js требует точного контроля CSS и
понимания, как библиотека взаимодействует с DOM. Предварительная
изоляция стилей и внимательное управление z-index позволяет
избежать большинства конфликтов с внешними стилями и сохранить
корректное позиционирование подсказок.