← 返回学习中心 · 图文、视频与演示OiOi Academy
AI演示文稿 · 02

PPT as Code:用网页做比 PPT 更惊艳的演示

来自 @Russell3402 的万字长帖:把演示从"一次性文件"变成可复用、可迭代、可发链接的网页资产。

原作者 @Russell3402 来源 X 长帖 发布 2026-04-04
🧭

开篇:AI 做的 PPT 太丑,根子在哪

以下来自 @Russell3402。他的开场很扎心:AI 做出来的 PPT 太丑,排版问题太多。你本来想偷个懒,结果修着修着发现,还不如自己重做一遍。更烦的是时间根本没花在表达上,全花在和工具拉扯上了。

他的判断是:很多演示其实不该继续用"文件思维"做。尤其是当你想要这些的时候,传统 PPT 会越来越别扭——一页不是"切过去"而是像网页一样滑进来;标题和图有节奏地接力出现;演示不是一个文件,而是一个能发链接、能改主题、能版本管理的网页资产。

记住:一句话结论:PPT as Code 真正厉害的不是"更酷",而是把一次性的演示文件,变成一套可复用、可迭代、可扩展的内容资产。

作者还给了一个效率建议:推荐把本文直接喂给 Codex / Cursor / Claude Code,让它先把骨架搭起来,你再去改内容、风格和节奏。

🧱

问题定义:你到底在写什么(底层五要素)

市面上教程一上来就讲动画,很容易把人带歪。因为"像 PPT 一样的分页展示",本质上不是某个 fadeIn 特效,而是这五个东西:

  • container:演示容器,也就是你的舞台;
  • slides:每一页内容;
  • index:当前页索引;
  • controls:按钮、键盘、分页器、URL;
  • motion:切换时怎么动。

只要这五件事在,你的演示系统就成立了。动画只是最后一层,真正的底层是状态切换。所以别再把它理解成"轮播图"了——传统 jQuery slideshow 思路做的是 banner,不是演示系统。今天真正该看的现代能力是:transform、transition、scroll-snap、History API、WAAPI、View Transition API,以及 reveal.js 这种打包好的框架。

原文配图:PPT as Code 最小模型示意图——浏览器舞台上的 3 页幻灯片,标注容器/幻灯片/索引/控制/动效五要素
原文配图:PPT as Code 最小模型示意图——浏览器舞台上的 3 页幻灯片,标注容器/幻灯片/索引/控制/动效五要素
高中生类比
这五要素就像一场舞台剧:container 是舞台,slides 是演员,index 是剧本上"现在演第几幕",controls 是导演喊"下一幕"的手势,motion 是幕布拉开的方式。没有剧本和导演,光有华丽的幕布是没有用的。
🚀

最小可运行版本:先把闭环跑通

先别想高级转场,先把最小闭环跑通。最小版本只需要三件事:一页一页组织内容、用按钮和键盘切页、用 transform + transition 做稳定的分页动画。

骨架可以压成一句话:每一页都是一个 section,每次切页只改 currentIndex,再用 CSS 根据当前索引决定每页的位移和透明度。

你没必要啃大段源码——直接把下面这个 prompt 丢给 AI 编程工具(点右上角复制):

请帮我生成一个单文件 HTML demo,用来模拟类似 PPT 的分页展示动画。要求:

1. 只输出一个完整的 HTML 文件,包含内联 CSS 和内联 JavaScript。
2. 页面语言是中文,主题偏克制、现代、像产品发布页,不要廉价赛博朋克。
3. 演示区域默认 16:9,桌面端居中显示,移动端自动切换为更适合竖屏的比例。
4. 至少包含 4 页 slide,每页都有标题和一小段说明文字。
5. 每一页都用 section 表示,所有 slide 共用同一个 viewport。
6. 需要支持“上一页 / 下一页”按钮。
7. 需要支持键盘左右方向键和 PageUp / PageDown 切页。
8. 切页动画优先使用 transform 和 opacity,不要用 top / left 做大范围动画。
9. JavaScript 里只维护一个 currentIndex 或等价状态,不要写得过于复杂。
10. 当前页要有明显激活态,非当前页可以适当降透明度。
11. 必须补 prefers-reduced-motion 的降级处理。
12. 代码结构尽量清晰,变量命名直白,适合二次修改。

