Markdown 居中文本:6 种方法与跨平台兼容性指南

先说一个可能会让新手意外的结论:Markdown 本身没有原生的居中语法。John Gruber 在 2004 年设计 Markdown 时,关注的是"易读易写的纯文本格式",文本对齐这种排版需求被排除在了设计目标之外。

所以你在搜索 "markdown center text" 或 "markdown 居中" 时能找到的所有方案,本质上都是在 Markdown 里嵌入 HTML。虽然听起来有点绕,但实际操作并不复杂,下面我按场景逐一说明。

方法一:<center> 标签(最简单,但不推荐长期使用)

这是网上出现频率最高的写法:

<center>这段文字会居中显示</center>

渲染效果就是文字在页面中间显示,一目了然。支持多行内容,也支持包裹图片、标题等其他元素。

但我得说清楚一件事:<center> 标签在 HTML5 中已经被废弃了。它最早出现在 HTML 3.2 时代,被归类为"presentational HTML"——纯粹控制外观的标签。现代 Web 标准推荐把样式交给 CSS 处理,而不是用 HTML 标签来控制。

不过"废弃"不等于"不能用"。目前所有主流浏览器和 Markdown 渲染器仍然支持 <center>,短期内也不会停止支持。如果你的文档只是内部使用或者临时用途,用 <center> 完全没问题。

<center>

## 居中的标题

居中的正文内容,可以是多行。

![居中的图片](image.png)

</center>

注意 <center> 标签和内容之间留空行,避免某些渲染器解析异常。

方法二:<p align="center">(GitHub 用户首选)

<p align="center">这段文字会居中显示</p>

如果你主要在 GitHub 上写 README,这个写法比 <center> 更靠谱。原因在于 GitHub 的 Markdown 渲染器会对 HTML 做安全过滤——style 属性会被直接移除,但 align 属性不会被过滤。

这个规律很多人不知道。有一次我帮同事排查 GitHub README 居中失效的问题,他用了 <p style="text-align:center">,本地 Typora 预览一切正常,推到 GitHub 后死活不居中。排查了半天才发现是 GitHub 把 style 属性给过滤了,换成 align="center" 就好了。

align 属性对标题同样适用:

<h3 align="center">居中的三级标题</h3>

顺便说一句,align 属性在 HTML5 中也是废弃的,和 <center> 一样的处境。但在 GitHub 环境下,它是目前最稳定的居中方案。

方法三:<div><p> + CSS(最规范的做法)

<div style="text-align: center;">
这段文字会居中显示
</div>

或者用 <p> 标签:

<p style="text-align: center;">居中的文字</p>

这是现代 Web 标准推荐的做法——用 CSS 控制样式,HTML 只负责结构。如果你写的文档最终会通过静态站点生成器(Hugo、Jekyll、Docusaurus 等)渲染,这种写法的兼容性最好,因为这些工具通常不会过滤 style 属性。

一个容易踩的坑:<span> 标签上写 text-align: center 是不生效的。text-align 只对块级元素有效,而 <span> 是行内元素。需要居中的文字要用 <p><div> 这种块级标签包裹。

<!-- ❌ 不生效 -->
<span style="text-align: center;">这不会居中</span>

<!-- ✅ 正确写法 -->
<div style="text-align: center;">这会居中</div>

之前我在一个项目里用 <span> 包裹居中文本,本地编辑器里看着正常(有些编辑器会自行修正),部署到线上后全乱了。之后养成了习惯:需要居中就用 <div><p>,绝不碰 <span>

方法四:表格冒号语法(Markdown 原生,但仅限表格内容)

这是唯一不需要写 HTML 的"居中"方式,但只适用于 Markdown 表格的列内容对齐:

| 左对齐 | 居中对齐 | 右对齐 |
| :--- | :---: | ---: |
| 内容1 | 内容2 | 内容3 |
| 内容4 | 内容5 | 内容6 |

第二列的 :---: 语法会让该列内容居中显示。不过要注意,这是表格单元格内部的对齐,和整段文字的居中是两码事。有些教程把这两个概念混在一起说,容易让初学者困惑。

如果你需要的是"表格本身在页面中居中"(而不是表格内容居中),还是得回到 HTML 方案:

<div align="center">

| 名称 | 说明 |
| --- | --- |
| 项目A | 描述A |
| 项目B | 描述B |

</div>

图片居中的几种做法

