Markdown 样式排版完整指南
说到 Markdown 排版,很多人第一反应就是"不就加粗斜体那几样嘛"。但真到写文档的时候,经常会冒出一些问题:删除线在哪个平台能用?加粗和斜体能不能叠加?为什么我的 ==高亮== 在 GitHub 上变成了普通文字?
这篇文章就专门聊 Markdown 的文本样式(text styling)——把所有跟"文字长什么样"有关的语法整理清楚,顺便说说不同平台的兼容性差异和排版上的实用技巧。
Markdown 样式速查表
先上一张总表,方便随时查阅。表里的每一项后面都会展开说明。
| 样式 | 语法 | 示例效果 |
|---|---|---|
| 加粗 | **文字** 或 __文字__ | 文字 |
| 斜体 | *文字* 或 _文字_ | 文字 |
| 加粗+斜体 | ***文字*** | 文字 |
| 删除线 | ~~文字~~ | |
| 行内代码 | `代码` | 代码 | |
| 高亮 | ==文字== | ==文字==(需平台支持) |
| 下划线 | <u>文字</u> | 文字(HTML) |
| 上标 | x<sup>2</sup> | x2(HTML) |
| 下标 | H<sub>2</sub>O | H2O(HTML) |
| 文字颜色 | <span style="color:red">文字</span> | 需平台支持内联样式 |
| 键盘按键 | <kbd>Ctrl</kbd> | Ctrl(HTML) |
这个表基本涵盖了 Markdown 中所有跟文本样式相关的写法。注意看就能发现,有些是 Markdown 原生语法(加粗、斜体、删除线),有些是靠内嵌 HTML 实现的(下划线、上标、下标)。这个区别很重要,后面会详细说。
加粗和斜体:最基础的文本样式
加粗和斜体是 Markdown 里用得最多的两种样式,语法也很简单:
**这是加粗文字**
*这是斜体文字*
***这是加粗加斜体***Markdown 提供了两套符号来做这件事——星号(*)和下划线(_)都能用:
**加粗** 或 __加粗__
*斜体* 或 _斜体_实际使用中,大多数人的习惯是用星号。原因是下划线在某些场景下会和单词内部的下划线冲突(比如 some_variable_name),解析器可能把它当成斜体标记 [^1]。
加粗和斜体可以叠加。***文字*** 就是加粗加斜体,等效于 **_文字_** 或 ___文字___。
顺便说一个我在 GitHub 上踩过的坑:在列表项里嵌套使用加粗和斜体时,如果符号和文字之间有空格,有些渲染器的解析结果不一样。比如 ** 加粗 ** 在 CommonMark 规范下不会加粗(因为星号和文字之间有空格),但在某些编辑器的实时预览里却显示正常。所以我的建议是,符号紧贴文字写,别加空格 [^1]。
删除线:标记已删除或过时内容
删除线在 Markdown 删除线 语法中使用双波浪号:
~~这段文字被划掉了~~渲染效果就是文字中间多了一条横线:这段文字被划掉了。
这个语法属于 GitHub Flavored Markdown(GFM)扩展,不是 CommonMark 标准的一部分。不过现在几乎所有主流平台都支持——GitHub、GitLab、Obsidian、Typora、VS Code、Discord 都可以。如果你在某个小众平台上不生效,那就是它不支持 GFM 扩展 [^2]。
删除线经常和加粗搭配用,比如在更新日志里标记旧的价格:
~~**原价 ¥199**~~ 限时 **¥99**高亮:给文字加背景色
高亮(highlight)的写法是用双等号把文字包起来:
==这是一段需要强调的文字==这个语法在 Obsidian、Typora(需在设置中开启)、Logseq、iA Writer 等笔记工具里都支持,效果是文字出现黄色背景。
但要注意,==高亮== 不属于任何 Markdown 标准。CommonMark 不认,GFM 也不认 [^3]。如果你在 GitHub 或 GitLab 上写 ==高亮==,它会原样显示为普通文字。
在这些不支持的平台上,可以用 HTML 的 <mark> 标签替代:
<mark>这是一段需要强调的文字</mark>不过 GitHub 会过滤大部分 HTML 标签,所以 <mark> 在 GitHub 上也不行。说实话,如果你需要 GitHub 上的高亮效果,最靠谱的替代方案是用加粗或者 行内代码 来强调。
更多关于高亮的详细说明,可以看 Markdown 高亮 这篇文章。
行内代码:标记代码或特殊术语
用单个反引号把文字包起来就是行内代码:
在 JavaScript 中,使用 `console.log()` 输出内容。行内代码的渲染效果是灰色背景的等宽字体。严格来说它不是"样式",而是语义标记——表示这段文字是代码。但视觉上它确实起到了强调的效果,很多人也拿它来标记文件名、命令、快捷键等特殊术语。
有一点需要注意:行内代码里的 Markdown 语法不会被解析。所以 `*这段不会变斜体*` 渲染出来就是带星号的等宽文字,不会变成斜体。
如果代码内容本身包含反引号,可以用双反引号包裹:
`` 代码中包含 ` 反引号 ``样式叠加:多个格式怎么组合
Markdown 允许多种样式叠加使用。常见的组合:
**_加粗斜体_**
~~**删除线加粗**~~
**`加粗代码`**
~~*删除线斜体*~~不过叠加有规则限制,不是所有组合都能生效:
- 可以叠加的组合:加粗+斜体、删除线+加粗、删除线+斜体、加粗+行内代码
- 不能叠加的组合:行内代码里不能嵌套任何样式(因为行内代码不解析 Markdown)
- 高亮+其他样式:取决于平台,Obsidian 支持
==**高亮加粗**==,但很多平台不支持
说实话,实际使用中我很少用到三层以上的叠加。两层就够了,三层以上反而影响可读性。
用 HTML 补充 Markdown 的样式短板
Markdown 的原生样式能力有限——没有下划线、没有上标下标、没有文字颜色。这些都要靠内嵌 HTML 来实现 [^4]。
下划线
<u>这段文字带下划线</u>Markdown 原生没有下划线语法(John Gruber 的设计理念是下划线容易和链接混淆),但 HTML 的 <u> 标签基本所有 Markdown 渲染器都支持。更多内容可以看 Markdown 下划线。
上标和下标
公式里常见:x<sup>2</sup> + y<sup>2</sup> = z<sup>2</sup>
化学方程式:H<sub>2</sub>O这在写技术文档的时候特别有用,数学公式和化学式都离不开上标下标。
键盘按键样式
按 <kbd>Ctrl</kbd> + <kbd>S</kbd> 保存文件<kbd> 标签会把文字显示为键盘按键的样式,带边框的等宽字体。写教程和操作指南的时候经常用到。
文字颜色
Markdown 原生不支持文字颜色。唯一的办法是用 HTML:
<span style="color: red">红色文字</span>
<span style="color: #0066cc">蓝色文字</span>但这个方法的局限很大——GitHub 会过滤掉 style 属性,所以完全无效。Obsidian 和 Typora 支持内联样式,可以正常显示。如果你需要改变文字颜色,建议看 Markdown 文字颜色 那篇,里面有更详细的方案对比。
平台兼容性对比:你的样式能不能用
这可能是写 Markdown 样式时最让人头疼的问题。同一份文档在不同平台上渲染出来的效果可能差别很大。我整理了一张兼容性对比表:
| 样式语法 | GitHub | Obsidian | Typora | Jupyter | VS Code |
|---|---|---|---|---|---|
**加粗** | ✅ | ✅ | ✅ | ✅ | ✅ |
*斜体* | ✅ | ✅ | ✅ | ✅ | ✅ |
~~删除线~~ | ✅ | ✅ | ✅ | ✅ | ✅ |
`代码` | ✅ | ✅ | ✅ | ✅ | ✅ |
==高亮== | ❌ | ✅ | ✅ | ❌ | ✅ |
<mark> | ❌ | ✅ | ✅ | ✅ | ✅ |
<u> | ❌ | ✅ | ✅ | ✅ | ✅ |
<mark style> | ❌ | ✅ | ✅ | ❌ | ✅ |
<span style> | ❌ | ✅ | ✅ | ✅ | ✅ |
关键发现:
GitHub 是最严格的。它不支持高亮语法(== 和 <mark> 都不行),也过滤几乎所有 HTML 标签的样式属性。如果你的文档主要发在 GitHub,能用的文本样式就只有加粗、斜体、删除线和行内代码 [^2]。
Obsidian 和 Typora 是最宽松的。几乎所有样式语法都支持,包括高亮、HTML 内联样式和自定义颜色。如果你用的是这两个工具,样式自由度最高。
Jupyter Notebook 居中。基础样式全支持,<mark> 也可以,但 <mark style> 自定义颜色不行 [^3]。
有一次我把 Obsidian 里写好的笔记直接粘贴到 GitHub Issue 里,结果高亮没了、颜色没了、下划线也没了,只剩加粗和斜体。后来才知道 GitHub 的 Markdown 渲染器会严格过滤 HTML。从那以后我养成一个习惯:如果文档最终要发到 GitHub,写的时候就只用基础样式。
Markdown 样式排版实用技巧
掌握了语法之后,怎么让文档排版更好看?这里分享几个我在实际写作中总结出来的经验。
控制样式的使用频率
一篇文档里,加粗、斜体、删除线这些样式不是用得越多越好。过度使用反而会让读者抓不住重点。我的建议是:
- 加粗:用来标注关键操作、重要概念、首次出现的术语
- 斜体:用来强调语气、标注英文术语、引用书名或文章名
- 行内代码:用来标记代码、命令、文件名、配置项
- 删除线:只在标注变更、标记过时信息时使用
用标题和列表代替过多的行内样式
很多人喜欢把每段的关键词都加粗,但更好的做法是用清晰的标题层级和结构化的列表来组织内容。标题本身就是最强的"样式"——它不仅改变了文字的视觉大小,还在文档结构上建立了清晰的层次。
关于标题的详细用法,可以参考 Markdown 标题。
注意中文排版的特殊需求
中文 Markdown 排版有几个特殊点:
- 段落缩进:中文习惯段首缩进两个字符,但 Markdown 的段落不缩进。如果你需要缩进,可以用
  或全角空格实现,但大部分 Markdown 文档直接顶格写段落也是可以接受的 - 中英文之间加空格:在中文和英文/数字之间加一个空格,排版会更好看。比如"使用 Markdown 语法"比"使用Markdown语法"更易读
- 中文标点:确保使用中文全角标点(,。!?),不要混用英文半角标点
转义:当特殊字符不想当语法用
如果你需要显示星号、下划线这些 Markdown 的特殊字符本身,在前面加反斜杠就行:
\*这不是斜体\*
\# 这不是标题
\~~ 这不是删除线 \~~这叫转义(escape),更多细节可以看 Markdown 转义。
常见问题
Markdown 原生支持哪些文本样式?
CommonMark 标准只定义了三种行内样式:加粗(**)、斜体(*)和行内代码(`)。删除线、高亮、下划线、文字颜色等都不在标准内 [^1] [^3]。
为什么我的样式在 GitHub 上不生效?
GitHub 使用的是自己的 Markdown 渲染器,它会过滤掉大部分 HTML 标签和所有内联样式。如果你用了 ==高亮==、<mark>、<span style="color:red"> 这些写法,在 GitHub 上都不会生效。在 GitHub 上可靠的样式只有加粗、斜体、删除线和行内代码 [^2]。
加粗和斜体的符号可以混用吗?
可以。**_文字_** 和 ***文字*** 效果一样。但要注意下划线(_)在单词内部可能会被当成斜体标记,比如 some_variable_name 里的下划线在某些解析器中会触发斜体。用星号更安全 [^1]。
Markdown 能改字体和字号吗?
纯 Markdown 语法不支持。Typora 可以通过主题 CSS 修改,Obsidian 通过 CSS 片段修改,GitHub 完全不支持。如果你需要调整字体大小,可以看 Markdown 字体大小。
样式叠加有什么限制?
行内代码内不能嵌套任何 Markdown 样式。加粗和斜体可以互相叠加,删除线可以和加粗或斜体叠加。高亮和其他样式的叠加取决于平台——Obsidian 支持得最好,其他平台不一定行。
参考来源
[^1]: CommonMark Spec — Markdown 官方规范,定义了加粗、斜体等核心语法的解析规则 [^2]: GitHub Docs — GitHub Flavored Markdown 规范,GitHub 官方格式化文档 [^3]: Daring Fireball — Markdown Syntax Documentation,John Gruber 的原始 Markdown 规范 [^4]: Markdown Guide — Basic Syntax,权威的 Markdown 基础语法参考 [^5]: Stack Overflow — How to apply color on text in Markdown,社区讨论 Markdown 文字颜色的解决方案