输出时请额外在代码上方,用 6 到 10 行简要解释这个 demo 的结构:HTML 负责什么,CSS 负责什么,JS 负责什么,我后续应该先改哪几块。

这样你能快速拿到一个能改内容、能试节奏、能直接录屏或发链接的演示底座。

高中生类比
最小版本就像先搭一个能走的"滑板",而不是一上来就造汽车:先验证"我能从 A 页滑到 B 页",装饰以后再加。
🧩

基础篇:让它更像一套真正能讲的演示系统

最小版本能跑,但还不像一套真正能讲的演示系统。通常还要补五个能力——每个都配了递进 prompt,点开展开复制:

这两个东西不是为了显得专业,而是让观众知道"我讲到哪了"。输出时还要让 AI 先说明:新增功能分别属于"状态可视化"还是"导航能力",并标出想删减时优先删哪一块。

基于我现在这个单文件 HTML 分页演示 demo,继续增强,但不要推倒重写。请只在现有结构上新增这些能力:

1. 顶部或底部加一个进度条,根据当前页数计算百分比。
2. 加一组分页圆点,点击圆点可以跳到对应 slide。
3. 当前页的圆点要有激活态。
4. 保留原有按钮和键盘切页逻辑。
5. 不要引入任何第三方库。
6. 尽量复用现有 currentIndex 状态,不要新造一套并行逻辑。
7. 保持视觉风格统一,避免加很多无关装饰。

输出时请先告诉我:这次新增功能分别属于“状态可视化”还是“导航能力”,并标出我后续如果想删减,应该优先删哪一块。

要把演示直接发成网页,URL 同步几乎必补:观众刷新后能回到当前页,你也能把第 5 页单独发给别人。重点不是背 API,而是把需求说清楚;还要让 AI 回答:这种同步更适合"可分享演示链接"还是"上台播放模式",以及为什么。

请基于当前 HTML 分页演示,增加 URL 同步能力,但不要破坏现有按钮、键盘和动画逻辑。要求:

1. 当前页变化时,把 URL 更新为类似 #slide-1、#slide-2 这样的 hash。
2. 页面首次加载时,如果 URL 里已经有 hash,就直接定位到对应页。
3. 浏览器前进后退时,演示要能跟着同步切页。
4. 不要引入路由库,不要引入框架。
5. 保持实现尽量简单,优先使用原生 History API 或 hash 方案。
6. 请告诉我:这种 URL 同步更适合“可分享演示链接”,还是“上台播放模式”,以及为什么。

PPT 里最常见的能力:标题先出来,再出第一条、第二条。关键不在于动画,而在于节奏控制——观众跟着你的叙述节拍走。记住作者的判断:fragment 的本质是"页内步骤状态",而不是"单纯多几个 class"。

请在我现有的 HTML 分页演示上,增加类似 PPT fragment 的能力。要求:

1. 同一页内某些元素可以逐步显现,而不是一进页就全部显示。
2. 右方向键或下一步操作时,优先显示当前页还没出现的 fragment。
3. 只有当前页 fragment 全部显示完,才真正翻到下一页。
4. fragment 的默认动画要克制,优先用 opacity 和轻微位移,不要夸张飞入。
5. 需要兼容 prefers-reduced-motion。
6. 输出时请给我一个最小示例:标题常驻,三条 bullet 逐条出现。
7. 请额外解释:为什么 fragment 的本质是“页内步骤状态”,而不是“单纯多几个 class”。

一旦演示里放大图、视频、iframe,资源加载会造成卡顿。策略:优先预加载当前页、前一页、后一页的重资源,不要一口气全加载;没准备好的给 loading 占位;建议分"必须做 / 建议做 / 可选做"三档。

请帮我优化一个 HTML 分页演示,让它在图片和视频较多时切页更稳。要求:

1. 优先考虑预加载当前页、前一页、后一页的重资源。
2. 不要一口气把所有页面的资源都提前加载。
3. 如果某一页资源还没准备好,给出简单的 loading 占位。
4. 不要引入打包工具或复杂工程化方案,只讨论原生前端里最实用的做法。
5. 请把建议分成三类:必须做、建议做、可选做。

