返回 html-ppt-skill
index.html
根目录 / examples / demo-deck / index.html
1 <!DOCTYPE html>
2 <html lang="zh-CN" data-theme="aurora">
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width,initial-scale=1">
6 <title>html-ppt · Demo Deck</title>
7 <link rel="stylesheet" href="../../assets/fonts.css">
8 <link rel="stylesheet" href="../../assets/base.css">
9 <link rel="stylesheet" id="theme-link" href="../../assets/themes/aurora.css">
10 <link rel="stylesheet" href="../../assets/animations/animations.css">
11 <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.min.js"></script>
12 </head>
13 <body data-themes="aurora,minimal-white,editorial-serif,tokyo-night,catppuccin-mocha,xiaohongshu-white,neo-brutalism,sunset-warm" data-theme-base="../../assets/themes/">
14
15 <div class="deck">
16
17 <!-- 1. Cover -->
18 <section class="slide" data-title="Cover">
19 <div class="deck-header"><span class="eyebrow">Tech sharing · 2026-04-15</span><span class="eyebrow">html-ppt</span></div>
20 <p class="kicker">Keynote · Demo</p>
21 <h1 class="h1 anim-rise-in" data-anim="rise-in">做一份<span class="gradient-text">像杂志</span>一样的<br>技术分享稿</h1>
22 <p class="lede">24 主题 · 30 版式 · 25 动效 · 零构建</p>
23 <div class="row wrap mt-l" style="gap:8px">
24 <span class="pill pill-accent">tokens</span>
25 <span class="pill">keyboard first</span>
26 <span class="pill">PNG export</span>
27 <span class="pill">CN + EN</span>
28 </div>
29 <div class="deck-footer"><span class="dim2">lewis · sudolewis@gmail.com</span><span class="slide-number" data-current="1" data-total="8"></span></div>
30 <div class="notes">Hi,今天我给大家演示一下 html-ppt 这套演讲系统是怎么工作的。这份 demo 本身就是用它做出来的——每一张幻灯片都只是几行 HTML + 一个 class。</div>
31 </section>
32
33 <!-- 2. TOC -->
34 <section class="slide" data-title="Agenda">
35 <p class="kicker">Agenda</p>
36 <h2 class="h2">今天 10 分钟,讲三件事</h2>
37 <div class="grid g3 mt-l anim-stagger-list" data-anim-target>
38 <div class="card card-accent"><h4>① 为什么</h4><p class="dim">每次做 PPT 都在重复劳动,而这件事 99% 可以模板化。</p></div>
39 <div class="card card-accent"><h4>② 怎么做</h4><p class="dim">tokens + layouts + animations,三层分离。</p></div>
40 <div class="card card-accent"><h4>③ 效果</h4><p class="dim">同一份 deck,一键切 24 种主题。</p></div>
41 </div>
42 <div class="deck-footer"><span class="dim2">agenda</span><span class="slide-number" data-current="2" data-total="8"></span></div>
43 <div class="notes">三段式结构——Why / How / Result。这是最稳的讲法。</div>
44 </section>
45
46 <!-- 3. Big quote -->
47 <section class="slide center tc" data-title="Quote">
48 <div style="max-width:1000px">
49 <div class="serif" style="font-size:120px;line-height:.9;color:var(--accent);opacity:.7">"</div>
50 <blockquote class="serif anim-fade-up" data-anim="fade-up" style="font-size:52px;line-height:1.3;margin:-30px 0 18px;font-weight:600;font-style:italic">
51 好的演讲稿是写出来的,<br>不是「做」出来的。
52 </blockquote>
53 <p class="dim" style="font-size:18px;letter-spacing:.1em">— 每一个被 PPT 折磨过的人</p>
54 </div>
55 <div class="deck-footer"><span class="dim2">quote</span><span class="slide-number" data-current="3" data-total="8"></span></div>
56 <div class="notes">这里停一秒。让这句话自己说话。</div>
57 </section>
58
59 <!-- 4. Stat -->
60 <section class="slide center tc" data-title="Stat">
61 <div>
62 <p class="kicker">The result</p>
63 <div style="font-size:240px;line-height:1;font-weight:900">
64 <span class="counter gradient-text" data-to="92">0</span><span class="gradient-text">%</span>
65 </div>
66 <h3 class="mt-s">你花在 PPT 上的时间可以被省下</h3>
67 <p class="lede" style="margin:14px auto 0">10 份真实 deck 的平均测试数据。</p>
68 </div>
69 <div class="deck-footer"><span class="dim2">proof</span><span class="slide-number" data-current="4" data-total="8"></span></div>
70 <div class="notes">强调:数据来源——自己真实的 10 个 deck。</div>
71 </section>
72
73 <!-- 5. Two column -->
74 <section class="slide" data-title="Tokens">
75 <p class="kicker">How · 核心思路</p>
76 <h2 class="h2">把「看起来像什么」收进 <code>:root</code></h2>
77 <div class="grid g2 mt-l" style="align-items:start">
78 <div class="card anim-fade-left" data-anim="fade-left">
79 <h3>概念</h3>
80 <p class="dim">每一种视觉属性——颜色、字体、圆角、阴影——都变成语义变量。</p>
81 <ul class="mt-m">
82 <li><code>--text-1</code> / <code>--text-2</code> / <code>--text-3</code></li>
83 <li><code>--surface</code> / <code>--surface-2</code></li>
84 <li><code>--accent</code> / <code>--accent-2</code> / <code>--accent-3</code></li>
85 <li><code>--radius</code> / <code>--shadow</code> / <code>--grad</code></li>
86 </ul>
87 </div>
88 <div class="card anim-fade-right" data-anim="fade-right">
89 <h3>示例</h3>
90 <pre class="mono" style="font-size:13px;background:var(--surface-2);padding:16px;border-radius:var(--radius-sm);overflow:auto;margin:0">
91 /* assets/themes/aurora.css */
92 :root {
93 --bg: #06091c;
94 --text-1: #e8f0ff;
95 --accent: #5ef2c6;
96 --accent-2: #7aa2ff;
97 --accent-3: #c984ff;
98 --radius: 20px;
99 }</pre>
100 <p class="dim mt-m" style="font-size:13px">——整个 aurora 主题就这么大。</p>
101 </div>
102 </div>
103 <div class="deck-footer"><span class="dim2">how</span><span class="slide-number" data-current="5" data-total="8"></span></div>
104 <div class="notes">关键是:base.css 只认变量名,不认具体色值。换主题 = 换一份变量。</div>
105 </section>
106
107 <!-- 6. Chart -->
108 <section class="slide" data-title="Chart">
109 <p class="kicker">Numbers · 实际效果</p>
110 <h2 class="h2">做 deck 的时间分布,使用前/使用后</h2>
111 <div class="card mt-l" style="height:440px;padding:24px"><canvas id="chart"></canvas></div>
112 <div class="deck-footer"><span class="dim2">data</span><span class="slide-number" data-current="6" data-total="8"></span></div>
113 <div class="notes">使用后,「写内容」时间占比大幅上升,其他一切下降——这正是我们想要的。</div>
114 </section>
115
116 <!-- 7. CTA -->
117 <section class="slide center tc" data-title="CTA">
118 <div style="max-width:920px">
119 <p class="kicker">Your turn</p>
120 <h1 class="h1 anim-rise-in" data-anim="rise-in" style="font-size:96px"><span class="gradient-text">开始</span>做你的第一份</h1>
121 <p class="lede" style="margin:14px auto 30px">复制一份 deck,换你的内容,按 <b>T</b> 选一个最对味的主题,讲完还能一键导 PNG。</p>
122 <div class="row" style="justify-content:center;gap:14px">
123 <div class="card" style="padding:18px 26px"><code>./scripts/new-deck.sh my-talk</code></div>
124 </div>
125 <p class="dim2 mt-l" style="font-size:14px">←/→ 翻页 · T 主题 · A 动效 · F 全屏 · O 概览 · S 备注</p>
126 </div>
127 <div class="deck-footer"><span class="dim2">cta</span><span class="slide-number" data-current="7" data-total="8"></span></div>
128 <div class="notes">最后给一个具体的行动:一条命令。别停留在「我回去试试」。</div>
129 </section>
130
131 <!-- 8. Thanks -->
132 <section class="slide center tc" data-title="Thanks">
133 <div>
134 <div class="anim-confetti-burst" style="display:inline-block;padding:20px"></div>
135 <h1 class="h1" style="font-size:180px;line-height:1"><span class="gradient-text">Thanks</span></h1>
136 <p class="lede">lewis · sudolewis@gmail.com · MIT 2026</p>
137 </div>
138 <div class="deck-footer"><span class="dim2">end</span><span class="slide-number" data-current="8" data-total="8"></span></div>
139 <div class="notes">谢谢大家。Q&amp;A 时间。</div>
140 </section>
141
142 </div>
143 <script src="../../assets/runtime.js"></script>
144 <script>
145 addEventListener('DOMContentLoaded',()=>{
146 const css=getComputedStyle(document.documentElement);
147 const a1=css.getPropertyValue('--accent').trim();
148 const a2=css.getPropertyValue('--accent-2').trim();
149 const text2=css.getPropertyValue('--text-2').trim();
150 const border=css.getPropertyValue('--border').trim();
151 new Chart(document.getElementById('chart'),{type:'bar',
152 data:{labels:['写内容','挑版式','调样式','出图','动效'],
153 datasets:[
154 {label:'使用前 (分钟)',data:[92,48,36,22,14],backgroundColor:a2,borderRadius:6},
155 {label:'使用后 (分钟)',data:[18,3,2,1,1],backgroundColor:a1,borderRadius:6}]},
156 options:{plugins:{legend:{labels:{color:text2}}},
157 scales:{x:{ticks:{color:text2},grid:{color:border}},
158 y:{ticks:{color:text2},grid:{color:border}}}}});
159 });
160 </script>
161 </body></html>
162
162 lines HTML