Skip to content
Souloss
Go back

Excalidraw 白板:在博客中嵌入手绘风格图表

学习如何在博客文章中集成 Excalidraw 手绘风格白板,包括嵌入方式、场景 URL 及最佳实践。

Examples |
| 4 分钟阅读 | 1,142 字

Excalidraw 是一个虚拟白板工具,可以生成手绘风格的图表。它非常适合技术插图、架构图和可视化解释,给人一种亲切自然的感觉。


目录


什么是 Excalidraw?

Excalidraw 是一个开源虚拟白板,具有以下核心特性:

它被广泛用于技术博客、文档和架构设计中。


集成方式

在本博客中有两种方式嵌入 Excalidraw:

方式一:ExcalidrawEmbed 组件(MDX 文件)

如果你的文章是 .mdx 格式,可以使用自定义的 <ExcalidrawEmbed> 组件:

---
import ExcalidrawEmbed from '@/components/media/ExcalidrawEmbed.astro';
---

<ExcalidrawEmbed
  url="https://excalidraw.com/#json=..."
  title="架构图"
  height="500px"
/>
astro

此组件会自动处理响应式尺寸、深色模式和加载状态。

方式二:iframe 嵌入(Markdown 文件)

对于标准 .md 文件,直接使用 HTML iframe:

<iframe
  src="https://excalidraw.com/#json=YOUR_SCENE_DATA"
  width="100%"
  height="500"
  style="border: none; border-radius: 8px;"
  title="Excalidraw 图表"
></iframe>
html

使用 ExcalidrawEmbed 组件(MDX)

ExcalidrawEmbed 组件提供最丰富的集成体验。完整 API 如下:

<ExcalidrawEmbed
  url="https://excalidraw.com/#json=..."
  title="我的图表"
  height="500px"
  darkMode={true}
/>
astro

组件属性

属性类型默认值说明
urlstring必填Excalidraw 场景 URL
titlestring"Excalidraw"iframe 的无障碍标题
heightstring"400px"嵌入容器的高度
darkModebooleanauto强制明/暗模式

如何获取场景 URL

  1. 访问 excalidraw.com
  2. 创建你的图表
  3. 点击 分享 按钮(或使用 Ctrl+Shift+E
  4. 选择 可分享链接
  5. 复制 URL — 完整的场景数据编码在 URL 的哈希片段中

URL 格式如下:

https://excalidraw.com/#json=eyJlbGVtZW50cyI6W...
plaintext

通过 iframe 嵌入(Markdown)

由于本文是 .md 文件,以下是直接使用 HTML 嵌入 Excalidraw 的方法:

Excalidraw 嵌入占位符

如需在此处查看实时 Excalidraw 白板,请在 excalidraw.com 创建场景,然后使用可分享链接替换此内容为 iframe。

嵌入代码模板:

<iframe
  src="https://excalidraw.com/"
  width="100%"
  height="500"
  style="border: 1px solid #e5e7eb; border-radius: 8px;"
  title="Excalidraw 白板"
  loading="lazy"
></iframe>
html

Tip

添加 loading="lazy" 可以延迟 iframe 的加载,直到它进入可视区域。这可以改善页面加载性能,特别是当页面中有多个嵌入时。


创建可分享的场景

分步指南

  1. 打开 Excalidraw — 访问 excalidraw.com
  2. 绘制图表 — 使用工具栏添加形状、箭头、文字
  3. 导出为链接 — 点击分享图标,选择”可分享链接”
  4. 复制 URL — 场景数据编码在 URL 哈希中
  5. 粘贴到文章中 — 使用组件方式或 iframe 方式

场景数据格式

Excalidraw 将场景数据编码为 JSON 格式放在 URL 哈希中。一个最小场景如下:

此 JSON 会经过 Base64 编码后作为哈希片段附加到 URL 中。


示例场景

场景 1:简单架构图

一个典型的 Web 应用架构,包含客户端、服务器和数据库层:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   浏览器     │────▶│   服务器     │────▶│   数据库     │
│  (React/Vue) │◀────│  (Node.js)  │◀────│ (PostgreSQL)│
└─────────────┘     └─────────────┘     └─────────────┘
       │                    │
       ▼                    ▼
┌─────────────┐     ┌─────────────┐
│    CDN      │     │    缓存     │
│ (Cloudflare)│     │   (Redis)   │
└─────────────┘     └─────────────┘
plaintext

在 Excalidraw 中,这些会用手绘风格的矩形和箭头绘制,呈现出友好的白板效果。

场景 2:数据流图

用户输入 ──▶ 数据校验 ──▶ 业务处理 ──▶ 数据存储
   │            │            │           │
   ▼            ▼            ▼           ▼
 UI 表单     Schema 检查   数据转换     数据库
                │            │
                ▼            ▼
           错误提示      事件队列 ──▶ 消息通知
plaintext

场景 3:组件层级

            App
          /  |  \
     Header Main Footer
       |     |      |
     Nav   Content  Links
    / | \    |
  Logo 菜单 搜索
           / | \
      文章 标签 分类
plaintext

这些 ASCII 图示展示了你在 Excalidraw 中可以创建的图表类型。手绘风格使它们非常适合在博客中解释概念,而不像正式的 UML 图那样生硬。


技巧与最佳实践

设计技巧

性能技巧

无障碍技巧

Note

通过 URL 分享的 Excalidraw 场景是端到端加密的。只有拥有准确链接的人才能查看内容。服务器永远看不到未加密的场景数据。


延伸阅读



上一篇
Asciinema 终端回放
下一篇
Markdown 基础:完整语法指南

相关推荐

评论区

文明评论,共建和谐社区