Firefly 主题使用指南与 Markdown 高级语法

Firefly 主题使用指南与 Markdown 高级语法
基于 Firefly 模板自带文章示例拼接而成
Firefly 简单使用指南
这个博客模板是基于 Astro 构建的。对于本指南中未提及的内容,您可以在 Astro 文档 中找到答案。
文章的 Front-matter
---title: 我的第一篇博客文章published: 2023-09-09description: 这是我新 Astro 博客的第一篇文章。image: ./cover.jpgtags: [前端, 开发]category: 前端开发draft: false---| 属性 | 描述 |
|---|---|
title | 文章标题。 |
published | 文章发布日期。 |
updated | 文章更新日期。如果未设置,将默认使用发布日期。 |
pinned | 是否将此文章置顶在文章列表顶部。 |
description | 文章的简短描述。显示在首页上。 |
image | 文章封面图片路径。 1. 以 http:// 或 https:// 开头:使用网络图片2. 以 / 开头:public 目录中的图片3. 不带任何前缀:相对于 markdown 文件的路径 |
tags | 文章标签。 |
category | 文章分类。 |
lang | 文章语言代码(如 zh-CN)。仅当文章语言与站点默认语言不同时设置。 |
licenseName | 文章内容的许可证名称。 |
licenseUrl | 文章内容的许可证链接。 |
author | 文章作者。 |
sourceLink | 文章内容的来源链接或参考。 |
draft | 如果这篇文章仍是草稿,则不会显示。 |
comment | 是否启用此文章的评论功能。默认为 true。 |
slug | 自定义文章 URL 路径。如果不设置,将使用文件名作为 URL。 |
password | 文章密码。设置后文章内容将被 AES-256-GCM 加密,访客需输入密码才能查看。 |
passwordHint | 密码提示。显示在密码输入框上方,帮助访客回忆密码,也可以不加。 |
文章文件的放置位置
您的文章文件应放置在 src/content/posts/ 目录中。您也可以创建子目录来更好地组织您的文章和资源。
src/content/posts/├── post-1.md└── post-2/ ├── cover.png └── index.md自定义文章 URL (Slug)
什么是 Slug?
Slug 是文章 URL 路径的自定义部分。如果不设置 slug,系统将使用文件名作为 URL。
Slug 使用示例
示例 1:使用文件名作为 URL
---title: 我的第一篇博客文章published: 2023-09-09---文件:src/content/posts/my-first-blog-post.md
URL:/posts/my-first-blog-post
示例 2:自定义 Slug
---title: 我的第一篇博客文章published: 2023-09-09slug: hello-world---文件:src/content/posts/my-first-blog-post.md
URL:/posts/hello-world
示例 3:其他语言文件名使用Slug
---title: 如何使用 Firefly 博客主题published: 2023-09-09slug: how-to-use-firefly-blog-theme---文件:src/content/posts/如何使用Firefly博客主题.md
URL:/posts/how-to-use-firefly-blog-theme
Slug 使用建议
- 使用英文和连字符:
my-awesome-post而不是my awesome post - 保持简洁:避免过长的 slug
- 具有描述性:让 URL 能够反映文章内容
- 避免特殊字符:只使用字母、数字和连字符
- 保持一致性:在整个博客中使用相似的命名模式
注意事项
- Slug 一旦设置并发布,建议不要随意更改,以免影响 SEO 和已存在的链接
- 如果多个文章使用相同的 slug,后面的文章会覆盖前面的
- Slug 会自动转换为小写
Markdown 扩展功能
GitHub 仓库卡片
您可以添加链接到 GitHub 仓库的动态卡片,在页面加载时,仓库信息会从 GitHub API 获取。
使用代码 ::github{repo="CuteLeaf/Firefly"} 创建 GitHub 仓库卡片。
::github{repo="CuteLeaf/Firefly"}提醒框(Admonitions)配置
Firefly 采用了 rehype-callouts 插件,支持了四种风格的提醒框主题:GitHub、Obsidian、VitePress 和 Docusaurus。您可以在 src/config/siteConfig.ts 中进行配置:
export const siteConfig: SiteConfig = { // ... rehypeCallouts: { // 选项: "github" | "obsidian" | "vitepress" | "docusaurus" theme: "github", }, // ...};注意:更改配置后需要重启开发服务器才能生效。
以下是各个主题支持的类型列表,每个主题风格和语法不同,可根据喜好选择。
1. GitHub 主题风格
这是 GitHub 官方支持的 5 种基本类型。

基本语法
> [!NOTE] NOTE> 突出显示用户应该考虑的信息。
> [!TIP] TIP> 可选信息,帮助用户更成功。
> [!IMPORTANT] IMPORTANT> 用户成功所必需的关键信息。
> [!WARNING] WARNING> 关键内容,需要立即注意。
> [!CAUTION] CAUTION> 行动的负面潜在后果。
> [!NOTE] 自定义标题> 这是一个带有自定义标题的示例。2. Obsidian 主题风格
Obsidian 风格支持非常丰富的类型和别名。
点击展开 Obsidian 语法列表
> [!NOTE] NOTE> 通用的笔记块。
> [!ABSTRACT] ABSTRACT> 文章的摘要。
> [!SUMMARY] SUMMARY> 文章的总结(同 Abstract)。
> [!TLDR] TLDR> 太长不看(同 Abstract)。
> [!INFO] INFO> 提供额外信息。
> [!TODO] TODO> 需要完成的事项。
> [!TIP] TIP> 实用技巧或提示。
> [!HINT] HINT> 暗示(同 Tip)。
> [!IMPORTANT] IMPORTANT> 重要信息(Obsidian 风格通常使用类似的图标)。
> [!SUCCESS] SUCCESS> 操作成功。
> [!CHECK] CHECK> 检查通过(同 Success)。
> [!DONE] DONE> 已完成(同 Success)。
> [!QUESTION] QUESTION> 提出问题。
> [!HELP] HELP> 寻求帮助(同 Question)。
> [!FAQ] FAQ> 常见问题(同 Question)。
> [!WARNING] WARNING> 警告信息。
> [!CAUTION] CAUTION> 注意事项(同 Warning)。
> [!ATTENTION] ATTENTION> 引起注意(同 Warning)。
> [!FAILURE] FAILURE> 操作失败。
> [!FAIL] FAIL> 失败(同 Failure)。
> [!MISSING] MISSING> 缺失内容(同 Failure)。
> [!DANGER] DANGER> 危险操作警告。
> [!ERROR] ERROR> 错误信息(同 Danger)。
> [!BUG] BUG> 报告软件缺陷。
> [!EXAMPLE] EXAMPLE> 展示一个例子。
> [!QUOTE] QUOTE> 引用一段话。
> [!CITE] CITE> 引证(同 Quote)。
> [!NOTE] 自定义标题> 这是一个带有自定义标题的示例。
3. VitePress 主题风格
VitePress 风格提供了一套现代化的、扁平的默认样式。目前仅包含与 GitHub 一致的 5 种 基础类型。
点击展开 VitePress 语法列表
> [!NOTE] NOTE> 对应 GitHub 的 Note。
> [!TIP] TIP> 对应 GitHub 的 Tip。
> [!IMPORTANT] IMPORTANT> 对应 GitHub 的 Important。
> [!WARNING] WARNING> 对应 GitHub 的 Warning。
> [!CAUTION] CAUTION> 对应 GitHub 的 Caution。
> [!TIP] 自定义标题> VitePress 风格同样支持自定义标题。
4. Docusaurus 主题风格
Docusaurus 风格提供了一套现代化的提醒框样式,支持 5 种类型。
点击展开 Docusaurus 语法列表
支持以下类型的提醒框:note tip info warning danger
:::note突出显示用户应该考虑的信息,即使在快速浏览时也是如此。:::
:::tip可选信息,帮助用户更成功。:::
:::info一般信息。:::
:::warning由于潜在风险需要用户立即注意的关键内容。:::
:::danger行动的负面潜在后果。:::
:::tip[自定义标题]可选信息,帮助用户更成功。:::
剧透
您可以为文本添加剧透。文本也支持 Markdown 语法。
内容
内容 :spoiler[被隐藏了 **哈哈**]!图片画廊网格 (Image Grid)
您可以使用 [grid] 和 [/grid] 标签将多张图片纵向并排展示。这对于展示照片画廊或对比图非常有用。系统会自动根据包裹在其中的图片数量(最多支持并排展示4张)以响应式网格进行布局。
自动补齐图片高度: 同一排中如果有高度、大小或者比例不一的图片,会像「九宫格画廊相册」一样自动撑满。较短或不协调的图片会自动使用 object-cover 进行完美中心裁剪补充视野。图片边框水平彻底对齐无缝隙,但被裁剪后,只有点击图片通过灯箱才能查看完整图片,所以建议尽量避免使用长宽比例不一致的图片在同一排中。
图注恒定底端对齐: 不论上面的图片长宽如何变化,在同一行的所有图像解释文字(图注)都会对标到一条完美的水平基线上了。



基本语法
[grid][/grid]Firefly 代码块示例
在这里,我们将探索如何使用 Expressive Code 展示代码块。提供的示例基于官方文档,您可以参考以获取更多详细信息。
表达性代码
语法高亮
常规语法高亮
console.log('此代码有语法高亮!')渲染 ANSI 转义序列
Standard ANSI colors:- Dimmed: Black Red Green Yellow Blue Magenta Cyan White - Foreground: Black Red Green Yellow Blue Magenta Cyan White - Background: Black Red Green Yellow Blue Magenta Cyan White - Reversed: Black Red Green Yellow Blue Magenta Cyan White
8-bit colors (showing colors 160-171 as an example):- Dimmed: 160 161 162 163 164 165 166 167 168 169 170 171 - Foreground: 160 161 162 163 164 165 166 167 168 169 170 171 - Background: 160 161 162 163 164 165 166 167 168 169 170 171 - Reversed: 160 161 162 163 164 165 166 167 168 169 170 171
24-bit colors (full RGB):- Dimmed: ForestGreen - RGB(34,139,34) RebeccaPurple - RGB(102,51,153) - Foreground: ForestGreen - RGB(34,139,34) RebeccaPurple - RGB(102,51,153) - Background: ForestGreen - RGB(34,139,34) RebeccaPurple - RGB(102,51,153) - Reversed: ForestGreen - RGB(34,139,34) RebeccaPurple - RGB(102,51,153)
Font styles:- Default- Bold- Dimmed- Italic- Underline- Reversed- Strikethrough编辑器和终端框架
代码编辑器框架
console.log('标题属性示例')<div>文件名注释示例</div>终端框架
echo "此终端框架没有标题"Write-Output "这个有标题!"覆盖框架类型
echo "看,没有框架!"# 如果不覆盖,这将是一个终端框架function Watch-Tail { Get-Content -Tail 20 -Wait $args }New-Alias tail Watch-Tail文本和行标记
标记整行和行范围
// 第1行 - 通过行号定位// 第2行// 第3行// 第4行 - 通过行号定位// 第5行// 第6行// 第7行 - 通过范围 "7-8" 定位// 第8行 - 通过范围 "7-8" 定位选择行标记类型 (mark, ins, del)
function demo() { console.log('此行标记为已删除') // 此行和下一行标记为已插入 console.log('这是第二个插入行')
return '此行使用中性默认标记类型'}为行标记添加标签
<button role="button" {...props} value={value} className={buttonClassName} disabled={disabled} active={active}> {children && !active && (typeof children === 'string' ? <span>{children}</span> : children)}</button>在单独行上添加长标签
<button role="button" {...props}
value={value} className={buttonClassName}
disabled={disabled} active={active}>
{children && !active && (typeof children === 'string' ? <span>{children}</span> : children)}</button>使用类似 diff 的语法
此行将标记为已插入此行将标记为已删除这是常规行--- a/README.md+++ b/README.md@@ -1,3 +1,4 @@+this is an actual diff file-all contents will remain unmodified no whitespace will be removed either结合语法高亮和类似 diff 的语法
function thisIsJavaScript() { // 整个块都会以 JavaScript 高亮显示, // 并且我们仍然可以为其添加 diff 标记! console.log('要删除的旧代码') console.log('新的闪亮代码!')}标记行内的单独文本
function demo() { // 标记行内的任何给定文本 return '支持给定文本的多个匹配项';}正则表达式
console.log('单词 yes 和 yep 将被标记。')转义正斜杠
echo "Test" > /home/test.txt选择内联标记类型 (mark, ins, del)
function demo() { console.log('这些是插入和删除的标记类型'); // return 语句使用默认标记类型 return true;}自动换行
为每个块配置自动换行
// 启用换行的示例function getLongString() { return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间'}// wrap=false 的示例function getLongString() { return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间'}配置换行的缩进
// preserveIndent 示例(默认启用)function getLongString() { return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间'}// preserveIndent=false 的示例function getLongString() { return '这是一个非常长的字符串,除非容器极宽,否则很可能无法适应可用空间'}可折叠部分
5 collapsed lines
// 所有这些样板设置代码将被折叠import { someBoilerplateEngine } from '@example/some-boilerplate'import { evenMoreBoilerplate } from '@example/even-more-boilerplate'
const engine = someBoilerplateEngine(evenMoreBoilerplate())
// 这部分代码默认可见engine.doSomething(1, 2, 3, calcFn)
function calcFn() { // 您可以有多个折叠部分3 collapsed lines
const a = 1 const b = 2 const c = a + b
// 这将保持可见 console.log(`计算结果: ${a} + ${b} = ${c}`) return c}
4 collapsed lines
// 直到块末尾的所有代码将再次被折叠engine.closeConnection()engine.freeMemory()engine.shutdown({ reason: '示例样板代码结束' })行号
为每个块显示行号
// 此代码块将显示行号console.log('来自第2行的问候!')console.log('我在第3行')// 此块禁用行号console.log('你好?')console.log('抱歉,你知道我在第几行吗?')更改起始行号
console.log('来自第5行的问候!')console.log('我在第6行')Markdown 中 Mermaid 图表完整指南
本文演示如何在 Markdown 文档中使用 Mermaid 创建各种复杂图表,包括流程图、时序图、ER 图、类图、状态图和 XY 图。
流程图示例
流程图非常适合表示流程或算法步骤。
时序图示例
时序图显示对象之间随时间的交互。
ER 图示例
ER 图(实体关系图)非常适合表示数据库结构。
类图示例
类图显示系统的静态结构,包括类、属性、方法及其关系。
状态图示例
状态图显示对象在其生命周期中经历的状态序列。
XY 图示例
XY 图表非常适合展示趋势和对比数据。
总结
Mermaid 是在 Markdown 文档中创建各种类型图表的强大工具。本文演示了如何使用流程图、时序图、ER 图、类图、状态图和 XY 图。这些图表可以帮助您更清晰地表达复杂的概念、流程和数据结构。
要使用 Mermaid,只需在代码块中指定 mermaid 语言,并使用简洁的文本语法描述图表。图表会在构建时自动渲染为 SVG,无需客户端 JavaScript 加载。
尝试在您的下一篇技术博客文章或项目文档中使用 Mermaid 图表 - 它们将使您的内容更加专业且更易理解!
Markdown 中 PlantUML 图表指南
PlantUML 是一种使用纯文本描述图表的工具。你只需要写一段结构化语法,就可以生成时序图、类图、用例图、活动图等常见工程图。
它特别适合写在技术博客和项目文档里:
- 图表和正文一起版本管理,便于协作与审阅
- 修改图只需要改文本,适合频繁迭代
- 能和 Markdown 无缝结合,保持文档统一
在 Firefly 中,plantuml 代码块会在构建阶段编码并生成服务器 SVG 地址,页面端再根据亮暗主题自动切换图源,并支持缩放、拖拽和全屏交互。
如果你想快速上手,可以记住这个最小模板:
活动图示例
状态图示例
用例图示例
组件图示例
部署图示例
ER 图示例
时序图示例(登录与刷新令牌)
C4 风格容器图示例
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!