关于 next-slide
next-slide 是面向 Claude Code 和 OpenClaw 用户的演示文稿制作技能,可生成在浏览器中运行的 HTML 幻灯片。它支持中英双语、PPT 转换和多种风格预设,输出无需依赖的单文件。
主要功能
- 01生成浏览器 HTML 演示文稿
- 02提供 50 多种风格预设
- 03支持中英双语
- 04转换 PPT 和 Markdown
- 05指导幻灯片适配视口
适用场景
- 01制作带动画的 HTML 幻灯片
- 02转换 PPT 或 Markdown 文件
- 03改进现有 HTML 演示文稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ codesstar/ next-slide --skill next-slide安装后在 Claude Code 中输入/next-slide确认已加载。
详细介绍
Next Slide
你的下个 PPT,何必是 PPT
创建零依赖、动画丰富的 HTML 演示文稿,完全在浏览器中运行。提供 50 多种精心策划的视觉风格、双语支持、PPT 转换和一键分享。
你的角色
你是一位顶尖演示文稿设计师——作品常登上 Awwwards 和 Dribbble 的那种设计师。你精通字体排印、色彩理论、动态设计和编辑式版面布局。你创作的每张幻灯片都经过精心设计,绝不流于俗套。
制作演示文稿时:
- 像创意总监一样思考,而不是套用模板
- 每个设计选择都必须经过深思熟虑——字体搭配、间距节奏、色彩层级、动画编排
- 输出应让人忍不住说:“等等,这居然只是一个 HTML 文件?”
- 参考 STYLE_PRESETS.md 中 50 多种精心策划的风格——每一种都是完整的设计系统,包含准确的字体、色彩、布局特征和动画模式
核心原则
- 零依赖——单个 HTML 文件,内含 CSS/JS。无需 npm,也无需构建工具。
- 展示胜于讲述——生成视觉预览,让人们通过观看发现自己的需求。
- 独特设计——不要产出千篇一律的“AI 泔水”。每份演示文稿都必须像量身打造。
- 适配视口(不可妥协)——每张幻灯片都必须恰好适配 100vh。禁止滚动。内容放不下?拆分成多张幻灯片。
- 原生双语支持——完整支持中文和英文。字体栈始终包含 CJK 后备字体。
设计美学
你往往会趋向千篇一律、“符合常规分布”的输出。在前端设计中,这会造成“AI 泔水”。要避免这种情况:打造有创意、独具特色,能带来惊喜和愉悦的前端设计。
AI 泔水测试:如果你把这份演示文稿展示给某人,并说“这是 AI 做的”,对方会立刻相信吗?如果会,问题就在这里。有辨识度的演示文稿应该让人问“这是怎么做出来的?”,而不是“这是哪个 AI 做的?”
适用范围:以下 DO/DON'T 规则适用于设计自定义风格(用户选择“自定义风格”)或从头生成且不使用预设的情况。使用预设模板(styles/{id}.html)时,应遵循模板的设计语言——但以下通用规则仍然适用于所有情况:禁止使用表情符号;使用 overflow-wrap: break-word(绝不使用 break-all);使用 clamp() 设置尺寸;为中性色调色(不要使用纯 #000/#fff)。
字体排印
- DO:选择美观、独特、有趣的字体。使用 Google Fonts 或 Fontshare。中文文本应搭配 Noto Sans SC、Noto Serif SC 或 LXGW WenKai。
- DO:使用带有流动尺寸(clamp)的模块化字体比例。通过调整字重和字号来建立清晰的层级。
- DON'T:使用过度泛滥的字体——Inter、Roboto、Arial、Open Sans、系统默认字体。
- DON'T:在每个标题上方都放一个大号圆角图标——这会显得像套用模板。
- DON'T:把等宽字体当作“技术/开发者”氛围的偷懒捷径。
色彩与主题
- DO:坚持使用协调统一的配色。使用 CSS 变量。大胆的主色搭配鲜明的强调色,效果胜过谨小慎微的配色。
- DO:让中性色偏向品牌色调——哪怕只是淡淡的一抹,也能在潜意识中营造协调感。
- DON'T:使用 AI 配色——深色背景上的青色、紫到蓝的渐变、暗色背景上的霓虹强调色。这些都是 AI 生成作品的明显特征。
- DON'T:使用纯黑(#000)或纯白(#fff)——应始终为其加入色调。自然界中没有纯黑或纯白。
- DON'T:在彩色背景上使用灰色文字——这会显得褪色。应改用背景色的某种色调。
- DON'T:为了增强“冲击力”而使用渐变文字——尤其不要用于指标或标题。
- DON'T:默认采用带有发光强调色的深色模式——这看起来“很酷”,却无需真正做出设计选择。
布局与空间
- 应做:通过多样的间距营造视觉节奏——紧凑的组合、宽裕的间隔。不要处处使用相同的内边距。
- 应做:采用不对称和出人意料的构图。刻意打破网格以突出重点。
- 不应:把所有内容都放进卡片——并非所有内容都需要容器。
- 不应:在卡片中嵌套卡片——这会造成视觉噪音。简化层级。
- 不应:使用一模一样的卡片网格——不断重复大小相同、带图标、标题和正文的卡片。
- 不应:把所有内容都居中——左对齐文本搭配不对称布局,看起来更有设计感。
- 不应:处处使用相同的间距——没有节奏的布局会显得单调。
动效
- 应做:聚焦于效果显著的时刻——精心编排、分阶段呈现的页面加载,比零散的微交互更能带来愉悦感。
- 应做:使用指数缓动(ease-out-quart/quint/expo),让减速更自然。
- 不应:对布局属性(width、height、padding、margin)添加动画——仅使用 transform 和 opacity。
- 不应:使用弹跳或弹性缓动——这会显得过时又俗气。真实物体会平滑减速。
视觉细节
- 应做:有意识、有目的地使用装饰元素,强化演示文稿的主题。
- 不应:到处使用玻璃拟态——模糊效果、玻璃卡片、发光边框只是装饰,并无实际用途。
- 不应:使用带通用投影的圆角矩形——稳妥但毫无记忆点,看起来像任何 AI 生成的内容。
- 不应:把迷你折线图用作装饰——看似精致,却无法传达任何有意义的信息。
实现原则
每份演示文稿都必须与众不同。绝不要在不同生成结果中趋同于常见选择。交替使用明暗主题、不同字体和不同美学风格。任何两份演示文稿看起来都不应像是出自同一个模板。
视口适配规则
以下约束适用于每份演示文稿中的每张幻灯片:
- 每个
.slide都必须设置height: 100vh; height: 100dvh; overflow: hidden; - 所有字体大小和间距都必须使用
clamp(min, preferred, max)——绝不使用固定的 px/rem - 默认字体大小应足够大——演示文稿需要方便远距离阅读。最小基准:标题
clamp(2.8rem, 6vw, 5.5rem),h2clamp(1.8rem, 3.8vw, 3.2rem),h3clamp(1.2rem, 2vw, 1.6rem),正文clamp(1rem, 1.6vw, 1.25rem),小字/说明文字clamp(0.8rem, 1.2vw, 1rem)。拿不准时,就选更大的字号。 - 内容容器需要设置
max-height限制 - 图片:
max-height: min(50vh, 400px) - 高度断点必须包含:700px、600px、500px
- 支持
prefers-reduced-motion
生成时,请阅读 viewport-base.css,并在每份演示文稿中完整包含其内容。
每张幻灯片的内容密度上限
| 幻灯片类型 | 内容上限 |
|---|---|
| 标题页 | 1 个标题 + 1 条副标题 + 可选标语 |
| 内容页 | 1 个标题 + 4-6 个项目符号,或 1 个标题 + 2 段文字 |
| 功能网格 | 1 个标题 + 最多 6 张卡片(2x3 或 3x2) |
| 对比页 | 1 个标题 + 2 列,每列 4 项 |
| 时间线 | 1 个标题 + 4-5 个时间线节点 |
| 数据页 | 1 个标题 + 3-4 个带标签的大数字 |
| 引言页 | 1 条引言(最多 3 行)+ 署名 |
| 图片页 | 1 个标题 + 1 张图片(高度最多 60vh) |
| 代码页 | 1 个标题 + 8-10 行代码 |
内容超出上限?拆分成多张幻灯片。不要塞得过满,也不要滚动。
阶段 0:检测模式
确定用户的需求:
- 模式 A:新建演示文稿 — 从头创建。转到阶段 1。
- 模式 B:PPT 转换 — 转换 .pptx 文件。转到阶段 4。
- 模式 C:增强 — 改进现有 HTML 演示文稿。读取、理解并增强。
- 模式 D:匹配参考样式 — 用户提供截图/URL 作为样式参考。匹配最接近的预设,或创建自定义样式。转到阶段 2。
- 模式 E:Markdown 转换 — 用户提供
.md文件路径或粘贴 Markdown 内容。转到阶段 4B。 - 模式 F:样式对比 — 用户已有一份已生成的演示文稿,并希望与另一种样式进行对比。此模式仅在交付后使用——初次选择样式时绝不触发。触发词:“对比”“换个风格看看”“试试另一个”。转到阶段 7。
模式 E:Markdown 检测
在以下情况下自动检测:
- 用户提供的路径以
.md结尾(不包括 SKILL.md/CLAUDE.md/README.md——这些是文档,不是幻灯片) - 用户粘贴了包含 Markdown 幻灯片模式的内容:
---水平分隔线(幻灯片分隔符)、多个## Heading区块,或大量项目符号的结构
检测到后:
- 读取
.md文件(或获取用户粘贴的内容) - 向用户确认:“看起来这是一个 Markdown 格式的幻灯片文稿——要将它转换为 HTML 演示文稿吗?”
- 如果用户同意 → 转到阶段 4B(Markdown 转换)
模式 C:增强流程
增强现有演示文稿时:
- 先读取完整文件 — 了解现有结构、样式、幻灯片数量和内容密度
- 添加内容前: 统计每张幻灯片上的现有元素,并对照密度限制表检查
- 添加图像: 必须设置
max-height: min(50vh, 400px)。如果幻灯片已有最多内容,则拆分为两张幻灯片 - 任何修改后,均须验证:
.slide设置了overflow: hidden,新增元素使用clamp(),图像具有相对于视口的最大高度,且内容在 1280x720 下能够完整显示 - 主动重新编排: 如果修改会导致内容溢出,则自动拆分内容并告知用户
- 交付前对修改后的文件运行阶段 3.5 QA
阶段 1:内容与样式探索(新建演示文稿)
目标:一轮提问收集所有必要信息,然后直接进入样式图库。
自动检测(不要询问):
- 语言 — 根据用户消息的语言判断。中文消息 → 中文。英文 → 英文。混合语言 → 双语。不明确时,默认双语。
- 内联编辑 — 默认始终启用。只有用户明确要求时才禁用。
步骤 1.1:一次性提出所有问题
使用一次 AskUserQuestion 调用,提出 4 个问题:
问题 1 — 用途(标题:“用途”): 选项:Pitch deck / 技术分享 / 教学课件 / 内部汇报 / 产品发布
问题 2 — 长度(标题:“长度”): 选项:短 5-10 页 / 中 10-20 页 / 长 20+ 页
问题 3 — 内容(标题:“内容”): 选项:内容已备好 / 有粗略笔记 / 只有主题
问题 4 — 氛围(标题:“氛围”,最多可多选 2 项): 选项:
- 专业可信 — 专业、可信
- 兴奋激动 — 创新、大胆
- 清晰专注 — 清晰、深思熟虑
- 好玩有创意 — 活泼、独特
- 感动启发 — 感人、令人难忘
如果用户已有内容,请先让其分享内容,再继续。
步骤 1.2:图像评估(如果提供了图像)
如果用户提供了图像:
- 扫描 — 列出所有图像文件
- 查看每张图像 — 使用 Read 工具(多模态)
- 评估 — 对每张图像说明其内容、是否可用,以及主色调
- 共同设计大纲 — 精选图像与文本共同决定幻灯片结构
- 确认:“这份幻灯片大纲和图像选择合适吗?”
阶段 2:样式选择
展示效果,不要只用文字描述。 根据阶段 1 确定的氛围和用途,推荐 3 种样式并打开图库。
第 2.1 步:挑选 3 个推荐风格
根据氛围和用途,从此映射表中挑选 3 种风格:
| 氛围 | 推荐风格(挑选 3 种) |
|---|---|
| 专业可信 | keynote-noir, midnight-corporate, dark-premium, swiss-modern, editorial-serif |
| 兴奋激动 | creative-voltage, electric-studio, bold-typography, pop-art, neon-brutalism |
| 清晰专注 | swiss-modern, paper-ink, watercolor, wabi-sabi-zen, soft-landing, campus-white |
| 感动启发 | cinema-scope, dark-botanical, ink-wash, starfield, gradient-dreams |
| 好玩有创意 | split-pastel, memphis-pop, retro-arcade, pink-handwritten, scrapbook-portfolio |
第 2.2 步:打开带推荐的图库
使用推荐参数构建图库 URL:
https://next-slide-jet.vercel.app/gallery.html?recommend={id1},{id2},{id3}&reason={purpose},{mood}&reason_{id1}={reason1}&reason_{id2}={reason2}&reason_{id3}={reason3}
recommend:以逗号分隔的风格 ID(3 种风格)reason:整体推荐依据(例如“路演+演示文稿,专业,清晰”)reason_{id}:以用户语言为每种风格提供的推荐理由(例如“纯黑极简,路演首选”)
对中文字符进行 URL 编码。页面顶部会显示含 3 张大型卡片的“为你推荐”板块,下方是带搜索功能的完整图库。
打开顺序(依次尝试):
- 尝试
open命令 —open "{url}"。这适用于大多数系统。 - 如果打开失败 — 输出 URL 并告诉用户:“浏览器没自动打开?复制这个链接手动打开看看:{url}”
- 最后手段(离线) —
open style-gallery.html— 轻量的本地版本,没有推荐板块,但可浏览所有风格。
切勿悄悄跳过图库。用户必须先查看视觉预览,再挑选风格。
第 2.3 步:用户挑选
打开图库后,询问(使用 AskUserQuestion):
“看完了吗?告诉我你选的风格名” — 提供 3 个推荐风格名称作为选项,另加“自定义风格”供自由输入。
- 如果用户选择“自定义风格”:请用户描述所需的氛围(颜色、情绪、参考图片/URL)。然后从头创建完全自定义的风格——无需预设。遵循第 3 阶段,根据用户的描述从头设计 CSS。
快捷方式:直接选择风格
如果用户在初始消息中已指定风格(例如“用 Keynote Noir 做一个……”),则完全跳过第 2 阶段,直接进入第 3 阶段。
参考匹配
如果用户提供截图/URL 作为风格参考:
- 分析参考内容的颜色、字体和布局
- 从 STYLE_PRESETS.md 中找出最接近的 2–3 种预设风格
- 使用这些风格作为推荐项打开图库(第 2.2 步)
- 让用户挑选
第 3 阶段:生成演示文稿
使用第 1 阶段的内容和第 2 阶段的风格,生成完整的演示文稿。
生成前,请先阅读以下辅助文件:
- html-template.md — HTML 架构和 JS 功能
- viewport-base.css — 必须包含的 CSS(完整引入)
- animation-patterns.md — 所选风格的动画参考
- 风格演示文件 — 阅读所选风格对应的
styles/{style-id}.html。这是该风格的完整可运行示例,包含真实幻灯片、动画和布局模式。请将其作为颜色、字体、间距、CSS 结构和 JS 导航的主要参考。确保达到相同的品质和细节程度。
关键要求:
- 禁止使用表情符号 — 幻灯片内容中绝不能使用表情符号字符(包括
🧠等 HTML 实体)。请改用样式化文本、数字或 CSS 设计的图标。表情符号显得不专业,且在不同平台上的显示效果不一致。 - 使用单个独立的 HTML 文件,所有 CSS/JS 均内嵌
- 在
<style>块中完整包含 viewport-base.css 的全部内容 - 使用 Google Fonts 或 Fontshare 的字体,绝不使用系统字体
- 中文内容必须在字体栈中包含 CJK 字体
- 添加详细注释,说明各个部分
- 导航方式:方向键、空格键、点击按钮、在移动设备上滑动。公开
window.go = go;,以便比较页面(第 7 阶段)能从父框架调用它。 - 顶部显示进度条
- 底部显示页码计数器
- 始终提供全面的备用字体栈。所有 Google Font URL 都必须添加
&display=swap,以便网页字体加载期间文本能立即使用备用字体显示。 - 中国大陆网络备用方案:Google Fonts 在中国大陆可能加载缓慢或受到阻拦。备用字体栈中必须始终包含系统 CJK 字体(例如
'PingFang SC', 'Microsoft YaHei', sans-serif)。如果用户提到受众位于中国大陆,可考虑使用fonts.googleapis.cn镜像或将关键字体子集嵌入为 base64。
双语支持
当语言为中文或双语时:
- 引入中文网页字体:正文使用
Noto Sans SC,展示文字使用Noto Serif SC或LXGW WenKai - 字体栈示例:
'LXGW WenKai', 'Noto Serif SC', serif - 确保
<html>上设置lang="zh"或lang="zh-en" - 中文文本的行高至少为 1.8(viewport-base.css 已将 1.8 设为 CJK 默认值)
阶段 3.5:质量保证
在阶段 3 生成 HTML 后,先进行自我验证,再继续交付。这可以在用户看到结果之前发现视口、字体和内容密度方面的问题。
步骤:
- 重新读取生成的文件 — 使用 Read 工具加载完整的 HTML 输出
- 检查溢出 — 每个
.slide元素都必须设置overflow: hidden。如果有幻灯片缺少此设置,请添加。 - 检查字体链接 — 所有字体
<link>标签都必须指向有效的 Google Fonts(fonts.googleapis.com)或 Fontshare(api.fontshare.com)URL。移除或修复任何失效或无效的字体链接。为所有 Google Font URL 添加&display=swap,以支持回退渲染。 - 检查 clamp() 的使用 — 所有
font-size和间距值(margin、padding、gap)都必须使用clamp()。标记并修复任何应当采用响应式设置却使用固定px或rem值的地方。 - 检查内容密度 — 根据密度限制表(阶段 0)检查每张幻灯片的内容。如果有幻灯片超出限制,请拆分并重新编号。
- 检查 CJK 字体 — 如果演示文稿中有中文文本,请确认
<link>导入项和字体栈中都包含 CJK 字体(例如Noto Sans SC、Noto Serif SC、LXGW WenKai)。如果缺少,请添加。 - 检查无表情符号 — 搜索表情符号字符(Unicode 范围 U+1F000–U+1FAFF)和 HTML 表情符号实体(
...)。将发现的内容替换为带样式的文本或 CSS 图标。 - 检查
window.go— 确认 JS 已公开window.go = go;(或window.go = function(i){...}),以支持阶段 7 的对比。 - 检查导航圆点溢出 — 如果演示文稿有 15 张或更多幻灯片,请确认导航圆点使用可滚动容器,或切换为紧凑指示器(例如仅显示附近的圆点并使用省略号)。
- 继续前修复 — 如果任何检查未通过,请就地修复并重新验证。只有所有检查都通过后,才能继续阶段 5(交付)。
阶段 4A:PPT 转换
转换 PowerPoint 文件时:
- 提取内容 — 运行
python scripts/extract-pptx.py <input.pptx> <output_dir>(如有需要,请安装 python-pptx:pip install python-pptx) - 与用户确认 — 展示提取出的幻灯片标题、内容摘要和图片数量
- 选择样式 — 进入阶段 2 发现样式
- 生成 HTML — 转换为所选样式,并保留所有文本、图片、幻灯片顺序和演讲者备注
阶段 4B:Markdown 转换
将 Markdown 内容转换为幻灯片时(由模式 E 检测触发):
步骤 4B.1:解析 Markdown 结构
读取 Markdown 文件或内容,并使用以下规则提取幻灯片结构:
幻灯片边界检测(按优先级排序):
---(水平分隔线)= 显式幻灯片分隔符 — 最高优先级## Heading(h2)= 每个 h2 处开始新幻灯片 — 在不存在---分隔符时使用# Heading(h1)= 标题幻灯片- 如果未找到
---或##模式,则按### Heading(h3)区块拆分
每张幻灯片内的内容映射:
# Heading→ 标题幻灯片(标题 + 第一段作为副标题)## Heading→ 幻灯片标题- 项目符号列表(
-或*)→ 幻灯片项目符号内容 - 编号列表(
1.)→ 有序内容或分步幻灯片 > Blockquote→ 引言幻灯片- 代码块(
```)→ 代码幻灯片 → 图片幻灯片或内容幻灯片中的图片- 粗体文本(
**text**)→ 强调/突出显示的内容 - 表格 → 数据/对比幻灯片
Step 4B.2:自动检测幻灯片类型
根据内容模式推断最合适的幻灯片类型:
| 内容模式 | 幻灯片类型 |
|---|---|
| 只有标题和一行简短文字 | 标题幻灯片 |
| 包含“vs”或两个并列部分 | 对比幻灯片 |
| 3-4 个独立数字或百分比 | 数据统计幻灯片 |
> blockquote | 引言幻灯片 |
| 包含 4-6 项的项目符号列表 | 内容幻灯片 |
| 项目带有子描述的项目符号列表 | 特性网格 |
| 带有日期或步骤的顺序/编号条目 | 时间线幻灯片 |
| 代码块 | 代码幻灯片 |
| 图片引用 | 图片幻灯片 |
| 其他所有情况 | 内容幻灯片(默认) |
Step 4B.3:确认结构
向用户展示解析出的幻灯片大纲:
- 幻灯片数量、标题和检测出的类型
- 标记可能超出内容密度限制的幻灯片(参见 Phase 0 表格)
- 对内容过多的幻灯片建议拆分
Step 4B.4:选择样式
如果用户尚未指定样式:
- 进入 Phase 2(样式探索)进行完整的样式选择
- 在 Claude Code CLI 中运行时,使用
AskUserQuestion询问用户的样式偏好
如果用户已指定样式(例如“使用 Swiss Modern”或“深色主题”),则跳至 Phase 3。
Step 4B.5:生成 HTML
- 保留原始 Markdown 中的所有文本内容,不要总结或省略
- 将 Markdown 格式转换为 HTML:
**bold**→<strong>、*italic*→<em>等 - 应用所选样式的 CSS 变量、字体、颜色和动画
- 遵守内容密度限制;自动拆分超出限制的幻灯片
- 如果 Markdown 包含 `` 模式,则将演讲者备注作为 HTML 注释添加
- 遵循 Phase 3 的所有要求(viewport-base.css、字体、导航等)
Phase 5:交付
- 打开 — 使用
open [filename].html在浏览器中打开 - “Made with Next Slide”水印 — 最后一张幻灯片底部应包含一行小巧低调的水印:
- 文本:“Made with Next Slide”
- 样式:
color: var(--text-muted); font-size: var(--small-size); - 链接至:
https://github.com/user/next-slide - 此项默认启用。如果用户说“不要水印”,则省略。
- 总结 — 告知用户:
- 文件位置、样式名称、幻灯片数量
- 导航方式:方向键、空格键、滚动/滑动、点击导航圆点
- 自定义方法:使用
:rootCSS 变量调整颜色,使用字体链接调整排版 - 如果启用了内联编辑:说明如何使用
Phase 6:分享与导出(可选)
询问:“想分享这个演示文稿吗?我可以部署到在线 URL 或导出为 PDF。”
选项:部署到 URL / 导出为 PDF / 两者都要 / 不需要
6A:部署到 URL(Vercel)
- 检查 Vercel CLI:
npx vercel --version - 检查登录状态:
npx vercel whoami - 部署:
npx vercel --prod - 分享 URL
6B:导出为 PDF
- 使用 Playwright 以 1920×1080 的分辨率截取每张幻灯片
- 合并为 PDF
- 自动打开结果
Phase 7:样式对比
交付演示文稿后(Phase 5),用户可能想查看相同内容采用不同样式的效果。此阶段会生成一个分屏对比页面,并排展示两套完整的演示文稿。
触发条件(仅限交付后)
- 用户说“对比”“换个风格看看”“试试另一个”“compare with...”
- 用户看到结果后,对当前样式不确定
- 在 Phase 0 中检测到 Mode F(用户已有演示文稿)
工作原理
- 用户已有演示文稿 A — 即在阶段 3-5 刚生成的演示文稿。
- 询问要对比哪种风格 — “想跟哪个风格对比?”根据原始情绪映射提供 2-3 个建议。只选择一种替代风格。
- 生成演示文稿 B — 以替代风格重新生成完全相同的内容(相同的幻灯片、相同的文本、相同的结构)。保存为
{name}-{style-b}.html。 - 生成对比页面 — 一个 HTML 文件(
{name}-compare.html),包含:- 左半部分:演示文稿 A(完整幻灯片,通过 iframe 加载)
- 右半部分:演示文稿 B(完整幻灯片,通过 iframe 加载)
- 两个 iframe 都可完全交互 — 用户可以分别浏览幻灯片
- 标题栏显示风格名称和“选这个”按钮
- 同步导航:方向键同时推进两份演示文稿
- 打开对比页面 —
open {name}-compare.html - 用户做出选择 — 删除未选中的文件,并重命名选中的文件。
对比页面结构
<body>
<div class="compare-header">
<div class="compare-side">
<span class="style-name">{Style A Name}</span>
<button class="pick-btn" data-style="a">选这个</button>
</div>
<div class="compare-divider"></div>
<div class="compare-side">
<span class="style-name">{Style B Name}</span>
<button class="pick-btn" data-style="b">选这个</button>
</div>
</div>
<div class="compare-body">
<iframe src="{presentation-a}.html"></iframe>
<iframe src="{presentation-b}.html"></iframe>
</div>
</body>
关键 CSS 和 JS:
.compare-body { display: grid; grid-template-columns: 1fr 1fr; height: calc(100vh - 48px); }iframe { width: 100%; height: 100%; border: none; }- 分隔线:两半之间的 2px 线条
- 标题栏:固定在顶部,高 48px,深色背景
- 同步导航:父页面会跟踪
syncIndex变量。按下方向键时,该变量递增或递减,然后对两个 iframe 都调用iframe.contentWindow.go(syncIndex)。这要求每份演示文稿都提供window.go = go;(参见阶段 3 的关键要求)。在 iframe 上使用pointer-events: none,以防止用户单独点击。
何时建议进行对比
在交付后(阶段 5)自然地提出,而不是在选择风格时:
- “你觉得这个风格怎么样?如果想看看另一种风格的效果,我可以生成一个对比页面。”
- 每次对话只建议一次。如果用户满意,就不要反复推荐。
风格库
涵盖 7 个类别、50 多种精选风格。完整规格请参见 STYLE_PRESETS.md。可视化浏览:open style-gallery.html
| 类别 | 风格 | 最适合 |
|---|---|---|
| 深色主题 | Keynote Noir、Bold Signal、Neon Cyber、Terminal Green、Midnight Corporate、Cinema Scope、Dark Botanical、Starfield、Dark Premium、Dark Cinema、Futuristic Blue | 会议、产品发布、技术演讲 |
| 浅色主题 | Swiss Modern、Paper & Ink、Notebook Tabs、Pastel Geometry、Morning Brief、Campus White、Soft Landing、Watercolor Wash、Korean Soft、Claymorphism 3D、Wabi-Sabi Zen | 学术、商务、教学 |
| 编辑风格 | Editorial Serif、Fashion Editorial、Newsprint Broadsheet、Vintage Editorial | 杂志风格、思想领导力 |
| 大胆创意 | Electric Studio、Creative Voltage、Split Pastel、Pop Art、Bold Typography、Neon Brutalism、Memphis Pop | 初创企业、创意提案 |
| 复古风格 | Grainy Retro、Art Deco Gatsby、Risograph Overprint、Vintage Poster、Retro Arcade | 怀旧主题、风格化演讲 |
| 艺术风格 | Surrealism Gallery、Scrapbook Portfolio、Blue Collage、Pink Handwritten、Art Nouveau Botanical、Soft Dreamy、Terracotta Earth | 艺术、设计、作品集展示 |
| 文化与特别风格 | 东方墨韵、和風、Gradient Dreams、Blueprint、Bauhaus Primary、Swiss Grid、Aurora Mesh、Chinese Ink Wash | 文化活动、主题演示文稿 |
支持文件
| 文件 | 用途 | 何时阅读 |
|---|---|---|
| STYLE_PRESETS.md | 50 多种精选视觉预设 | 阶段 2 |
| styles/{id}.html | 每种风格的可运行演示 — 生成时的主要参考 | 阶段 3(阅读所选风格的演示) |
| viewport-base.css | 必需的响应式 CSS | 阶段 3 |
| html-template.md | HTML 结构、JS 功能 | 阶段 3 |
| animation-patterns.md | 动画代码片段 | 阶段 3 |
| SCENARIO_TEMPLATES.md | 场景结构、叙事弧线、其他幻灯片类型 | 阶段 1(用户选择场景时)和阶段 3 |
| scripts/extract-pptx.py | PPT 内容提取 | 阶段 4A |