Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
由于排版简单、格式转换方便等优点,Markdown 变得越来越流行。支持 Markdown 的编辑器也越来越多,这些编辑器大多扩展了 Markdown 的功能,如表格、脚注、内嵌 HTML 等,导致其功能不完全一致。但是,Markdown 本身的语法种类很少,只对应 HTML 标记的一小部分,这些基本语法是通用的。接下来本文就介绍一下这些基本语法。
段落和换行
一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个及以上的空行。
段落1
段落2 // 段落2和段落1之间有一个空行
段落3 // 段落3和段落2之间有一个空行
相对应的 HTML 为
<p>段落1</p><p>段落2</p><p>段落3</p>
“由一个或多个连续的文本行组成”这句话其实暗示了 Markdown 允许段落内的强迫换行。但是,在文本中输入的换行会从最终生成的结果中删除,浏览器会根据可用空间自动换行。如果想强迫换行,需要在行尾插入至少两个空格,然后换行。
段落4第一行
段落4第二行 // 第一行行尾有两个空格
相对应的 HTML 为
<p>段落4第一行<br>段落4第二行</p>
分隔线
可以在一行中用三个及以上的 *
、-
、_
来建立一个分隔线,对应 HTML 中的 <hr>
。
***
---
___
标题
可以在标题内容前输入特定数量的 #
来实现对应级别的 HTML 样式的标题。
# 一级标题 // => <h1>一级标题</h1>
## 二级标题 // => <h2>二级标题</h2>
### 三级标题 // => <h3>三级标题</h3>
#### 四级标题 // => <h4>四级标题</h4>
##### 五级标题 // => <h5>五级标题</h5>
###### 六级标题 // => <h6>六级标题</h6>
一级和二级标题还有一种写法。
一级标题
======= // 文本的下面一行为任意数量个“=”
二级标题
------- // 文本的下面一行为任意数量个“-”
列表
Markdown 支持有序列表和无序列表。无序列表使用 *
、+
或是 -
作为列表标记。有序列表使用任意一个数字接一个英文句点作为列表标记。注意使用时列表标记后要加至少一个空格或制表符。
* 无序列表项1
* 无序列表项2
* 无序列表项3 // 一个无序列表只能使用一种列表标记,不然就会输出多个无序列表
1. 有序列表项1
2. 有序列表项2
3. 有序列表项3 // 列表标记上使用的数字不会影响输出结果,不信你全部改成0试试
相对应的 HTML 为
<ul><li>无序列表项1</li><li>无序列表项2</li><li>无序列表项3</li></ul>
<ol><li>有序列表项1</li><li>有序列表项2</li><li>有序列表项3</li></ol>
如果列表项之间有一个及以上的空行,Markdown 会将列表项用 <p>
标签包起来。
* 列表项1
* 列表项2
* 列表项3 // 列表项3和列表项2之间有一个空行
相对应的 HTML 为
<ul><li>列表项1</li><li><p>列表项2</p></li><li><p>列表项3</p></li></ul>
区块引用
Markdown 标记区块引用只需要在被引用的内容段落开头加上 >
即可。你可以选择只在段落开头加一个,也可以在每行前面都加一个,效果是一样的。
> 引用段落第一行
引用段落第二行
或者
> 引用段落第一行
> 引用段落第二行
相对应的 HTML 为
<blockquote><p>引用段落第一行<br>引用段落第二行</p></blockquote>
区块引用可以嵌套。根据层次加上不同数量的 >
或者使用其他的 Markdown 语法,例如:
> > 第二层引用
> # 一级标题
> - 列表项1
> - 列表项2
链接和图片
正常链接有两种书写方式,分别叫做行内链接和参考链接,当然效果是一样的。
[链接文本](链接地址 "提示信息")
或者
[链接文本][标记]
[标记]: 链接地址 "提示信息" // 这一行可以写在文档的任意地方
相对应的HTML为
<a href="链接地址" title="提示信息">链接文本</a>
另外,用尖括号包起来的内容会被 Markdown 视为自动链接。
<https://www.youkuaiyun.com/> // => <a href="https://www.youkuaiyun.com/">https://www.youkuaiyun.com/</a>
图片的插入方法类似于正常链接,在 !
后面接一个方括号,里面放上图片的替代文字,然后接一个括号,里面是图片地址和提示信息。同样它也允许用参考式书写。

或者
![替代文本][标记]
[标记]: 图片地址 "提示信息" // 这一行可以写在文档的任意地方
相对应的 HTML 为
<img src="图片地址" alt="替代文本" title="提示信息">
代码
要在 Markdown 中建立代码区块很简单,只要简单地缩进 1 个制表符就可以。一个代码区块会一直持续到没有缩进的那一行。
function sayHello () {
return 'Hello'
}
相对应的 HTML 为
<pre>
<code>function sayHello () {
return 'Hello'
}</code>
</pre>
如果要标记一小段行内代码,你可以用 `
把它包起来
`printf()` // => <code>printf()</code>
如果要在代码区段内插入`
,你可以用多个`
来开启和结束代码区段
``(`)`` // => <code>(`)</code>
`` ` `` // => <code>`</code>
`` `printf()` `` // => <code>`printf()`</code>
强调文本
Markdown 使用 *
和 _
作为标记强调文本的符号,被 *
或 _
包围的本文会被转成用 <em>
标签包围,用两个 *
或 _
包起来的话,则会被转成 <strong>
。
*强调文本* // => <em>强调文本</em>
_强调文本_ // => <em>强调文本</em>
**强调文本** // => <strong>强调文本</strong>
__强调文本__ // => <strong>强调文本</strong>
转义字符
如果你想在 Markdown 中插入一些在语法中有其它意义的字符,就需要对这些字符转义。例如:
# 这不是标题
\# 这不是标题
- 这不是列表
\- 这不是列表