只投屏可以晚一点;但只要准备发链接,移动端就不是可选项。至少想清楚两件事:桌面端是不是保持 16:9;手机端是不是切成 9:16 或允许内容重排——不要简单缩小整张 slide,要优先保证可读性。

请基于现有 HTML 演示,补一套移动端适配方案。要求:

1. 桌面端保持 16:9 的发布会式演示观感。
2. 手机端不要简单缩小整张 slide,而是优先保证可读性。
3. 可以根据屏幕尺寸切换为更接近 9:16 的布局。
4. 需要考虑移动浏览器视口高度变化。
5. 不要做成完全两套页面,而是尽量复用一套结构。
6. 输出时请说明:哪些是必须改的,哪些只是锦上添花。
🛠️

进阶:哪种能力值得加,哪种该外包给框架

做到这一步,原生 HTML 已经能搭出像样的分页演示。接下来要想清楚的不是"还能不能更炫",而是哪种能力值得加,哪种该直接外包给框架:

给滚动容器加 scroll-snap-type、子元素加 scroll-snap-align,浏览器会在滚动结束时吸附到最近的对齐位置。适合一屏一屏往下滚的发布页、观众自己浏览的演示链接;不适合要精准控制每一下按键、必须先 reveal 三次再翻页、每页高度差异大的场景。

请帮我把当前的 HTML 分页演示,改造成更适合“观众自己滚动浏览”的 scroll-snap 版本。要求:

1. 使用现代 CSS Scroll Snap 写法,不要使用旧语法。
2. 每个 slide 至少占满一个视口高度。
3. 保持当前视觉风格,不要重做整套 UI。
4. 请解释这种方案和“按钮切页方案”最大的结构区别。
5. 请告诉我:什么场景适合 scroll-snap,什么场景反而不该用。

简单翻页 CSS transition 就够了。但要动态改动画时长、等数字滚动完再出现下一层、多元素跟同一条时间线推进时,Web Animations API 更舒服。不要一刀切全改,只挑 1 到 2 类动画做示例。

请帮我评估,当前这个 HTML 分页演示里,哪些动画适合继续用 CSS transition,哪些更适合改成 Web Animations API。要求:

1. 不要一刀切全改。
2. 只挑最适合 WAAPI 的 1 到 2 类动画做示例。
3. 优先选择需要更强时间控制、播放控制或链式触发的场景。
4. 输出时请分成三部分:继续保留 CSS 的、建议改 WAAPI 的、没必要做复杂的。

它适合做"旧视图和新视图之间的镜头感",不是拿来替代整套 slide 系统的。状态逻辑没理顺就先上它,只会更乱。用"收益 / 复杂度 / 浏览器现实"三个维度判断,而不是只讲 API 本身。

请基于我当前的 HTML 演示,评估 View Transition API 是否值得接入。要求:

1. 先判断这个项目是否真的适合同文档视图切换。
2. 如果适合,只给一个最小可用接法,不要大改架构。
3. 如果不适合,也请明确告诉我原因。
4. 请用“收益 / 复杂度 / 浏览器现实”三个维度来判断,而不是只讲 API 本身。

它最有价值的不是功能多,而是很多你迟早会补的能力它都有了:Fragments、Auto-Animate(相邻两页自动补间)、Markdown 写幻灯片。如果你是内容创作者、不想长期维护自写逻辑,reveal.js 比原生手写更划算。

请帮我用 reveal.js 搭一个最小可用的 HTML 演示原型,主题是产品发布式分页展示。要求:

1. 先用 reveal.js 官方推荐结构搭建,不要引入无关插件。
2. 至少包含 4 页 slide。
3. 第 2 页演示 fragment。
4. 第 3 页演示 auto-animate。
5. 第 4 页演示一页代码或数据排版,但风格要简洁。
6. 优先用 reveal.js 自带能力,不要为了炫技增加复杂定制。
7. 输出时请告诉我:如果我是内容创作者,不想长期维护自写逻辑,为什么 reveal.js 可能比原生手写更划算。
原文配图:如何选择 HTML 演示方案——方法论图解(原生 HTML/CSS/JS、scroll-snap、reveal.js、传统 PPT 四条路线的能力与场景对比)
原文配图:如何选择 HTML 演示方案——方法论图解(原生 HTML/CSS/JS、scroll-snap、reveal.js、传统 PPT 四条路线的能力与场景对比)
🎨

