# 模板改编指南(html-video 模板 → html-explainer 帧) 本技能的画面语言来自 html-video 的 **23 个模板 / 8 个类别**。 `references/style-catalog.md` 是完整目录,本页讲**怎么把它变成合规帧**。 ## 一、先看模板属于哪一类 | 类型 | 数量 | 结构 | 处理方式 | |---|---|---|---| | **★ rich** | 12 | 单文件 + 纯 CSS `@keyframes`;带完整风格规范 | **几乎零改动**:换字体栈 + 让出字幕带 + 填内容 | | **gsap** | 11 | 多 composition + CDN GSAP,或 Remotion 引擎 | 需**重写为单文件**(照风格规范复刻,不要搬代码)| 判断方法:`references/style-catalog.md` 速查表的「类型」列,或看 JSON 目录的 `kf` 字段 (`kf≥1` 且 `multi=false` 且 `engine≠remotion` = rich)。 ## 二、rich 模板改编(三步) ### 第 1 步:换字体栈(必须) 模板原文一律 ``。 **必须删掉**,换成系统字体栈 —— 这是离线渲染的硬要求(详见 `lessons.md` #8)。 ```css :root{ /* 中文优先的系统栈;display 用 Impact/Arial Black 兜住"超大粗体"的观感 */ --font-display: "Impact", "Arial Black", "Microsoft YaHei", "PingFang SC", sans-serif; --font-body: -apple-system, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif; } ``` 然后把模板里的 `font-family: 'Archivo Black'` 等替换为 `var(--font-display)`。 ### 第 2 步:让出字幕带 模板不知道自己会被叠字幕。**底部 80–170px 是字幕带,不许放内容**。 模板里的 `bottom: 74px` / `bottom: 92px` / `bottom: 104px` 这类值一律抬到 `bottom: 176–210px`。参考 `lessons.md` #10。 ### 第 3 步:填真实内容 从模板的 `example.md` 看它期待哪些字段(如 bold-signal 要 `section` / `nav` / `card_label` / `title`)。**必须用真实内容,严禁 lorem ipsum。** ## 三、gsap 模板改编(重写,不搬代码) 多 composition + GSAP 的结构在单帧里**没有起播钩子**,直接搬进 seek 渲染器会得到 静止首帧、且零报错(这正是 `lessons.md` #9 的 `__hvUnfreeze` 整类坑)。 正确做法:**只取它的视觉 DNA,用纯 CSS keyframes 重新表达。** 1. 读 `source/index.html` 或 `index.html` + `compositions/*.html`,提取: - 配色(源码里的 `#RRGGBB`;目录 JSON 的 `colors` 字段已给线索) - 字号层级 / 版式骨架(元素位置、栅格) - 动效意图(谁先入场、位移方向、缓动感觉) 2. 用 CSS `@keyframes` + `animation-delay` 重写成单文件时间轴。 **`animation-delay` 就是时间轴** —— seek 渲染器靠它确定每一时刻的状态。 3. 若确需 GSAP:用本技能内置的 `assets/gsap.min.js`(离线), 并把时间轴注册到 `window.__tl`(见 `references/frame-contract.md` 契约 2)。 ## 四、挑风格的实用建议 | 内容需求 | 推荐风格 | |---|---| | 开场 / 章节分隔 | `frame-bold-signal`(橙卡滑入)、`frame-bold-poster`(海报大字) | | 高级感 / 极简 | `frame-build-minimal`(70% 留白 + 暖金细线) | | 单个关键数字 | `frame-pentagram-stat`(瑞士网格 + 巨型数字)、`frame-nyt-graph` | | 数据对比 / 趋势 | `frame-data-chart-nyt`(NYT 编辑级图表) | | 概念关系 / 流程 | `frame-takram-organic`(柔和有机)、`frame-decision-tree`(分支流程) | | 科技 / 赛博 | `frame-glitch-title`(故障艺术)、`vfx-text-cursor`(光标拖光) | | 金句 / 引用 | `frame-electric-studio`(白蓝分屏引言) | | 收尾 / 品牌 | `frame-logo-outro`(Logo 组装 + glow) | | 电影感空镜 | `frame-light-leak-cinema`(漏光 + 颗粒 + letterbox) | > 挑风格时**同时看时长档**:`frame-bold-signal` 是 3–6s 的短片花, > 硬拉到 20s 会显得空。长段(>10s)优先 `frame-swiss-grid` / > `frame-kinetic-type` / `frame-nyt-graph` 这类 3–30s 档。 ## 五、改编后的自检 ```bash # 单帧渲染验证(不必等整片) node scripts/render_video.mjs <项目> --preview 5 # 抽帧看:字体是否本地、字幕带是否干净、动画是否真的在动 ``` 字幕带检查:抽一帧,确认底部 80–170px 区间内没有任何内容元素。