配置与主题样式
Driver.js 的默认样式可以直接使用,但在真实项目中通常需要与产品设计系统保持一致。你可以通过实例配置和 CSS 覆盖完成定制。
常用全局配置
const driverObj = driver({
animate: true,
showProgress: true,
allowClose: true,
smoothScroll: true,
overlayColor: "#000",
overlayOpacity: 0.55,
stagePadding: 8,
popoverClass: "app-driver-popover",
nextBtnText: "下一步",
prevBtnText: "上一步",
doneBtnText: "完成",
});
| 配置 | 作用 |
|---|---|
animate |
是否启用过渡动画 |
showProgress |
是否显示步骤进度 |
allowClose |
是否允许用户关闭导览 |
smoothScroll |
切换步骤时是否平滑滚动 |
overlayColor |
遮罩颜色 |
overlayOpacity |
遮罩透明度 |
stagePadding |
高亮区域和目标元素之间的内边距 |
popoverClass |
给弹层添加自定义类名 |
不同版本可用配置会略有差异,遇到不确定项时以官方 API 文档为准。
按步骤覆盖配置
全局配置适用于整个实例。某些步骤如果需要特殊位置或文案,可以在 step 中覆盖:
const driverObj = driver({
showProgress: true,
steps: [
{
element: "#danger-zone",
popover: {
title: "危险区域",
description: "这里的操作会影响整个团队,请确认后再继续。",
side: "top",
align: "start",
popoverClass: "app-driver-popover app-driver-popover-danger",
},
},
],
});
定制弹层样式
通过 popoverClass 添加类名后,可以在项目 CSS 中覆盖:
.app-driver-popover {
border-radius: 8px;
color: #172033;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.app-driver-popover .driver-popover-title {
font-size: 16px;
font-weight: 700;
}
.app-driver-popover .driver-popover-description {
line-height: 1.7;
}
.app-driver-popover .driver-popover-next-btn {
background: #2563eb;
border-color: #2563eb;
color: #fff;
}
覆盖样式时尽量只影响你的自定义类名下面的元素,避免污染其他页面或第三方组件。
代码演示
下面的演示使用 popoverClass 定制深色弹层,并同时调整遮罩、圆角和中文按钮文案。
源码
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Driver.js 主题配置演示</title>
<link rel="stylesheet" href="/driver-js/vendor/driver.css">
<style>
body {
margin: 0;
background: #0f172a;
color: #e2e8f0;
font-family: Arial, "Microsoft YaHei", sans-serif;
}
.demo {
min-height: 440px;
padding: 26px;
}
.hero {
display: grid;
grid-template-columns: 1.3fr 1fr;
gap: 18px;
align-items: stretch;
}
.panel {
border: 1px solid #334155;
border-radius: 8px;
background: #111827;
padding: 20px;
box-shadow: 0 18px 40px rgba(0, 0, 0, 0.25);
}
.eyebrow {
color: #93c5fd;
font-size: 13px;
font-weight: 800;
}
h1 {
margin: 12px 0;
font-size: 28px;
line-height: 1.3;
}
p {
color: #cbd5e1;
line-height: 1.7;
}
.stats {
display: grid;
gap: 12px;
}
.stat {
border: 1px solid #334155;
border-radius: 8px;
background: #1e293b;
padding: 16px;
}
.stat strong {
display: block;
margin-top: 8px;
color: #f8fafc;
font-size: 24px;
}
button {
cursor: pointer;
margin-top: 18px;
border: 0;
border-radius: 6px;
background: #38bdf8;
color: #082f49;
padding: 10px 16px;
font-weight: 800;
}
.driverjs-theme-demo {
border: 1px solid #7dd3fc;
border-radius: 8px;
background: #082f49;
color: #e0f2fe;
}
.driverjs-theme-demo .driver-popover-title {
color: #fff;
font-size: 17px;
}
.driverjs-theme-demo .driver-popover-description {
color: #bae6fd;
line-height: 1.7;
}
.driverjs-theme-demo .driver-popover-next-btn,
.driverjs-theme-demo .driver-popover-done-btn {
border-color: #38bdf8;
background: #38bdf8;
color: #082f49;
text-shadow: none;
}
.driverjs-theme-demo .driver-popover-prev-btn {
border-color: #38bdf8;
background: transparent;
color: #e0f2fe;
text-shadow: none;
}
</style>
</head>
<body>
<main class="demo">
<section class="hero">
<div id="intro-panel" class="panel">
<div class="eyebrow">运营看板</div>
<h1>用定制主题让页面引导贴合产品气质</h1>
<p>这个演示覆盖遮罩颜色、弹层类名、按钮文案和自定义 CSS。点击按钮后,Driver.js 会使用深色主题弹层。</p>
<button id="start-theme-tour" type="button">查看主题引导</button>
</div>
<div id="stats-panel" class="stats">
<div class="stat"><span>转化率</span><strong>18.6%</strong></div>
<div class="stat"><span>活跃用户</span><strong>42,810</strong></div>
<div class="stat"><span>待处理线索</span><strong>326</strong></div>
</div>
</section>
</main>
<script type="module">
import { driver } from "/driver-js/vendor/driver.js.mjs";
const driverObj = driver({
overlayColor: "#020617",
overlayOpacity: 0.62,
stagePadding: 8,
stageRadius: 8,
popoverClass: "driverjs-theme-demo",
nextBtnText: "继续",
prevBtnText: "返回",
doneBtnText: "完成",
showProgress: true,
steps: [
{
element: "#intro-panel",
popover: {
title: "深色产品区域",
description: "通过 popoverClass 给弹层添加主题类名,再用 CSS 覆盖标题、正文和按钮。",
side: "right",
align: "start",
},
},
{
element: "#stats-panel",
popover: {
title: "保持视觉一致",
description: "遮罩、圆角和按钮颜色都可以按产品设计系统调整。",
side: "left",
align: "center",
},
},
],
});
document.querySelector("#start-theme-tour").addEventListener("click", () => {
driverObj.drive();
});
</script>
</body>
</html>
遮罩与高亮区域
遮罩不宜过深,否则用户看不清页面上下文;也不宜过浅,否则焦点不够明显。
const driverObj = driver({
overlayColor: "#0f172a",
overlayOpacity: 0.5,
stagePadding: 10,
stageRadius: 8,
});
后台类产品通常使用较克制的遮罩和圆角,让提示显得像系统的一部分。
暗色主题
如果应用有暗色模式,可以根据根节点类名调整弹层:
.dark .app-driver-popover {
background: #111827;
border: 1px solid #374151;
color: #f9fafb;
}
.dark .app-driver-popover .driver-popover-description {
color: #d1d5db;
}
如果暗色主题由 CSS 变量驱动,可以让弹层直接复用变量:
.app-driver-popover {
background: var(--panel-bg);
border-color: var(--border-color);
color: var(--text-color);
}
配置建议
- 后台系统优先保持弹层简洁,不要过度品牌化。
- 引导按钮要和主按钮视觉一致,但不能比页面主操作更抢眼。
- 遮罩和高亮区域要在浅色、暗色、移动端都测试。
- 危险操作步骤可以使用更明确的标题和说明,但不要用夸张样式制造焦虑。