前言
近期工作研究到使用 Slidev 来呈现简报,这是一款基于 Vite + Vue3 的简报工具,整合了大大小小的套件方便用网页创作如动画软件(Powerpoint/Keynote)的简报,并且主要以 Markdown 来撰写内容,这样的方式让我们可以专注在内容上,而不用花太多时间在花俏的简报软件操作,很适合网页开发者或 Markdown 重度使用者的一款简报方案。如果你有以下的需求,那么 Slidev 是你的好选择:
- 觉得 Powerpoint/Keynote 操作繁琐,想要一个简单的简报工具
- 喜欢使用 Markdown 语法写作甚至是制作简报
- 想要一个基于网页的自由开源简报工具
- 想要易于版本控制的简报
环境建置
如果你身在网页开发领域应该会非常熟悉和简单,依照官方文件建置环境即可。
# pnpmpnpm create slidev
# NPMnpm init slidev@latest
# Yarnyarn create slidev
安装完成后它会自动执行,并且列出开发服务器、简报者页面、简报总览页面、输出简报页面等链接,未来要开发可以参考 package.json
内的 script 指令执行。
√ Project name: ... first√ Install and start it now? ... yes√ Choose the package manager » pnpm
Slidev v51.3.0
theme @slidev/theme-seriph css engine unocss entry D:\USER\Desktop\first\slides.md
public slide show > http://localhost:3030/ presenter mode > http://localhost:3030/presenter/ slides overview > http://localhost:3030/overview/ export slides > http://localhost:3030/export/ remote control > pass --remote to enable
shortcuts > restart | open | edit | quit
制作第一个简报
预设会创立 slides.md
文件且预设存在一些示例内容,要直接删掉重头开始也可以,建议官方示例先玩过一次看看有那些特殊的功能,向是布局、动画……等酷东西。语法上可以使用 ---
代表新的一页:
# Slide 1
---
# Slide 2
HeadMatter 与 FrontMatter
每一页简报可以有个开头资料,当遇到被 ---
包覆的 YAML 数据就意味着这是一页全新的页面,这些与页面关联的元数据也被称为 FrontMatter,用来记录页面相关的信息,而第一页简报则可以设置全局简报的设置,因而被称为 HeadMatter。
---transition: fade-out---
# Hello World
提示笔记
------
<!--The last comment block of each slide will be treated as slide notes. It will be visible and editable in Presenter Mode along with the slide. [Read more in the docs](https://sli.dev/guide/syntax.html#notes)-->
简报者可以在每一页简报下一些提示的功能 Slidev 也考虑到了,每个简报的最后一个注释都会被视为提示笔记并显示在简报者模式当中,支持 Markdown 与 HTML。
修改布局与背景图片范例
举例来说内建存在预设的 layout 与 image 设置可以让我们快速的调整页面的布局和使用的图片:
---layout: image-rightimage: images/cat.jpg---
# A slide with an image on the right
基于不同的 theme 会提供你不同的 layout 属性参数使用,可以再查阅对应的文档即可,或者是自制 layout,实际上就是创建一个 Vue 组件。
客制化结构与样式
会发现直接在 Markdown 里面撰写 HTML 与 CSS 是行得通的,其实和 Vue 的组件非常像,每个简报都是独立的组件,可以置入 style
并限制为组件内生效 scoped
:
<style scoped>h1 { outline: 1px solid red;}</style>
或是直接撰写已经整合好的 unoCSS (与 TailwindCSS 相似的 Atomic CSS 框架)也行:
<div class="text-red-300 text-2xl">Hello World</div>
(补充) Icon 使用
简报不可或缺的就是大量的图示辅助读者理解,Slidev 也整合了对应的 Icon 方案,只需下载对应的 Icon 包即可,可以到 Icônes 了解更多。
pnpm add @iconify-json/[the-collection-you-want]
举例来说添加对应 icon 库依赖:@iconify-json/mdi 就可以在简报引入相关组件:
<mdi-account-circle />
(补充) 代码
和 Markdown 一样,特别的是撰写不同语言后语法高光仍会准确显示:
```cssh1 { border: 1px solid red;}```
```html<div class="flex gap-4"> <div>Syntax highlighting is built-in</div></div>```
```javascriptexport function sayHello() { console.log('Hello');}```
这是因为 Slidev 默认也整合了 Shiki 语法高光,可以使用任何 Shiki 相关的设置,甚至动画! (Shiki Magic Move)。
(补充)标示重点
Slidev 背后使用了 RoughNotation 用来添加手绘感的标示,可以使用 v-mark
指令于元素上设置:
- 触发时机
- 客制化颜色
- 客制化种类
官方文件 Rough Markers有很不错的描述与介绍影片可以参考。
(补充)动画
官方有详细的动画指南,我差不多只是练习并用自己的方式理解并精炼一次。
v-click
点击后显示
最简单常见的简报动画是一个「点击」行为后触发画面元素的显现,这点可以轻易地使用 v-click
元件或指令于元素上来达成。每个简报都可以透过 $slidev.nav.clicks
存取当下简报点击过的次数。
<!-- 点击一次 --><v-click>Click Once</v-click><!-- 点击二次出现 --><div v-click class="text-xl">Click Twice</div>{{ $slidev.nav.clicks }}
v-after
点击后延续显示
v-after
用于延续上一个 v-click
的状态
<!-- 点击一次 --><div v-click> Hello </div><div v-after> World </div> <!-- 或 <v-after> World </v-after> -->
展示
在任何简报的右下方都会隐藏导航列,用于操作简报,官方有详细的 UI 文档说明细节。
部署
由于 Slidev 就是一个工具用于生成简报,以往通常会需要建构整个网站后拿生成的网站文件 (在 Vite 当中通常是 dist
文件夹) 并丢上不同的服务。我们试着将它自动化部署在 GitHub Pages 免费服务上(或任何其他托管静态网站的服务上)。
具体来说可以通过 GitHub Actions 来自动化 CD 的流程,首先设置项目 GitHub Pages 配置来源:

接着使用官方提供的部署脚本可以无痛的设置好 CD 设置,未来只要 main
分支有任何更动都会触发线上简报网站的更新。
name: Deploy pages
on: workflow_dispatch: push: branches: [main]
permissions: contents: read pages: write id-token: write
concurrency: group: pages cancel-in-progress: false
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4
- uses: actions/setup-node@v4 with: node-version: 'lts/*'
- name: Setup @antfu/ni run: npm i -g @antfu/ni
- name: Install dependencies run: nci
- name: Build run: nr build --base /${{github.event.repository.name}}/
- name: Setup Pages uses: actions/configure-pages@v4
- uses: actions/upload-pages-artifact@v3 with: path: dist
deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} needs: build runs-on: ubuntu-latest name: Deploy steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4
输出
如果你对于网页不感兴趣,想要直接随拿随用的简报也可以!Slidev 支持多种输出格式可以通过指令输出或左下角的导航列输出按钮调整并输出:
总结
如果你本身是网页技术人员(特别是前端)那么 Slidev 绝对适合用于技术上的简报呈现,深度 Markdown 用户也可以尝试看看。更多有趣没有提到的功能可以查看官方的功能列表。