Markdown技巧:弥补缺失功能的12个实用方法
Markdown技巧是指利用HTML代码片段和巧妙语法,实现Markdown核心规范中缺失的功能,从下划线文字到可点击的视频缩略图都能做到。 几乎每个技巧都依赖同一个前提:渲染器必须接受内联HTML。CommonMark默认原样输出HTML,因此VS Code、Obsidian、Typora以及本站编辑器都能正确显示这些方法。带有净化机制的平台则表现不同。GitHub会按固定的标签白名单过滤输出,并删除所有style属性,而Reddit和Discord会完全忽略HTML。下面每一节都会展示语法,并列出保留或过滤该写法的渲染器。
Markdown下划线
Markdown没有下划线语法,请用HTML的 <ins> 或 <u> 标签包住文字。 <ins> 标签表示插入的文本,在所有主流浏览器中都会显示为下划线。GitHub的净化器保留 <ins> 而丢弃 <u>,所以在README中 <ins> 是通用性更好的选择。
Submit the form <ins>before 30 June</ins> to qualify.
Obsidian和Typora两个标签都能渲染。Bear和Simplenote不走HTML路线,而是提供各自的下划线快捷键。在Reddit上,这些标签会显示为纯文本,因为它的解析器会丢弃HTML。
段落缩进
Markdown会折叠行首空格,并把4个空格的缩进转换为代码块,因此请改用不间断空格实体 来缩进段落。 每个实体在输出中保留为一个可见空格。四个连用即可模拟传统的制表位。
The opening line of this paragraph sits four spaces in.
实体几乎能通过所有渲染器,包括GitHub,因为它们是字符引用而不是标签。但规模一大就显出局限。一份含有几十个缩进段落的文件在源码形式下会变得难以阅读,此时支持模板控制的编辑器(如iA Writer)能更优雅地处理缩进。
Markdown居中
想让Markdown居中一行文字,可以使用 <center> 标签,或在内联CSS能保留的环境中使用 <p style="text-align:center">。 HTML 4.01早在1999年就废弃了 <center>,但浏览器至今仍然支持它,大多数Markdown渲染器也会原样输出。
<center>Chapter 7</center>
<p style="text-align:center">Chapter 7</p>
GitHub会删除style属性,所以第二种写法在那里失效。README作者改用 <div align="center"> 来居中logo和徽章,因为align属性能通过GitHub的净化器。Typora和VS Code预览都会按原样渲染CSS版本。
Markdown字体颜色
Markdown不提供字体颜色控制;在允许CSS的环境用 <span style="color:#0969da">,或在仍然接受旧标签的渲染器中用 <font color="red">。
<span style="color:#0969da">This sentence renders in blue.</span>
<font color="red">This sentence renders in red.</font>
<font> 标签早在1999年就被废弃,现代净化器对它毫不留情。GitHub会同时剥离style属性和color属性,所以两种写法都无法在README中显示彩色文字。那里常见的替代方案是用 diff 作为语言的围栏代码块:以 + 开头的行显示为绿色,以 - 开头的行显示为红色。Obsidian和Typora支持 <span> 版本,直接输出原始HTML的Hugo和Jekyll站点也同样支持。
Markdown注释(隐藏内容)
想让读者看不到某条备注,可以用链接引用技巧 [comment]: #,或使用标准的HTML注释。 两种方法都能让文字留在源文件中,而不出现在渲染后的页面上。
[everything in this line disappears from the output]: #
<!-- This note also stays hidden. -->
方括号技巧借用了链接引用定义这一Markdown核心功能,因此即使在屏蔽HTML的平台上也能生效。请在它上下各留一个空行,否则相邻段落可能被并入该定义。HTML注释更易阅读,但会留在生成页面的源代码里,任何人查看源码都能看到。GitHub对两种方法都支持。
提示框与警告框
在引用块内用emoji加粗体标签制作提示框,或使用GitHub于2023年推出的警告语法。
> [!WARNING]
> This command overwrites all 14 archived backups.
> 💡 **Tip:** Blockquote callouts work in any renderer.
GitHub支持5种警告类型:NOTE、TIP、IMPORTANT、WARNING和CAUTION。每种在github.com上都有专属图标和强调色,但这套语法在其他平台会退化为普通引用块。Obsidian有独立的标注格式 > [!note],于2022年的0.14版本加入;MkDocs搭配Material主题则使用 !!! note 行。emoji引用块是唯一在所有平台上都不失体面的变体。
调整图片大小
把Markdown图片语法换成 <img> 标签,并用像素值设置 width 和 height 属性。
<img src="diagram.png" alt="Deployment diagram" width="480" height="270">
GitHub即便剥离 style="width:50%" 也会保留width和height属性,因此像素值是README中的可靠方案。固定尺寸还能避免页面加载时的布局偏移。不支持HTML的渲染器会把原始标签显示为文字,所以在Reddit这类平台上请继续使用普通的  形式。
图片说明文字
用 <figure> 和 <figcaption> 标签添加说明文字,或直接在图片下方放一行斜体文字。
<figure>
<img src="harbor.jpg" alt="Fishing boats at dawn">
<figcaption>Hobart's harbor, photographed in March 2025.</figcaption>
</figure>

