Slidev 嵌入到文档中
本项目已经提供了全局注册的 SlideEmbed 组件。对于文档页中的 deck 嵌入,优先使用它,而不是手写原始 iframe。
嵌入页应该写在哪里
嵌入页放在:
Plain Text
docs/slides/例如当前已有:
docs/slides/demo.mddocs/slides/guide-2025.md
这些页面负责两件事:
- 给读者看简短的使用说明
- 嵌入真正的
/decks/主题名/产物
标准写法
Markdown
<SlideEmbed
src="/decks/demo/"
title="编程入门演示"
:height="600"
/>其中:
src指向线上 deck 地址title提供 iframe 标题和无障碍文本height控制嵌入区域高度
一个完整示例
Markdown
---
title: 编程入门演示幻灯片:VitePress 嵌入与交互示例
description: 用于展示在 VitePress 中嵌入 Slidev 的方式。
---
# 编程入门演示
::: tip 使用说明
- 点击幻灯片获得焦点
- 使用方向键或空格翻页
:::
<SlideEmbed src="/decks/demo/" title="编程入门演示" :height="600" />为什么不建议直接写 iframe
仓库规范里已经明确:
- 优先使用
SlideEmbed - 如果必须手写
iframe,只保留allow="fullscreen" - 不要写
allowfullscreen
SlideEmbed 的好处是已经封装了:
- 加载中占位态
- 加载超时后的重试入口
- 统一的高度与边框表现
所以除非你需要一个非常特殊的嵌入行为,否则没有必要退回原始 iframe。
两个常见误区
误区一:把 deck 地址写成 /slides/demo
/slides/demo 是文档页,不是 deck 产物地址。嵌入时应写:
HTTP
GET /decks/demo/误区二:把本地端口写进 src
下面这种写法不能提交到仓库:
Markdown
<SlideEmbed src="http://localhost:3030/" title="本地演示" :height="600" />因为其他人和线上环境都访问不到你的本地端口。
推荐做法
- 先在
slides/下写好 deck。 - 再在
docs/slides/下写一个嵌入页。 src一律写/decks/主题名/。- 最后跑
bun run cf:build检查独立 deck 和文档嵌入页是否都能生成。