用 Slidev 把 Markdown 變成簡報網站

·slidev簡報markdownvue前端
AI 摘要
AI · GEN

Slidev 是一個用 Markdown 寫投影片的框架,支援 Vue 組件擴展、內建 UnoCSS 和動效系統,最終產出純靜態網站。這篇分享從技術選型、專案建立、樣式客製、動畫設定到部署的過程,以及幾個容易踩到的坑。

最近需要在會議上做簡報,與其用 PowerPoint 或 Google Slides,不如直接做成一個網站,隨時打開瀏覽器就能展示。最後選擇了 Slidev 這個框架,用 Markdown 寫投影片,搭配一些簡單的動效,最終部署成純靜態網站。

這篇文章會分享從技術選型到部署上線的過程,以及一些使用上的心得。

為什麼選 Slidev

一開始有考慮過幾個方案:

方案 優點 缺點
Slidev Markdown 撰寫、Vue 組件擴展、內建動效和樣式系統 依賴 Vue 生態
reveal.js 老牌、外掛多 需要寫比較多 HTML,客製化不太方便
自己刻 完全自由 要自己造翻頁、鍵盤控制、transition 等輪子

Slidev 最吸引我的地方是用 Markdown 就能寫投影片,而且如果需要更複雜的排版,隨時可以在 Markdown 裡面穿插 HTML 和 Vue 組件。內建的 UnoCSS 讓樣式也不用額外設定,寫法跟 Tailwind CSS 幾乎一樣。

建立專案

Terminal window
npm init -y
npm install @slidev/cli @slidev/theme-default

package.json 加入 scripts:

{
"scripts": {
"dev": "slidev",
"build": "slidev build"
}
}

接著建立 slides.md,這就是你的整份簡報:

---
theme: default
transition: slide-left
title: My Presentation
---
# Hello
This is the first slide.
---
# Second Slide
This is the second slide.

每一頁用 --- 分隔,最上面的 --- 區塊是全域設定。跑 npm run dev 就能在瀏覽器看到結果了。

投影片結構

因為這是個人簡介,內容不是技術導向,我把它設計成一個比較有節奏感的流程:文字頁和圖片頁交替出現。

封面 → 個人照+簡介 → 主題文字 → 搭配照片 → 主題文字 → 搭配照片 → ... → 結尾

每個主題都拆成獨立的頁面,不會把太多東西塞在同一頁。這樣在操作的時候節奏會比較好,聽眾也比較容易跟上。

自訂樣式

Slidev 預設的樣式比較中性,如果想要有自己的風格,可以在 styles/ 資料夾裡覆寫。建立 styles/index.ts 作為進入點:

import './custom.css'

然後在 custom.css 裡面寫你的樣式:

.slidev-layout {
background: #f5f0eb !important;
color: #3a3a3a !important;
font-family: 'Noto Sans TC', sans-serif !important;
}

這裡的 .slidev-layout 是每一頁投影片的最外層容器,用 !important 覆蓋預設 theme 的樣式。

如果要讓所有頁面都使用同一張背景圖,也可以直接寫在這裡:

.slidev-layout {
background: url('/images/bg.jpg') center / cover no-repeat !important;
}

圖片放在 public/images/ 下,Slidev 會把 public/ 作為靜態資源的根目錄。

使用 Vue 組件

如果某些排版用純 Markdown 不好實現,可以建立 Vue 組件。把 .vue 檔放在 components/ 資料夾下,Slidev 會自動註冊,直接在 Markdown 裡面用就好:

components/SkillBar.vue
<script setup lang="ts">
defineProps<{
name: string
level: number
}>()
</script>
<template>
<div class="mb-4">
<div class="flex justify-between mb-1">
<span class="text-sm">{{ name }}</span>
<span class="text-xs">{{ level }}%</span>
</div>
<div class="w-full rounded-full h-1.5" style="background: #d4cac0;">
<div
class="h-1.5 rounded-full"
style="background: #8c7b6b;"
:style="{ width: `${level}%` }"
/>
</div>
</div>
</template>

slides.md 裡直接使用:

<SkillBar name="Vue.js" :level="90" />
<SkillBar name="TypeScript" :level="85" />

動效

頁間切換

在全域 frontmatter 設定預設的 transition:

---
transition: slide-left
---

也可以在個別頁面的 frontmatter 覆寫:

---
transition: fade
---

逐步顯示

<v-click> 包住想要按下一步才出現的內容:

# Title
<v-click>
This text appears after clicking.
</v-click>

這在會議上很實用,可以控制資訊出現的時機,不會一次全部秀出來。