图片居中比文本居中更常见,但也更容易出问题,因为 <img> 是行内元素,直接用 text-align 不一定生效。这里单独说明几种方案。

方案 A:<div> 包裹(通用性最好)

<div align="center">
  <img src="image.png" alt="图片描述">
</div>

这个写法在 GitHub、GitLab、Typora 上都测试过,表现稳定。推荐用 align="center" 而不是 style="text-align:center",因为前面说的 GitHub style 过滤问题对图片同样适用。

方案 B:<img> 加 CSS(精确控制)

<img src="image.png" alt="图片描述" style="display: block; margin: auto;">

<img> 从行内元素变成块级元素,然后用 margin: auto 实现水平居中。这个方法的好处是可以和图片尺寸控制配合使用:

<img src="image.png" alt="图片描述" style="display: block; margin: auto; width: 60%;">

不过在 GitHub 上这个方法不适用(style 被过滤),在 Typora、VS Code 预览和静态站点中则正常工作。

方案 C:Markdown 图片语法 + 外层居中

如果你不想写太多 HTML,可以用原生 Markdown 图片语法配合外层的 <div><center>

<div align="center">

![图片描述](image.png)

</div>

简洁,但要注意某些渲染器可能不支持在 <div> 内部解析 Markdown 语法。

跨平台兼容性速查表

我实际测试了几种主要写法在不同平台上的表现:

写法GitHubGitLabTyporaVS Code 预览Hugo/Jekyll
<center>
<p align="center">
<div align="center">
<p style="text-align:center">
<div style="text-align:center">
<img style="margin:auto">
#pic_center(图片)

说明一下几个关键发现:

  • GitHub 过滤所有 style 属性,这是 GitHub 的 HTML sanitizer 的安全策略,不是 bug
  • CSDN 的 #pic_center 是 CSDN 编辑器的私有扩展,其他平台完全不支持
  • Typora 和 VS Code 预览基本支持所有写法,因为它们使用的是本地渲染引擎,不做 HTML 过滤
  • Hugo/Jekyll 等静态站点生成器通常保留完整的 HTML,所以所有写法都可以用

怎么选:快速决策指南

说了这么多方法,直接帮你简化选择:

如果你在 GitHub / GitLab 写 README:→ 用 <p align="center"><div align="center">,不用 style

如果你用 Typora / Obsidian 写本地笔记:→ 用 <div style="text-align: center;">,规范且不受限

如果你用 Hugo / Jekyll / Docusaurus 建站:→ 同上,用 CSS 方案,和你的站点主题样式配合最灵活

如果你需要在 CSDN 发文章:→ 图片可以直接用 ![描述](图片.png#pic_center),文本用 <center> 即可

如果你不确定会在哪个平台渲染:<div align="center"> 是兼容性最广的折中选择

说实话,Markdown 居中这事儿没几行代码,但坑全在"哪个平台支持哪种写法"上。记住一条就够了:GitHub 用 align,其他用 style,别碰 <span>

常见问题

Markdown 原生能不能居中?

不能。Markdown 规范中没有文本对齐的语法。所有居中方案本质上都是嵌入 HTML。这不是某个渲染器的 bug,而是 Markdown 的设计哲学——它关注内容结构而非排版样式。

为什么 <center> 不好但我还是经常看到?

两个原因:一是它写起来最简单,只有一行;二是浏览器至今仍然支持它。"废弃"在 HTML 世界里并不意味着"立刻失效",只是不推荐新项目使用。短期内你完全可以用它,但长期维护的文档建议迁移到 CSS 方案。

多行文字怎么一起居中?

<div> 包裹多行内容:

<div align="center">

第一行文字

第二行文字

第三行文字

</div>

注意每行之间保持空行,否则某些渲染器会把多行合并为一行。

标题可以居中吗?

可以,用 <h1><h6> 的 HTML 标签加 align 属性:

<h2 align="center">居中的标题</h2>

但不要在 <div> 内部再用 Markdown 的 ## 语法写标题,某些渲染器不会在 HTML 标签内部解析 Markdown 语法。

参考来源

  1. Markdown Guide — Hacks — 官方指南中关于居中的 hack 方法说明
  2. GitHub Docs — Markdown 中的 HTML — GitHub 对 HTML 过滤策略的官方说明
  3. MDN Web Docs — <center> 元素 — 废弃标签的官方说明
  4. Stack Overflow — Markdown native text alignment — 社区验证的多方案对比
  5. CommonMark Spec — Markdown 规范中关于 HTML 嵌入的说明