Markdown 图标完整教程 - 如何在 Markdown 中添加图标(Font Awesome、Emoji、SVG)
Markdown 图标是什么?
Markdown 本身没有内置的图标(icon)语法——标准 CommonMark 规范里找不到一个专门用来插入图标的标记。但这不意味着在 Markdown 里没法用图标。实际上有几种常见的方法,只是每种都有各自的适用范围和限制。
简单来说,Markdown 图标就是通过 HTML 标签、图片引用、Emoji 或者 Markdown 扩展插件等方式,在文档中插入的小型视觉元素。它们常用来做导航标记、状态指示、分类标签,或者单纯让文档更好看。
五种添加 Markdown 图标的方法
根据你的使用场景,主要有这几种方式:
| 方法 | 兼容性 | 复杂度 | 适合场景 |
|---|---|---|---|
| Emoji 表情 | 几乎所有平台 | 低 | 快速点缀、状态标记 |
| Unicode 符号 | 几乎所有平台 | 低 | 箭头、数学符号、特殊字符 |
| Font Awesome(HTML 标签) | 需要加载 CSS 的平台 | 中 | 自有网站、博客 |
| SVG 图片引用 | 支持 img 标签的平台 | 中 | GitHub README、跨平台文档 |
| Markdown 扩展插件 | 特定工具链 | 高 | Hugo/MkDocs/Jekyll 等静态站点 |
下面逐个展开。
用 Emoji 添加图标
这是最简单也最通用的方法。几乎所有 Markdown 渲染器都支持 Emoji,包括 GitHub、GitLab、VS Code 预览、Typora。
直接在文本中插入 Emoji 字符:
构建状态:✅ 通过 | ❌ 失败 | ⏳ 进行中
功能列表:
- 🔍 搜索功能
- 📊 数据分析
- 🔔 通知推送
- 🛡️ 安全防护GitHub、GitLab 还支持用冒号包裹的 Emoji 短代码:
:tada: 发布成功!
:rocket: 版本更新
:warning: 注意事项说实话,如果你只是想在文档里加点视觉元素,Emoji 是首选——不需要额外配置,复制粘贴就能用。
不过 Emoji 也有局限:样式取决于用户的操作系统和字体,不同设备上显示效果可能不一样。比如 Windows 和 macOS 上同一个 Emoji 看起来差别就挺大的。如果你需要精确控制图标的大小和颜色,Emoji 就不太合适了。
用 Unicode 符号作为图标
Unicode 里藏着大量可以直接当图标用的符号字符。它们跟 Emoji 一样不需要额外依赖,而且在所有平台上的渲染基本一致(因为走的是字体渲染)。
一些常用的 Unicode 图标符号:
**箭头类:**
→ ← ↑ ↓ ⇒ ⇐ ⇑ ⇓ ➜ ➤ ▶ ◀
**形状类:**
● ○ ■ □ ▲ △ ◆ ◇ ★ ☆ ✓ ✗
**数学/逻辑:**
≈ ≠ ≤ ≥ ± × ÷ ∞ √ ∑ ∏
**其他常用:**
☎ ☎ ✉ ⌛ ⚡ ♻ ⚠ ☘ ✈ ☕在 Markdown 里直接粘贴这些字符就行:
### ✅ 已完成功能
- 用户登录 → 密码验证 ⇒ Token 生成
- 数据导出:CSV √ | JSON √ | XML ✗
### ⚠️ 注意事项
- CPU 使用率 ≥ 80% 时触发告警
- 请求超时时间 ≈ 30s我的经验是,Unicode 符号特别适合用在表格里做状态标记或者技术文档中表示逻辑关系。它比 Emoji 更"正经",不会因为渲染差异太离谱。
用 Font Awesome 图标
Font Awesome 是最流行的图标库之一,提供了数千个矢量图标。在 Markdown 中使用 Font Awesome 主要有两种方式。
方式一:HTML 标签(需要加载 CSS)
如果你的 Markdown 渲染在网页上(比如自己的博客或文档站),可以在页面模板的 <head> 中加载 Font Awesome CSS:
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">然后在 Markdown 文件里直接写 HTML:
项目功能列表:
- <i class="fa-solid fa-user"></i> 用户管理
- <i class="fa-solid fa-gear"></i> 系统设置
- <i class="fa-solid fa-chart-line"></i> 数据分析
- <i class="fa-solid fa-shield-halved"></i> 安全中心
按钮样式: <i class="fa-solid fa-download"></i> 下载 |
<i class="fa-solid fa-trash"></i> 删除Font Awesome 还支持控制图标大小和样式:
<i class="fa-solid fa-house"></i> 默认大小
<i class="fa-solid fa-house fa-lg"></i> 大号
<i class="fa-solid fa-house fa-2x"></i> 两倍大
<i class="fa-solid fa-house fa-3x"></i> 三倍大
<i class="fa-solid fa-spinner fa-spin"></i> 旋转动画这个方法的关键前提是页面上必须加载了 Font Awesome 的 CSS 文件。如果是自己的网站,这很好办。但如果是 GitHub README,就行不通了——GitHub 出于安全考虑会剥离自定义 CSS 和 JavaScript,<i class="fa-solid fa-user"> 这种写法在 GitHub 上不会渲染出图标。
我之前有一次给项目写 README,兴冲冲地用了一堆 Font Awesome 图标,推上去一看全是空白——就是踩了这个坑。后来才搞清楚 GitHub 的 HTML 白名单策略只允许少量标签(<img>、<a>、<br> 等),<i> 标签会被保留但不会应用自定义 class 样式。
方式二:Markdown 扩展插件
如果你用 MkDocs、Hugo、Jekyll 等静态站点生成器,可以通过插件用短代码(shortcode)来插入图标。
MkDocs + fontawesome-markdown:
先安装扩展:
pip install fontawesome-markdown在 mkdocs.yml 中启用:
markdown_extensions:
- fontawesome_markdown然后在 Markdown 中使用:
我 :fa-coffee: 你
导航 :fa-home: 首页 | :fa-cog: 设置Hugo 短代码:
Hugo 有内置的图标短代码语法,配合图标库使用:
{{</* icon "github" */>}}
{{</* icon "heart" */>}}不过要注意,fontawesome-markdown 这个 Python 包最后更新在 2018 年,只支持到 Font Awesome v5.2。如果你需要 v6 的图标,可以考虑其他方案或者自己写个简单的扩展。
用 SVG 图片添加图标
这个方法在 GitHub README 中特别实用。因为 GitHub 虽然不支持 Font Awesome CSS,但支持 <img> 标签——我们可以直接引用 Font Awesome 的 SVG 文件。
引用远程 SVG
Font Awesome 的 SVG 文件托管在 GitHub 仓库中,可以直接用 URL 引用:
<img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/solid/crown.svg" width="20" height="20"> 付费功能
<img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/solid/rocket.svg" width="20" height="20"> 快速开始
<img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/solid/star.svg" width="20" height="20"> 推荐功能通过调整 width 和 height 属性控制大小。颜色呢?SVG 文件默认是黑色的。如果需要改颜色,可以用 CSS 的 filter 属性(前提是你的平台支持),或者下载 SVG 文件后修改里面的 fill 颜色值。
用 shields.io 徽章
shields.io 提供了一种更灵活的"图标+文字"方案,在开源项目 README 中特别常见:


这严格来说是"徽章"不是"图标",但在实际使用中经常起到图标的作用——快速传达项目状态信息。shields.io 支持自定义颜色、文字、logo,灵活度很高。
各平台 Markdown 图标兼容性对比
不同平台对图标的支持差异很大。我整理了一个对比表,帮你快速判断用哪种方法。
| 平台 | Emoji | Unicode 符号 | Font Awesome (HTML) | SVG 图片引用 | 扩展插件 |
|---|---|---|---|---|---|
| GitHub | ✅ | ✅ | ❌ CSS 被剥离 | ✅ | ❌ |
| GitLab | ✅ | ✅ | ✅ 支持 HTML | ✅ | 部分 |
| VS Code 预览 | ✅ | ✅ | ✅ | ✅ | 取决于插件 |
| Typora | ✅ | ✅ | ✅ | ✅ | 部分主题 |
| MkDocs | ✅ | ✅ | ✅ | ✅ | ✅ |
| Hugo | ✅ | ✅ | ✅ | ✅ | ✅ 短代码 |
| Jekyll | ✅ | ✅ | ✅ | ✅ | ✅ |
关键结论:Emoji 和 Unicode 符号是唯一在所有平台都通用的方案。 如果你的文档需要跨平台使用,优先选这两种。Font Awesome HTML 标签方法只在你能控制页面 CSS 的环境中才好用。
暗色主题下的图标问题
这是一个容易被忽略的细节。如果你用 SVG 图片引用方式(比如 GitHub README),默认的 SVG 是黑色的。在亮色主题下没问题,但如果用户开了暗色主题(GitHub Dark),黑色图标在深色背景上基本看不见。
解决思路:
- 使用带透明背景的彩色 SVG — 修改 SVG 文件中的
fill值为特定颜色 - 用 shields.io 替代 — shields.io 的徽章自带主题适配
- Emoji 替代 — Emoji 在暗色/亮色主题下都能正常显示
<!-- 暗色主题可能看不清 -->
<img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/solid/star.svg" width="16">
<!-- 更好的方案:用 Emoji 或 shields.io -->
⭐ Star us on GitHub
不同场景的图标方案推荐
根据你实际的写作场景,我的建议是这样的:
写 GitHub README:用 Emoji 做简单标记,用 shields.io 做状态徽章,尽量避免 Font Awesome HTML 标签(因为不渲染)。如果一定要用 Font Awesome 风格的图标,走 SVG 图片引用的路线。
写技术博客 / 文档站:如果站点模板已经加载了 Font Awesome,直接用 <i> 标签是最方便的。对于 Hugo/MkDocs 等有插件生态的方案,用短代码更优雅。
跨平台发布:如果同一份 Markdown 要在多个平台使用,Emoji 和 Unicode 符号是最安全的选择。Font Awesome 和 SVG 方法可能需要在某些平台上调整。
内部文档 / Wiki:GitLab Wiki、Confluence 这些平台一般都支持 HTML,Font Awesome 方案可行。但也建议先用 Emoji 试试,够用就没必要搞复杂了。
常见问题
GitHub README 中 Font Awesome 图标不显示怎么办?
这是最常见的问题。GitHub 出于安全考虑,不允许外部 CSS 和 JavaScript 运行,所以 <i class="fa-solid fa-user"> 标签虽然不会被移除,但对应的图标样式不会加载。解决方法是用 SVG 图片引用或者直接用 Emoji 替代。
为什么同一个 Markdown 文件在不同平台图标显示不一样?
Markdown 的图标渲染取决于各平台的 HTML 白名单策略和 CSS 加载权限。比如 GitHub 会剥离大部分 HTML 属性,而 GitLab 和自己的网站则宽松得多。这就是为什么跨平台文档推荐用 Emoji 的原因——它不依赖任何外部资源。
Markdown 图标可以自定义颜色和大小吗?
Emoji 和 Unicode 符号的颜色和大小通常跟随文本样式,无法单独控制。Font Awesome 图标可以通过 CSS 类(如 fa-lg、fa-2x)和颜色样式来调整,但这只在支持自定义 CSS 的平台上有效。SVG 图片可以通过 width/height 属性调整大小。
参考来源
- Font Awesome Official Documentation — Font Awesome 图标库官方文档,提供完整的图标列表和使用方法
- GitHub Flavored Markdown Spec — GitHub 官方 Markdown 文档,包含 HTML 白名单策略说明
- Python-Markdown Extensions — Python Markdown 扩展官方文档
- Font Awesome Markdown Extension — fontawesome-markdown 扩展项目文档
- shields.io — 开源徽章生成服务,广泛用于 GitHub 项目状态展示