Shepherd.js предоставляет возможность создавать собственные
темы, чтобы полностью контролировать внешний вид и стиль
подсказок (тултипов). Темы в Shepherd.js определяются через объект
defaultStepOptions при инициализации тура, где ключевым
параметром является свойство classes, задающее CSS-классы
для подсказок.
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'custom-theme',
scrollTo: true
}
});
В данном примере к каждому шагу тура будет применён CSS-класс
custom-theme. Именно через такие классы реализуется полная
кастомизация: цвета, шрифты, тени, анимации и размеры.
Создание собственной темы начинается с определения набора CSS-правил, которые будут влиять на все элементы подсказки. Основные компоненты, которые можно стилизовать:
Основной контейнер подсказки Класс
.shepherd-element является оболочкой тултипа. Через него
задаются фон, отступы, скругления и тени.
.custom-theme.shepherd-element {
background-color: #1a1a1a;
color: #ffffff;
border-radius: 8px;
padding: 16px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
font-family: 'Roboto', sans-serif;
}Заголовок подсказки Заголовок шага, если
используется опция title, оформляется через
.shepherd-title.
.custom-theme .shepherd-title {
font-size: 18px;
font-weight: 700;
margin-bottom: 8px;
}Тело подсказки Текст описания шагов —
.shepherd-text. Можно задавать отступы, межстрочные
интервалы и цвет текста.
.custom-theme .shepherd-text {
font-size: 14px;
line-height: 1.5;
}Кнопки навигации Shepherd поддерживает кастомные
кнопки с классом .shepherd-button. Их стилизация позволяет
полностью изменить вид навигации.
.custom-theme .shepherd-button {
background-color: #ff6f61;
border: none;
border-radius: 4px;
color: #fff;
padding: 8px 12px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.custom-theme .shepherd-button:hover {
background-color: #e65a50;
}Стрелка подсказки Стрелка, указывающая на
элемент, задаётся через .shepherd-arrow. Можно менять цвет
и размеры, чтобы стрелка гармонировала с основной палитрой.
.custom-theme .shepherd-arrow {
color: #1a1a1a;
}Для более гибкой настройки рекомендуется использовать CSS-переменные. Это позволяет менять цветовую схему и размеры динамически:
:root {
--tooltip-bg: #1a1a1a;
--tooltip-color: #fff;
--tooltip-padding: 16px;
}
.custom-theme.shepherd-element {
background-color: var(--tooltip-bg);
color: var(--tooltip-color);
padding: var(--tooltip-padding);
}
Изменение переменных в JavaScript позволяет менять тему в зависимости от контекста:
document.documentElement.style.setProperty('--tooltip-bg', '#283593');
document.documentElement.style.setProperty('--tooltip-color', '#ffeb3b');
Хотя defaultStepOptions задаёт тему для всех шагов тура,
можно переопределять тему на уровне отдельного шага
через свойство classes:
tour.addStep({
title: 'Специальный шаг',
text: 'Этот шаг использует отдельную тему',
classes: 'custom-step-theme',
attachTo: {
element: '#special-button',
on: 'bottom'
}
});
Таким образом, каждый шаг может иметь уникальное оформление, отличное от общей темы тура.
Shepherd.js позволяет добавлять анимации появления/исчезновения через CSS-переходы или keyframes. Адаптивность обеспечивается через медиазапросы, например:
@media (max-width: 768px) {
.custom-theme.shepherd-element {
font-size: 12px;
padding: 12px;
}
.custom-theme .shepherd-button {
padding: 6px 10px;
font-size: 12px;
}
}
Для анимации можно использовать классы:
.custom-theme.shepherd-element {
opacity: 0;
transform: translateY(-10px);
transition: opacity 0.3s, transform 0.3s;
}
.custom-theme.shepherd-element.shepherd-open {
opacity: 1;
transform: translateY(0);
}
Shepherd.js позволяет легко использовать существующие CSS-фреймворки, такие как Tailwind или Bootstrap. Достаточно указать соответствующие классы при создании тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'bg-gray-800 text-white p-4 rounded shadow-lg',
scrollTo: true
}
});
Это обеспечивает быстрое оформление без необходимости писать много собственного CSS, но при этом оставляет возможность создавать полностью уникальные темы при необходимости.
Для полной организации рекомендуется придерживаться следующей структуры:
Такой подход обеспечивает масштабируемую, гибкую и полностью кастомизируемую тему, которую можно применять как к отдельным шагам, так и к всему туру в целом.