什么是 Markdown
很多人第一次听说 Markdown,会把它当成「网页编辑器的另一种叫法」。这一页要澄清的是:Markdown 不是编辑器,也不是排版方案,它是一套用文本符号描述文档结构的语法规则。理解这一点,你才能解释为什么同一份 .md 文件在 GitHub、VS Code 和 Obsidian 里长得不一样,却仍然算同一份文档。
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
使用简单符号(如 # * - [] ())标记标题、列表、强调、链接等,使文本既可读又可被解析为 HTML。
- 语法极简,可读性强(纯文本)。
- 易于转为 HTML/PDF/幻灯片等格式。
- 适合写文档、博客、笔记、README。
这套语法只有十来个核心符号,规则集中在一份规范里,因此学习曲线很平。更关键的是,源文件本身就已经是排好版的纯文本:不依赖任何软件就能读,可以用搜索工具查找,可以用 diff 逐行比较两个版本,也可以用 Git 追踪每一次改动。2004 年 John Gruber 定义了最初版本,2014 年各方共同制定了 CommonMark 规范,GitHub 又在 CommonMark 之上补充了表格、删除线等扩展,这套体系沿用至今。
一份源码如何变成网页
下面这段 Markdown 源码:
# 安装 Node.js
在终端执行 `npm install`,然后运行 `npm start`。
经过解析后得到的 HTML 是这样的:
<h1>安装 Node.js</h1>
<p>在终端执行 <code>npm install</code>,然后运行 <code>npm start</code>。</p>
也就是说,Markdown 只负责标出「这段文字是标题」「这段文字是代码」这类结构信息,具体长什么样由渲染器决定。你甚至可以在 Markdown 里直接写 HTML,解析器会原样保留:
这是 Markdown 段落。
<div align="center">这里是原生 HTML 块。</div>
<p>这是 Markdown 段落。</p>
<div align="center">这里是原生 HTML 块。</div>
- 各类编辑器支持(VS Code、Typora、Obsidian、Notion 等)。
- 各平台渲染存在细微差异(GitHub Flavored Markdown、CommonMark、各博客引擎扩展)。
同一份源码在不同平台上表现不一,根源在于它们启用的扩展语法并不相同:
| 方言 | 地位 | 相比基础语法多出的能力 |
|---|---|---|
| CommonMark | 通用规范基线 | 标题、列表、代码、引用等核心语法的精确行为 |
| GFM | GitHub 扩展 | 表格、删除线、任务列表、自动链接 |
| 平台方言 | 各家私有 | 数学公式、提示块、折叠区、思维导图等 |
Markdown 不等于所见即所得。 它只描述结构,不描述外观:字体、行距、主题都来自渲染器。把 Markdown 当成「直接能看的网页」会让你误判效果;反过来,认为它能表达一切排版需求,又会让你在真正需要复杂版式时硬套语法,写出难以维护的源码。
跨平台发布前先确认扩展语法。 表格、删除线、脚注都来自 CommonMark 之外的扩展,某个平台不支持时,读者看到的就是原样的 ~~文字~~。
下面三个文件里,只有一个是用 Markdown 写的。判断另外两个是什么,并说明理由。
notes.txt:内容是「标题」加一行「正文」,没有任何标记符号。doc.md:内容是# 标题,空行,再加一行「正文」。page.html:内容是<h1>标题</h1>加一段<p>正文</p>。
解题思路: 判断一个文件是不是 Markdown,要看它的结构由什么构成,而不是看扩展名。Markdown 文件用标记符号(井号、反引号、列表符号)来组织结构;纯文本没有任何标记;HTML 靠标签来组织结构。
详细步骤:
doc.md是 Markdown:井号加空格构成一级标题,空行把标题和正文分成两段,正是 Markdown 的写法。notes.txt不是 Markdown:它只是纯文本,没有任何结构标记。纯文本和 Markdown 是两回事,扩展名本身不能决定内容是不是 Markdown。page.html也不是 Markdown:它是 HTML 源码,靠<h1>、<p>这类标签组织结构。Markdown 虽然允许内嵌 HTML,所以一个.md文件里完全可能出现<h1>,但当整个文件靠 HTML 标签来组织结构时,它就是 HTML。
最终答案:
只有 doc.md 是 Markdown;notes.txt 是纯文本,page.html 是 HTML。
读完这一页,你应当能说清 Markdown 规范了什么、没规范什么,能解释它与 HTML 的分工,也能判断一份文档为什么值得用 Markdown 而不是富文本来写。下一步不妨动手写一份 README,对照着源码看看它在浏览器里变成了什么样子。