*Hobart's harbor, photographed in March 2025.*
<figure> 和 <figcaption> 都在GitHub的白名单上,所以语义化版本在README中有效。斜体行是不支持HTML的渲染器的后备方案。屏幕阅读器会把它当作正文而非图片说明来朗读,这是换取通用性的代价。
在新标签页打开链接
Markdown链接无法在新标签页打开;请改用原生HTML编写锚点并加上 target="_blank"。
<a href="https://example.com/report" target="_blank" rel="noopener">2026 annual report</a>
请加上 rel="noopener",防止新页面对打开它的窗口执行脚本。这个技巧的适用范围很窄。GitHub在净化时会移除target属性,README里的每个链接照样在当前标签页打开。它在Hugo、Jekyll等原样输出HTML的静态站点生成器中有效,而这些场景恰恰是新标签页行为最重要的地方。
符号与特殊字符
符号可以直接输入,因为Markdown文件就是纯Unicode文本;键盘不便输入的符号则使用HTML实体。 从任意字符参考页面复制 © 或 → 粘贴进文件,它会原样渲染。
| 符号 | HTML实体 |
|---|---|
| © 版权 | © |
| ® 注册商标 | ® |
| ™ 商标 | ™ |
| → 右箭头 | → |
| ° 度 | ° |
| € 欧元 | € |
实体在几乎所有渲染器中都能转换,包括GitHub。唯一的陷阱是代码块:© 在其中会按字面显示,因为围栏代码会禁用实体解码。
目录
把目录做成一个指向标题锚点ID的链接列表。 GitHub、GitLab和大多数渲染器都会为每个标题生成ID:文本转为小写,空格变为连字符,并去掉大部分标点。
- [Underline Text](#underline-text)
- [Resize Images](#resize-images)
- [Embed Videos](#embed-videos)
名为"Resize Images"的标题会得到锚点 #resize-images。GitHub自2021年起还在README标题栏显示自动目录按钮,因此手动目录主要在其他平台的长文档中发挥价值。每次修改标题后请重新检查锚点,因为改名后的标题会悄无声息地弄断链接。
嵌入视频
Markdown无法嵌入视频播放器,请改为把可点击的缩略图链接到视频。 YouTube为每个视频在可预测的URL上发布缩略图,这让此模式非常简单。
[](https://www.youtube.com/watch?v=VIDEO-ID)
把VIDEO-ID替换为视频URL中的11位字符代码。缩略图在任何支持标准Markdown的地方都能渲染,点击后在YouTube打开视频。在平台允许的情况下还有两个升级方案。GitHub自2021年5月起支持在issue、pull request、讨论区和Markdown文件中直接上传 .mp4 和 .mov 文件;完整支持HTML的渲染器则接受粘贴的YouTube <iframe> 嵌入代码。
常见问题
Markdown技巧在GitHub上有效吗?
部分有效。GitHub保留 <ins>、<img> 的width属性、<figure>、HTML注释、实体以及它自家的警告语法,但会剥离所有style属性和target属性。 在依赖任何技巧之前,请先在草稿gist中测试,因为净化器的白名单可能随时变动,不作通知。
为什么我的HTML从渲染后的页面上消失了?
要么是渲染器完全屏蔽内联HTML(Reddit和Discord就是如此),要么是它在净化时移除了你使用的特定标签或属性。 查阅平台文档中的白名单,然后把被剥离的元素换成允许的写法,例如用 <div align="center"> 代替style属性。
哪种注释写法更好,[comment]: # 还是 <!-- -->?
需要备注彻底消失时用 [comment]: #,更看重源码可读性时用 <!-- -->。 方括号形式会被Markdown解析器直接消化,永远不会出现在输出中;而标准HTML注释会保留在页面源代码里,任何查看源码的人都能看到。