美观方法论:丑不是因为不会写 CSS

很多人的网页 PPT 不是功能没做出来,是做出来了但还是丑。这个"丑"通常不是因为不会写 CSS,而是还在用"想到哪页修哪页"的方式做设计。真正需要的不是一页一页补救,而是一套先定死的视觉系统:

  • 先定视觉母板:字体系统、颜色系统、间距系统、组件系统——这四件事不先定,再多的动效也只是在给混乱加速度;
  • 先把字体做好:网页 PPT 最显廉价的不是配色而是字体。标题用有 personality 的 display 字体,正文用耐读的 text 字体;Google Fonts 的 CSS2 API 已支持 variable fonts,一套变量字体就能拉开层级;
  • 动效要有节奏:只在换页大动作和一两个关键元素的节奏动作上下重手,其他地方克制;要编排多元素的时间关系,GSAP 很舒服;
  • 先让 AI 出 3 套视觉方向,不要直接写最终版:"帮我把这个网页 PPT 做漂亮"这种 prompt 太空,只会得到模板化结果;
  • 再按选定方向只重写样式层:用 CSS 变量抽出颜色、圆角、阴影、间距、字号层级,不碰结构。
请基于我当前这个 HTML 演示项目,不直接生成最终页面,而是先给我 3 套彼此差异明显的视觉方向方案。要求:

1. 每套方案都要包括:设计关键词、适合的内容气质、标题字体建议、正文字体建议、主色 / 辅色 / 背景色、组件风格、动画节奏。
2. 三套方向不能只是换颜色,要有明显的风格差异。
3. 风格方向尽量朝“产品发布页 / 设计评论 / 商业杂志封面 / 信息可视化演示”这些成熟方向靠,不要默认赛博朋克紫色。
4. 输出时请告诉我:哪一套最适合“PPT as Code”这种偏理性、偏设计系统感的主题,为什么。
5. 不要直接写完整代码,先做视觉方案。
请基于我已经选定的视觉方向,重构当前 HTML 演示的视觉样式,但不要推倒现有内容结构和交互逻辑。要求:

1. 优先改 CSS,不要重写整套 HTML 和 JavaScript。
2. 用 CSS 变量先抽出颜色、圆角、阴影、间距、字号层级。
3. 保持 slide 数量、内容顺序、切页逻辑不变。
4. 目标气质是:克制、锋利、像高质量产品发布页,不要廉价科技风。
5. 请重点优化:标题层级、留白、背景、卡片质感、按钮、分页器、进度条。
6. 输出时请先解释:这次改动里,哪些是“风格层”,哪些是“结构层”,并确保你只动风格层。
高中生类比
先定视觉母板就像盖楼先定户型和装修标准,而不是一间房一个风格最后拼成"大杂院"。
🖼️

AI 找配图:它首先是视觉研究助理

AI 在配图这件事上至少能做四件事:把文字翻译成视觉概念 → 翻译成检索关键词 → 帮你筛掉不合适的图 → 图库没有时再翻译成出图 prompt。它首先是一个视觉研究助理,不只是出图机器。顺序不能反:

同一句话可以配很多种图(浏览器舞台、多 slide 切换系统图、传统幻灯片与网页状态对照图、"文件变系统"的视觉隐喻)。先让 AI 把方向拆出来,后面找图效率才高。

请基于这篇文章 / 这一页 slide 的内容,先不要直接生成图片,也不要直接搜图。先帮我做视觉拆解。要求:

1. 提炼这一页最核心的表达目标。
2. 给出 3 到 5 个不同的视觉隐喻方向。
3. 每个方向都要说明:适合传达什么、不适合传达什么、可能出现什么误解。
4. 请额外告诉我:哪一个方向最适合做封面,哪一个方向更适合做正文配图。
5. 输出要像一个创意总监在做前期视觉方向会,而不是像关键词列表。

最怕 AI 只给一个大词比如"technology presentation",一搜全是廉价科技蓝。要的是一整套:英文主关键词、替代词、应避开的词、图片方向、横竖比例、色彩倾向。

请基于我这页内容,帮我生成一个“找配图搜图包”。要求:

1. 先给出这页内容最适合的 1 个主视觉方向。
2. 再给出 8 到 12 个英文搜索关键词组合
3. 再给出 5 个应避开的关键词,避免搜出廉价、跑题或过度科技感的图。
4. 补充建议的图片比例、构图方向、主色倾向。
5. 如果你觉得这页更适合插画而不是照片,也请明确指出。
6. 输出时请按“封面搜图词 / 正文搜图词 / 应避开词 / 筛选标准”四块组织。

只有经过拆解、搜图、筛图留下来的方向,才值得被翻译成最终 prompt。要求中英双语、写清不要出现什么、封面要留标题区,风格像设计评论杂志封面。

请把我已经选定的这套视觉方向,翻译成一个适合图像模型的最终出图 prompt。要求:

1. 先写清楚主题和画面主体。
2. 再写清楚构图、色彩、材质、气质。
3. 明确写出不要出现什么。
4. 如果这是文章封面,请留出标题区。
5. 输出中英双语 prompt。
6. 风格要像设计评论杂志封面,而不是 AI 工具宣传图。
⚖️

边界与判断:什么场景不该用网页演示

作者在结尾划了三条判断线,值得全文背诵:

  • 工具选型不是非此即彼:商务路演、毕业答辩,传统 PPT 不能被替代;但演示一旦频繁出现在网页、内容平台、产品展示、个人网站,就该当作持续积累的演示资产来经营;
  • 动效是为观众服务的:不要拿"做了很多效果"误认为"讲得更好";动画的意义是帮观众更轻松地理解、跟上节奏、记住重点;
  • 细节决定立场:是否尊重 prefers-reduced-motion、是否照顾键盘用户、焦点是否清晰可见——这些决定你的作品是在服务表达,还是在展示技巧。
记住:记住作者的终局判断:代码会越来越像材料,prompt 会越来越像起点,工具会不断更新;但对结构、节奏、可讲性、可维护性的判断,才是最难被替代的部分。

本专题第 3 课(一镜到底发布片)和第 5 课(SlideBlocks 浏览器演示)都是这套理念的延伸:网页动效基础详见本课第 2–4 节;"演示应该是网页资产"的主张是第 5 课的理论地基。

词

术语翻卡:点卡片看解释

PPT as Code
PPT as Code
用代码(网页)做演示的方法论:把一次性幻灯片文件变成可复用、可迭代、可版本管理的网页资产。
演示五要素
container / slides / index / controls / motion
演示系统的底层模型:容器(舞台)、页面、当前页索引、控制器、切换动效;动画只是最后一层。
Fragment
Fragment
一页内部元素的逐步显现;本质是"页内步骤状态",用来控制观众跟随叙述的节奏。
Scroll Snap
Scroll Snap
CSS 滚动吸附:滚动结束时自动对齐到最近的一屏,适合观众自己滚动浏览的叙事型演示。
WAAPI
Web Animations API
浏览器原生 JS 动画接口,适合需要精准时间控制、播放控制、链式触发的复杂动效。
reveal.js
reveal.js
成熟的 HTML 演示框架:自带 fragments、auto-animate、Markdown 写幻灯片,不想重复造轮子时用它。
视觉母板
Visual template
先定死的视觉系统:字体、颜色、间距、组件四套规范,避免一页一页临场发挥导致风格混乱。
prefers-reduced-motion
prefers-reduced-motion
系统"减少动态效果"偏好设置;网页演示必须提供降级处理,照顾对动效敏感的用户。
测

自测一下:点问题展开参考答案

container(容器/舞台)、slides(每页内容)、index(当前页索引)、controls(按钮/键盘/分页器/URL)、motion(切换动画)。因为分页展示的本质是状态切换,动画只是状态变化时的表现层。

每一页都是一个 section,每次切页只改 currentIndex,再用 CSS 根据当前索引决定每页的位移和透明度。

因为它控制的是"第几步"的推进逻辑:按一次下一步先显现未出现的元素,全部显现完才真正翻页——这是状态机,不是样式。

适合一屏一屏滚动的发布页、观众自己浏览的叙事型演示;不适合需精准按键控场、必须先 reveal 多次再翻页、每页高度差异大的场景。

商务路演、毕业答辩。选型不是非此即彼,要看交付的是一次性演讲文件,还是一套长期复用的表达系统。