- name
- ppt-skill
- version
- 0.2.0
- description
- 触发关键词:演示、PPT、幻灯片、slides、presentation、keynote、deck、汇报、展示; 使用场景:用户需要生成演示文稿、汇报材料或教学幻灯片。
Reveal.js PPT Skill
Overview
触发关键词:演示、PPT、幻灯片、slides、presentation、keynote、deck、汇报、展示 使用场景:用户需要生成基于 Reveal.js 的 HTML 演示文稿,在浏览器中运行。
使用 Reveal.js 创建专业的 HTML 演示文稿,支持丰富的过渡效果、图表集成、演讲者备注等功能。
设计原则
关键要求:在创建任何演示文稿之前,必须先分析内容并选择合适的设计元素。
内容驱动设计
- 分析主题:这个演示文稿是关于什么的?它暗示了什么样的基调、行业或情绪?
- 检查品牌:如果用户提到公司/组织,考虑其品牌色彩和身份
- 匹配配色:选择反映主题的颜色
- 声明方案:在编写代码之前,解释你的设计选择
必须遵守:
- ✅ 在编写代码之前,声明你的内容驱动设计方案
- ✅ 使用网络安全字体或通过 \
@import\引入 Google Fonts - ✅ 通过大小、粗细和颜色创建清晰的视觉层次
- ✅ 确保可读性:强对比度、适当的文字大小、整洁的对齐
- ✅ 保持一致性:在所有幻灯片中重复使用相同的模式、间距和视觉语言
配色方案选择
创意选色原则:
- 超越默认:什么颜色真正匹配这个特定主题?避免自动驾驶式的选择
- 多角度考虑:主题、行业、情绪、能量水平、目标受众、品牌身份
- 大胆尝试:尝试意想不到的组合——医疗演示不一定要用绿色,金融不一定要用深蓝
- 构建调色板:选择 3-5 种协调的颜色(主色 + 辅助色 + 强调色)
- 确保对比度:文字必须在背景上清晰可读
精选配色方案(选择一个、调整它,或创建你自己的):
| 编号 | 名称 | 颜色组合 |
|---|---|---|
| 1 | Classic Blue | 深海军蓝 \#1C2833\、石板灰 \#2E4053\、银色 \#AAB7B8\、米白 \#F4F6F6\ |
| 2 | Teal & Coral | 青色 \#5EA8A7\、深青 \#277884\、珊瑚 \#FE4447\、白色 \#FFFFFF\ |
| 3 | Bold Red | 红 \#C0392B\、亮红 \#E74C3C\、橙 \#F39C12\、黄 \#F1C40F\、绿 \#2ECC71\ |
| 4 | Warm Blush | 淡紫 \#A49393\、腮红 \#EED6D3\、玫瑰 \#E8B4B8\、奶油 \#FAF7F2\ |
| 5 | Burgundy Luxury | 酒红 \#5D1D2E\、深红 \#951233\、铁锈 \#C15937\、金色 \#997929\ |
| 6 | Deep Purple & Emerald | 紫色 \#B165FB\、深蓝 \#181B24\、翡翠 \#40695B\、白色 \#FFFFFF\ |
| 7 | Cream & Forest | 奶油 \#FFE1C7\、森林绿 \#40695B\、白色 \#FCFCFC\ |
| 8 | Pink & Purple | 粉红 \#F8275B\、珊瑚 \#FF574A\、玫瑰 \#FF737D\、紫色 \#3D2F68\ |
| 9 | Lime & Plum | 青柠 \#C5DE82\、李子 \#7C3A5F\、珊瑚 \#FD8C6E\、蓝灰 \#98ACB5\ |
| 10 | Black & Gold | 金色 \#BF9A4A\、黑色 \#000000\、奶油 \#F4F6F6\ |
| 11 | Sage & Terracotta | 鼠尾草 \#87A96B\、赤陶 \#E07A5F\、奶油 \#F4F1DE\、炭灰 \#2C2C2C\ |
| 12 | Charcoal & Red | 炭灰 \#292929\、红色 \#E33737\、浅灰 \#CCCBCB\ |
| 13 | Vibrant Orange | 橙色 \#F96D00\、浅灰 \#F2F2F2\、炭灰 \#222831\ |
| 14 | Forest Green | 黑色 \#191A19\、绿色 \#4E9F3D\、深绿 \#1E5128\、白色 \#FFFFFF\ |
| 15 | Retro Rainbow | 紫 \#722880\、粉 \#D72D51\、橙 \#EB5C18\、琥珀 \#F08800\、金 \#DEB600\ |
| 16 | Vintage Earthy | 芥末 \#E3B448\、鼠尾草 \#CBD18F\、森林绿 \#3A6B35\、奶油 \#F4F1DE\ |
| 17 | Coastal Rose | 老玫瑰 \#AD7670\、海狸 \#B49886\、蛋壳 \#F3ECDC\、灰绿 \#BFD5BE\ |
| 18 | Orange & Turquoise | 浅橙 \#FC993E\、灰青 \#667C6F\、白色 \#FCFCFC\ |
幻灯片内容多样化
多样化展示是关键。即使幻灯片有相似的内容类型,也要变化视觉呈现:
- 在不同幻灯片使用不同布局:一页用分栏,另一页用堆叠盒子,第三页用带图标的标注
- 混合容器样式:纯文本、盒子、标注、引用块
- 使用视觉层次:\
<strong>\标记关键词,不同颜色区分类别 - 用其他元素(引用、标注、分栏)打破列表的单调
- 不要在连续幻灯片上重复相同的布局模式
保持可扫描性:
- 短要点,不是段落
- 每页尽可能只有一个主要观点
- 使用图标(Font Awesome)增加视觉趣味
内容少时放大:当幻灯片内容较少时,使用更大的字号填充空间,不要留下大片空白配小字。
视觉细节选项
几何图案 (Geometric Patterns):
- 对角线分隔符代替水平线
- 不对称列宽(30/70、40/60、25/75)
- 90° 或 270° 旋转文字标题
- 圆形/六边形图片框架
- 角落三角形装饰
- 重叠形状增加深度
边框与框架处理 (Border & Frame Treatments):
- 单侧粗边框(10-20pt)
- 双线边框配对比色
- 角括号代替完整边框
- L 形边框(上+左 或 下+右)
- 标题下划线强调(3-5pt 粗)
排版处理 (Typography Treatments):
- 极端尺寸对比(72pt 标题 vs 11pt 正文)
- 全大写标题配宽字间距
- 超大编号显示
- 等宽字体用于数据/统计/技术内容
- 窄体字体用于密集信息
- 轮廓文字强调
图表与数据样式 (Chart & Data Styling):
- 单色图表配单一强调色
- 水平条形图代替垂直
- 点图代替条形图
- 最少或无网格线
- 数据标签直接在元素上(无图例)
- 超大数字显示关键指标
布局创新 (Layout Innovations):
- 全出血图片配文字叠加
- 侧边栏列(20-30% 宽度)用于导航/上下文
- 模块化网格系统(3×3、4×4 块)
- Z 形或 F 形内容流
- 浮动文字框覆盖彩色形状
- 杂志风格多栏布局
背景处理 (Background Treatments):
- 纯色块占据 40-60% 幻灯片
- 渐变填充(仅垂直或对角线)
- 分割背景(两色,对角线或垂直)
- 边缘到边缘色带
- 负空间作为设计元素
布局技巧
图表/表格布局规则:
- ✅ 两栏布局(首选):标题横跨全宽,下方两栏 - 一栏文字/要点,另一栏特色内容。使用不等宽 flexbox(如 40%/60%)优化空间
- ✅ 全屏布局:让特色内容(图表/表格)占据整个幻灯片以获得最大冲击力和可读性
- ❌ 禁止垂直堆叠:不要将图表/表格放在文字下方的单列中 - 这会导致可读性差和布局问题
核心规范
技术选型
使用 Reveal.js 实现(功能强大、专业演示库、支持丰富的过渡效果和主题)
优势:
- 专为演示文稿设计,支持嵌套幻灯片(垂直/水平导航)
- 内置多种过渡动画和主题样式
- 支持 Markdown、代码高亮、演讲者备注
- 完善的键盘导航和触控支持
- 响应式设计,自动适配不同屏幕
CDN 引入: \\\html <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reset.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/theme/white.css"> <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script> \\\
HTML 结构
\\\html <div class="reveal"> <div class="slides"> <section> <h1>第一页标题</h1> <p>第一页内容</p> </section> <section> <h2>第二页标题</h2> <ul> <li>要点一</li> <li>要点二</li> </ul> </section> </div> </div> \\\
布局要求
- 每页视口:100% 宽度 × 100% 高度(必须铺满容器)
- 内容居中:Reveal.js 自动处理水平+垂直居中
- 字号:标题 48-72px,正文 24-32px
- 每页建议:1 个主标题 + 3-5 个要点
- 内容必须适应单页,不能溢出
⭐ 关键布局样式(必须包含): \\\css /* 确保 Reveal.js 铺满容器 */ .reveal { width: 100% !important; height: 100% !important; } .reveal .slides { width: 100% !important; height: 100% !important; } .reveal .slides section { width: 100% !important; height: 100% !important; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 40px; box-sizing: border-box; } \\\
交互配置
Reveal.js 初始化(必须包含): \\\javascript Reveal.initialize({ hash: true, controls: true, progress: true, center: true, transition: "slide", keyboard: true, touch: true, mouseWheel: false, autoSlide: 0, // ⭐ 关键:使用 100% 确保铺满容器 width: "100%", height: "100%", margin: 0, minScale: 1, maxScale: 1 }); \\\
支持:键盘导航(← → ↑ ↓)、触摸滑动、全屏模式(F)、概览模式(ESC)
约束规范
禁止:
- 垂直滚动(每页内容必须适应视口)
- 复杂表单交互
- 需要滚动才能看到的内容
- 过多文字(每页控制在 50 字以内)
注意:
- 按逻辑段落分页,每页一个主题
- 确保引入 Reveal.js CDN 资源
- 在 DOMContentLoaded 后初始化 Reveal
CSS 组件库
CSS 变量定义
在 \<style>\ 标签中定义以下 CSS 变量,便于统一管理主题:
\\\`css :root { /* 背景色 */ --background-color: #ffffff; --section-divider-bg: #f5f5f5;
/* 主题色 */ --primary-color: #2196F3; --secondary-color: #ff9800; --text-color: #222; --muted-color: #666;
/* 组件色 */ --box-bg: #f5f5f5; --box-border: #ddd; --box-radius: 8px;
/* Callout 颜色 */ --blue: #2196F3; --blue-bg: #e3f2fd; --orange: #ff9800; --orange-bg: #fff3e0; --green: #4caf50; --green-bg: #e8f5e9; --gray: #666; --gray-bg: #f5f5f5; } \\\`
Boxes 盒子组件
\\\`css /* 基础盒子 - 填充背景 */ .box { background: var(--box-bg); border: 1px solid var(--box-border); border-radius: var(--box-radius); padding: 20px; margin: 10px 0; }
/* 轮廓盒子 - 仅边框 */ .box-outlined { border: 1px solid var(--box-border); border-radius: var(--box-radius); padding: 20px; margin: 10px 0; background: transparent; } \\\`
使用示例: \\\html <div class="box"> <p><strong>关键洞察</strong></p> <p>这是一个重要的信息盒子</p> </div> \\\
Callouts 标注组件
\\\`css /* 基础标注 */ .callout { border-left: 6px solid var(--primary-color); padding: 15px 20px; margin: 15px 0; background: #f9f9f9; border-radius: var(--box-radius); }
/* 颜色变体 */ .callout-blue { border-left-color: var(--blue); background: var(--blue-bg); } .callout-orange { border-left-color: var(--orange); background: var(--orange-bg); } .callout-green { border-left-color: var(--green); background: var(--green-bg); } .callout-gray { border-left-color: var(--gray); background: var(--gray-bg); }
/* 顶部边框变体 */ .callout-top { border-left: none; border-top: 6px solid var(--primary-color); } \\\`
使用示例: \\\`html <div class="callout callout-blue"> <p><strong>💡 提示</strong></p> <p>这是一个蓝色的提示标注</p> </div>
<div class="callout callout-green"> <p><strong>✅ 成功</strong></p> <p>操作已成功完成</p> </div> \\\`
Blockquotes 引用块
\\\`css .reveal blockquote { border-left: 4px solid var(--primary-color); padding-left: 20px; margin: 20px 0; font-style: italic; background: none; box-shadow: none; width: 100%; }
.reveal blockquote cite { display: block; margin-top: 10px; font-style: normal; color: var(--muted-color); } \\\`
使用示例: \\\html <blockquote> "设计不仅仅是外观和感觉,设计是它如何工作的。" <cite>— Steve Jobs</cite> </blockquote> \\\
文字尺寸工具类
基础文字为 16pt,使用以下类在内容较少时放大:
\\\`css .text-lg { font-size: 18pt !important; } /* 稍大 */ .text-xl { font-size: 20pt !important; } /* 中等强调 */ .text-2xl { font-size: 24pt !important; } /* 强调 */ .text-3xl { font-size: 28pt !important; } /* 很大 */ .text-4xl { font-size: 32pt !important; } /* 最大正文 */
.text-muted { color: var(--muted-color) !important; } .text-center { text-align: center !important; } \\\`
多栏布局
始终使用内联 CSS Grid(不要创建工具类):
\\\`html <!-- 等宽两栏 --> <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px;"> <div>第一栏</div> <div>第二栏</div> </div>
<!-- 三栏 --> <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px;"> <div>第一栏</div> <div>第二栏</div> <div>第三栏</div> </div>
<!-- 不等宽 --> <div style="display: grid; grid-template-columns: 1fr 2fr; gap: 30px;"> <div>窄侧边栏</div> <div>宽主内容</div> </div> \\\`
图表集成
使用 Chart.js 插件为幻灯片添加专业图表。
引入 Chart.js
在 CDN 资源部分添加: \\\html <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script src="https://cdn.jsdelivr.net/npm/reveal.js-plugins@latest/chart/plugin.js"></script> \\\
初始化时添加插件: \\\javascript Reveal.initialize({ // ... 其他配置 plugins: [ RevealChart ], chart: { defaults: { color: "lightgray", borderColor: "lightgray" } } }); \\\
图表布局模式
⚠️ 关键:图表必须使用 flexbox 容器模式,否则会溢出!
全屏图表
\\\html <section style="display: flex; flex-direction: column; height: 100%;"> <h2>图表标题</h2> <div style="flex: 1; position: relative; min-height: 0;"> <canvas data-chart="bar"> <!-- { "data": { "labels": ["Q1", "Q2", "Q3", "Q4"], "datasets": [{ "label": "营收", "data": [45, 52, 61, 78], "backgroundColor": "#2196F3" }] }, "options": { "maintainAspectRatio": false } } --> </canvas> </div> </section> \\\
左右分栏(图表 + 内容)
\\\html <section style="display: flex; flex-direction: column; height: 100%;"> <h2>图表标题</h2> <div style="flex: 1; display: grid; grid-template-columns: 1fr 1fr; gap: 30px; min-height: 0;"> <div class="box" style="display: flex; flex-direction: column; justify-content: center;"> <p><strong>关键洞察</strong></p> <ul> <li>第一个要点</li> <li>第二个要点</li> <li>第三个要点</li> </ul> </div> <div style="position: relative; min-height: 0; min-width: 0;"> <canvas data-chart="pie"> <!-- { "data": { "labels": ["A", "B", "C"], "datasets": [{ "data": [45, 35, 20], "backgroundColor": ["#2196F3", "#4caf50", "#ff9800"] }] }, "options": { "maintainAspectRatio": false } } --> </canvas> </div> </div> </section> \\\
上下分栏(内容 + 图表)
\\\html <section style="display: flex; flex-direction: column; height: 100%;"> <h2>图表标题</h2> <div style="flex: 1; display: grid; grid-template-rows: 1fr 2fr; gap: 20px; min-height: 0;"> <div class="box" style="display: flex; align-items: center;"> <p><strong>摘要:</strong>Q4 表现强劲,所有区域均超额完成目标。</p> </div> <div style="position: relative; min-height: 0; min-width: 0;"> <canvas data-chart="line"> <!-- { "data": { "labels": ["1月", "2月", "3月", "4月", "5月", "6月"], "datasets": [{ "label": "增长", "data": [100, 120, 135, 150, 180, 210], "borderColor": "#2196F3", "fill": false }] }, "options": { "maintainAspectRatio": false } } --> </canvas> </div> </div> </section> \\\
图表类型
支持的类型:\bar\、\line\、\pie\、\doughnut\、\radar\、\polarArea\、\scatter\
常用场景:
- bar:比较类别
- line:展示趋势
- pie/doughnut:展示占比
- scatter:展示变量关系
图表样式
\\\json "datasets": [{ "data": [12, 19, 8, 15], "backgroundColor": ["#2196F3", "#ff9800", "#4caf50", "#e91e63"] }] \\\
常用配色数组: \\\`javascript // 蓝色系 ["#1565c0", "#1976d2", "#1e88e5", "#2196f3", "#42a5f5"]
// 暖色系 ["#c62828", "#ef6c00", "#f9a825", "#2e7d32", "#1565c0"]
// 分类色(区分度高) ["#2196F3", "#ff9800", "#4caf50", "#e91e63", "#9c27b0"] \\\`
高级特性
Fragments 渐进式展示
点击逐步显示内容:
\\\html <p class="fragment">点击后出现</p> <p class="fragment fade-up">向上滑入</p> <p class="fragment highlight-red">变红高亮</p> \\\
动画类型:
- \
fade-in\(默认)、\fade-out\ - \
fade-up\、\fade-down\、\fade-left\、\fade-right\ - \
highlight-red\、\highlight-green\、\highlight-blue\ - \
strike\(删除线)
演讲者备注
按 \S\ 键打开演讲者视图:
\\\html <section> <h2>幻灯片标题</h2> <p>可见内容</p> <aside class="notes"> 演讲者私人备注: - 记得提及 X - 过渡到下一个话题 </aside> </section> \\\
自定义背景
\\\`html <!-- 纯色背景 --> <section data-background-color="#283b95">
<!-- 图片背景 --> <section data-background-image="image.jpg"> <section data-background-image="image.jpg" data-background-opacity="0.5">
<!-- 渐变背景 --> <section data-background-gradient="linear-gradient(to bottom, #283b95, #17b2c3)"> \\\`
Auto-Animate 自动动画
在幻灯片之间自动动画过渡,匹配 \data-id\ 的元素会平滑过渡:
\\\html <section data-auto-animate> <h1>标题</h1> </section> <section data-auto-animate> <h1>标题</h1> <h2>副标题带动画出现</h2> </section> \\\
代码高亮
\\\html <pre><code class="language-python"> def hello(): print("Hello") </code></pre> \\\
行号高亮(点击逐步): \\\html <pre><code data-line-numbers="1-2|3|4"> let a = 1; let b = 2; let c = x => 1 + 2 + x; c(3); </code></pre> \\\
过渡效果
\\\html <section data-transition="fade"> <section data-transition="slide"> <section data-transition="convex"> <section data-transition="zoom"> <section data-transition="none"> \\\
最佳实践
专业设计规范
字体选择:
- 标题:使用无衬线字体(Inter、思源黑体、Noto Sans SC),字重 600-700
- 正文:字号不低于 24px 确保投影可读性,字重 400-500
- 数据/强调:可使用等宽字体(JetBrains Mono)突出关键数字
\\\html <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;700&display=swap" rel="stylesheet"> \\\
视觉层次:
- 建立清晰的信息层级:标题 > 副标题 > 正文 > 注释
- 运用留白管理呼吸空间,避免信息拥挤
- 通过字体大小、粗细、颜色差异引导视觉流线
- 重要信息使用色块、边框或图标辅助强调
⭐ 信息结构增强:
- 强烈推荐:使用 Infographic skill 来生成专业信息图,代替纯文字列表
- 优势:视觉冲击力强、信息传达高效、专业感更强
内容结构优化
信息密度控制:
- 每页不超过 7 个要点(符合认知负荷原则)
- 每个要点控制在 15 字以内
- 优先使用图表、图标替代纯文字
- 复杂数据拆分为多页递进展示
标题层级规范:
- H1:仅用于封面标题和章节分隔页
- H2:每页主标题,概括本页核心内容
- H3:小节标题,用于内容分组
- 避免超过 3 级标题层次
逻辑递进结构: \\\ 封面页 → 目录/议程 → 背景/问题 → 分析/方案 → 数据/论证 → 结论/行动 → 致谢/Q&A \\\
快捷键速查
| 按键 | 功能 |
|---|---|
| ← → | 上一页/下一页 |
| F | 全屏模式 |
| S | 演讲者视图 |
| ESC | 概览/退出 |
| B / . | 黑屏暂停 |
| O | 幻灯片概览 |
| ? | 快捷键帮助 |
专业模板
重要说明
- 本场景运行在已有的 HTML 容器内,不要输出 \
<!DOCTYPE>\、\<html>\、\<head>\、\<body>\等文档级标签 - 必须先输出完整的 DOM 结构,再加载 Reveal.js 资源,确保用户可以实时看到元素上屏
- 样式可以通过 \
<style>\标签内联,脚本通过 \<script>\标签引入
标准输出顺序
\\\`
- Tailwind CSS CDN
- 内联样式 (<style>) - 包含 CSS 变量和组件类
- Reveal.js 容器结构 (<div class="reveal">)
- 所有幻灯片内容 (<section>)
- 自定义导航按钮
- CDN 资源引入 (<link> 和 <script>)
- 初始化脚本
\\\`
完整模板
\\\`html <!-- 1. Tailwind CSS CDN --> <script src="https://cdn.tailwindcss.com"></script>
<!-- 2. 内联样式 --> <style> @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Noto+Sans+SC:wght@400;500;700&display=swap");
/* CSS 变量 */ :root { --primary-color: #2196F3; --secondary-color: #ff9800; --text-color: #222; --muted-color: #666; --box-bg: #f5f5f5; --box-border: #ddd; --box-radius: 8px; --blue: #2196F3; --blue-bg: #e3f2fd; --orange: #ff9800; --orange-bg: #fff3e0; --green: #4caf50; --green-bg: #e8f5e9; }
/* 关键:确保铺满容器 */ .reveal { font-family: "Noto Sans SC", "Inter", sans-serif; width: 100% !important; height: 100% !important; } .reveal .slides { width: 100% !important; height: 100% !important; } .reveal .slides > section { width: 100% !important; height: 100% !important; display: flex !important; flex-direction: column; justify-content: center; align-items: center; padding: 60px; box-sizing: border-box; }
/* 组件类 */ .box { background: var(--box-bg); border: 1px solid var(--box-border); border-radius: var(--box-radius); padding: 20px; margin: 10px 0; }
.callout { border-left: 6px solid var(--primary-color); padding: 15px 20px; margin: 15px 0; background: #f9f9f9; border-radius: var(--box-radius); } .callout-blue { border-left-color: var(--blue); background: var(--blue-bg); } .callout-orange { border-left-color: var(--orange); background: var(--orange-bg); } .callout-green { border-left-color: var(--green); background: var(--green-bg); }
/* 文字尺寸 */ .text-lg { font-size: 18pt !important; } .text-xl { font-size: 20pt !important; } .text-2xl { font-size: 24pt !important; }
.reveal .slide-number { @apply text-sm text-gray-500 bg-transparent px-4 py-2; } .reveal .progress { @apply h-1; } .reveal .controls { @apply hidden; } </style>
<!-- 3-4. Reveal.js 容器结构与内容 --> <div class="reveal"> <div class="slides"> <!-- 封面页 --> <section> <h1 class="text-5xl font-bold mb-4">演示标题</h1> <p class="text-xl text-gray-600">副标题 | 日期</p> </section>
<!-- 目录页 --> <section> <h2 class="text-4xl font-bold mb-8">议程</h2> <ol class="text-xl space-y-4"> <li>背景介绍</li> <li>核心方案</li> <li>数据支撑</li> <li>下一步计划</li> </ol> </section>
<!-- 内容页示例 --> <section> <h2 class="text-4xl font-bold mb-8">内容标题</h2> <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px;"> <div class="callout callout-blue"> <p><strong>💡 关键洞察</strong></p> <p>这是一个重要的信息</p> </div> <div class="callout callout-green"> <p><strong>✅ 成功指标</strong></p> <p>达成率 127%</p> </div> </div> <aside class="notes">演讲者备注内容</aside> </section>
<!-- 数据展示页 --> <section> <h2 class="text-4xl font-bold mb-8">业绩增长概览</h2> <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px;"> <div class="text-center p-6 bg-blue-50 rounded-2xl"> <span class="text-6xl font-bold text-blue-600">+127%</span> <span class="block mt-4 text-xl text-gray-600">营收增长</span> </div> <div class="text-center p-6 bg-green-50 rounded-2xl"> <span class="text-6xl font-bold text-green-600">3.2M</span> <span class="block mt-4 text-xl text-gray-600">活跃用户</span> </div> </div> </section> </div> </div>
<!-- 5. 自定义导航按钮 --> <div class="fixed bottom-2 left-1/2 -translate-x-1/2 flex gap-2 z-50 bg-white/70 backdrop-blur-xl px-3 py-2 rounded-2xl shadow-lg border border-white/60"> <button id="nav-prev" title="上一页" class="w-8 h-8 flex items-center justify-center rounded-lg hover:bg-black/5 hover:scale-105 active:scale-95 disabled:opacity-30 disabled:cursor-not-allowed transition-all duration-300 text-base">←</button> <div class="w-px h-4 bg-black/10 self-center"></div> <button id="nav-overview" title="概览 (ESC)" class="w-8 h-8 flex items-center justify-center rounded-lg hover:bg-black/5 hover:scale-105 active:scale-95 transition-all duration-300 text-base">⊞</button> <div class="w-px h-4 bg-black/10 self-center"></div> <button id="nav-next" title="下一页" class="w-8 h-8 flex items-center justify-center rounded-lg hover:bg-black/5 hover:scale-105 active:scale-95 disabled:opacity-30 disabled:cursor-not-allowed transition-all duration-300 text-base">→</button> </div>
<!-- 6. CDN 资源引入 --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reset.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/theme/white.css"> <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script> <!-- Chart.js 插件(可选) --> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script src="https://cdn.jsdelivr.net/npm/reveal.js-plugins@latest/chart/plugin.js"></script>
<!-- 7. 初始化脚本 --> <script> (function() { function initReveal() { if (typeof Reveal === "undefined") { setTimeout(initReveal, 50); return; }
Reveal.initialize({ hash: true, controls: false, progress: true, slideNumber: "c/t", transition: "fade", width: "100%", height: "100%", margin: 0, minScale: 1, maxScale: 1, plugins: typeof RevealChart !== "undefined" ? [RevealChart] : [], chart: { defaults: { color: "lightgray", borderColor: "lightgray" } } });
// 自定义导航按钮事件 var navPrev = document.getElementById("nav-prev"); var navNext = document.getElementById("nav-next"); var navOverview = document.getElementById("nav-overview");
if (navPrev) navPrev.addEventListener("click", function() { Reveal.prev(); }); if (navNext) navNext.addEventListener("click", function() { Reveal.next(); }); if (navOverview) navOverview.addEventListener("click", function() { Reveal.toggleOverview(); });
function updateNavButtons() { var indices = Reveal.getIndices(); var totalSlides = Reveal.getTotalSlides();
if (navPrev) navPrev.disabled = indices.h === 0; if (navNext) navNext.disabled = indices.h === totalSlides - 1; }
Reveal.on("slidechanged", updateNavButtons); Reveal.on("ready", updateNavButtons); }
initReveal(); })(); </script> \\\`
关键要点
- ✅ 先输出 DOM:用户可以立即看到幻灯片结构和内容
- ✅ 后加载资源:CDN 资源放在 DOM 之后,避免阻塞渲染
- ✅ 延迟初始化:使用轮询检查 Reveal.js 是否加载完成
- ✅ 容器适配:移除所有文档级标签,直接输出可嵌入的片段
- ✅ 流式友好:按顺序输出,支持逐步渲染
- ✅ 组件复用:CSS 变量和组件类便于统一管理主题
参考文档
详细的图表配置和高级特性,请参阅:
脚本工具
可用的辅助脚本(位于 \revealjs/scripts/\ 目录):
- \
create-presentation.js\:生成演示文稿脚手架 - \
check-overflow.js\:检查内容溢出 - \
check-charts.js\:检查图表配置