元素進場動畫

如果想要更細緻的動畫效果,可以安裝 @vueuse/motion

Terminal window
npm install @vueuse/motion

然後在 HTML 標籤上加 v-motion directive:

<div v-motion
:initial="{ opacity: 0, y: 15 }"
:enter="{ opacity: 1, y: 0, transition: { duration: 1000 } }">
Content here
</div>

踩到的坑

Markdown 裡的 HTML 縮排會變成 code block

這大概是最容易踩到的問題。在 slides.md 裡面寫 HTML 時,如果縮排超過 4 個空格,Markdown parser 會把它當成程式碼區塊,整段 HTML 就會被原封不動地顯示出來。

解決方法就是把巢狀 HTML 的縮排壓平,不要超過 3 個空格。雖然可讀性會差一點,但至少能正常渲染。

<p> 巢狀問題

如果在 <p> 標籤裡面放了 Markdown 文字,Slidev 會把文字解析成 <p>,導致 <p> 裡面又有 <p>,瀏覽器會報 hydration warning。解決方法是外層改用 <div>

第一頁空白

全域 frontmatter 區塊本身也會被渲染成一頁投影片。如果你的第一頁是封面,可以直接把封面內容跟全域設定放在同一個 frontmatter 區塊裡,加上 layout: none 然後自己排版。

部署

npm run build 會在 dist/ 產出純靜態的 HTML/CSS/JS,可以部署到任何靜態網站託管服務。

我是部署到 Zeabur,連接 GitHub repo 後設定好 build command(npm run build)和 output directory(dist)就完成了。

如果是部署到 GitHub Pages 之類有 sub-path 的服務,記得在 build 時加上 --base 參數:

Terminal window
slidev build --base /your-repo-name/

操作快捷鍵

在會議上用筆電操作時,這些快捷鍵很實用:

快捷鍵 功能
/ Space 下一頁
上一頁
o 總覽模式(快速跳頁)
f 全螢幕

這些都是 Slidev 內建的,不需要額外設定。

心得

用 Slidev 做簡報最大的好處是,它就是一個前端專案。想要什麼樣式就寫 CSS,想要什麼互動就寫 Vue 組件,不會被簡報軟體的功能限制住。而且因為是 Markdown,內容的維護和版本控制都很方便。

比較需要注意的是,Slidev 畢竟是把 Markdown 轉成 Vue 組件再渲染,有些 Markdown 和 HTML 混用的邊界情況會比較奇怪(像上面提到的縮排和巢狀問題),需要花一點時間摸索。

整體來說,如果你本身有前端開發的經驗,用 Slidev 做簡報會很順手,也能做出比傳統簡報軟體更有個人風格的東西。

留言

登入後即可留言

以 Google 登入

還沒有留言,成為第一個留言的人吧!

相關文章

用 LQIP 讓圖片載入不再跳來跳去

用 LQIP 技術搭配三層圖片載入策略,讓照片牆從進場到開啟大圖的每個階段都不會出現空白或版面跳動。

2026年4月6日·Programming

AI 時代的個人知識庫:Obsidian、RAG 與 Agent 該怎麼分工?

Obsidian、RAG 與 AI Agent 常被放在一起討論,但它們其實負責不同任務。本文從個人知識管理的角度,拆解 Obsidian 如何保存筆記、RAG 如何檢索資料、Agent 如何把內容轉成可執行的工作流。

2026年5月1日·Obsidian

把模糊想法變成可執行工作:我的 Supekku Workflow 設計

AI Agent 協作的問題不只是 prompt,而是脈絡如何被保存。Supekku Workflow 是我用來把模糊想法整理成可執行工作的方式:先透過對話釐清意圖、範圍與成功標準,再把需要保存的內容轉成 proposal、criteria、reasoning、actions 與 verification。

2026年5月28日·AI

讓 AI 學會查資料:RAG 與 Embedding 技術解析

當 AI 不再只靠訓練記憶回答問題,而是能即時從你的資料中檢索再生成,這就是 RAG(檢索增強生成)的核心概念。本文從 Embedding 向量化到 Cosine Similarity 相似度計算,完整拆解 RAG 的運作原理與實務要點。

2026年3月29日·Programming

如何在 Kobo 電子書閱讀器安裝自訂字型

身為 Kobo 使用者,一定要學會的自訂字型小技巧!內建字型看膩了?跟著這份筆記,把帶有手寫筆觸的「芫荽」字型裝進閱讀器裡。簡單、免費且不傷效能,讓你的每一本電子書都像精心排版過的實體書一樣順眼。

2023年2月20日·Kobo