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。您可以在 src/config/siteConfig.ts 中进行配置:
export const siteConfig: SiteConfig = { // ... rehypeCallouts: { // 选项: "github" | "obsidian" | "vitepress" 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 语法列表
支持以下类型的提醒框:note tip important warning caution
:::note突出显示用户应该考虑的信息,即使在快速浏览时也是如此。:::
:::tip可选信息,帮助用户更成功。:::
:::important用户成功所必需的关键信息。:::
:::warning由于潜在风险需要用户立即注意的关键内容。:::
:::caution行动的负面潜在后果。:::
:::tip[自定义标题]可选信息,帮助用户更成功。:::剧透
您可以为文本添加剧透。文本也支持 Markdown 语法。
内容
内容 :spoiler[被隐藏了 **哈哈**]!图片画廊网格 (Image Grid)
您可以使用 [grid] 和 [/grid] 标签将多张图片纵向并排展示。这对于展示照片画廊或对比图非常有用。系统会自动根据包裹在其中的图片数量(最多支持并排展示4张)以响应式网格进行布局。
自动补齐图片高度: 同一排中如果有高度、大小或者比例不一的图片,会像「九宫格画廊相册」一样自动撑满。较短或不协调的图片会自动使用 object-cover 进行完美中心裁剪补充视野。图片边框水平彻底对齐无缝隙,但被裁剪后,只有点击图片通过灯箱才能查看完整图片,所以建议尽量避免使用长宽比例不一致的图片在同一排中。
图注恒定底端对齐: 不论上面的图片长宽如何变化,在同一行的所有图像解释文字(图注)都会对标到一条完美的水平基线上了。



基本语法
[grid][/grid]Firefly 代码块示例
在这里,我们将探索如何使用 Expressive Code 展示代码块。提供的示例基于官方文档,您可以参考以获取更多详细信息。
表达性代码
语法高亮
常规语法高亮
console.log('此代码有语法高亮!')渲染 ANSI 转义序列
ANSI colors:- Regular: Red Green Yellow Blue Magenta Cyan- Bold: Red Green Yellow Blue Magenta Cyan- Dimmed: Red Green Yellow Blue Magenta Cyan
256 colors (showing colors 160-177):160 161 162 163 164 165166 167 168 169 170 171172 173 174 175 176 177
Full RGB colors:ForestGreen - RGB(34, 139, 34)
Text formatting: Bold Dimmed Italic Underline编辑器和终端框架
代码编辑器框架
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行')支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!