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个空格的缩进转换为代码块,因此请改用不间断空格实体 &nbsp; 来缩进段落。 每个实体在输出中保留为一个可见空格。四个连用即可模拟传统的制表位。

&nbsp;&nbsp;&nbsp;&nbsp;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> 标签,并用像素值设置 widthheight 属性。

<img src="diagram.png" alt="Deployment diagram" width="480" height="270">

GitHub即便剥离 style="width:50%" 也会保留width和height属性,因此像素值是README中的可靠方案。固定尺寸还能避免页面加载时的布局偏移。不支持HTML的渲染器会把原始标签显示为文字,所以在Reddit这类平台上请继续使用普通的 ![alt](url) 形式。

图片说明文字

<figure><figcaption> 标签添加说明文字,或直接在图片下方放一行斜体文字。

<figure>
  <img src="harbor.jpg" alt="Fishing boats at dawn">
  <figcaption>Hobart's harbor, photographed in March 2025.</figcaption>
</figure>

![Fishing boats at dawn](harbor.jpg)
*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实体
© 版权&copy;
® 注册商标&reg;
™ 商标&trade;
→ 右箭头&rarr;
° 度&#176;
€ 欧元&euro;

实体在几乎所有渲染器中都能转换,包括GitHub。唯一的陷阱是代码块:&copy; 在其中会按字面显示,因为围栏代码会禁用实体解码。

目录

把目录做成一个指向标题锚点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上发布缩略图,这让此模式非常简单。

[![How markdown parsing works](https://img.youtube.com/vi/VIDEO-ID/0.jpg)](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注释会保留在页面源代码里,任何查看源码的人都能看到。

免费在线 Markdown 编辑器

在浏览器中直接编写 Markdown,实时预览效果,打开 .md 文件,并将 HTML、Word、PDF 和纯文本转换为 Markdown。

打开编辑器

更多 Markdown 教程