Markdown 教程
这是一篇 Markdown 示例文章,用来展示如何编写 Markdown 文件。本文整合了核心语法和 GFM 扩展语法。
块级元素
段落和换行
段落
HTML 标签:<p>
一个或多个空行会分隔段落。空行是指只包含空格或制表符的行。
代码:
这一段会显示在同一个段落中。
这是第二个段落。预览:
这一段会 显示在同一个段落中。
这是第二个段落。
换行
HTML 标签:<br />
在行尾添加两个或更多空格即可换行。
代码:
这一行不会和下一行显示在同一行。预览:
这一行不会和下一行
显示在同一行。
标题
Markdown 支持两种标题写法:Setext 和 atx。
Setext
HTML 标签:<h1>、<h2>
使用任意数量的**等号(=)作为 <h1> 的下划线,使用短横线(-)**作为 <h2> 的下划线。
代码:
这是一级标题============这是二级标题------------预览:
这是一级标题
这是二级标题
atx
HTML 标签:<h1>、<h2>、<h3>、<h4>、<h5>、<h6>
在行首使用 1 到 6 个井号(#),分别对应 <h1> 到 <h6>。
代码:
# 这是一级标题## 这是二级标题###### 这是六级标题预览:
这是一级标题
这是二级标题
这是六级标题
atx 风格的标题也可以选择性地在结尾添加井号。结尾井号的数量不需要和开头井号的数量一致。
代码:
# 这是一级标题 ### 这是二级标题 ##### 这是三级标题 ######预览:
这是一级标题
这是二级标题
这是三级标题
引用块
HTML 标签:<blockquote>
Markdown 使用类似电子邮件的 > 字符来表示引用。为了获得更好的可读性,建议手动换行,并在每一行前添加 >。
代码:
> 这是一个包含两个段落的引用块。这里放第一段内容,> 可以继续换行书写,让引用保持整齐。>> 这是第二个段落。Markdown 会把它仍然解析为同一个引用块。预览:
这是一个包含两个段落的引用块。这里放第一段内容, 可以继续换行书写,让引用保持整齐。
这是第二个段落。Markdown 会把它仍然解析为同一个引用块。
Markdown 也允许偷懒,只在硬换行段落的第一行前添加 >。
代码:
> 这是一个包含两个段落的引用块。这里放第一段内容,后续行没有写 >,但仍会被视为同一个引用段落。
> 这是第二个段落。后续行同样可以省略 >。预览:
这是一个包含两个段落的引用块。这里放第一段内容, 后续行没有写 >,但仍会被视为同一个引用段落。
这是第二个段落。 后续行同样可以省略 >。
通过增加更多层级的 >,引用块可以嵌套。
代码:
> 这是第一层引用。>> > 这是嵌套引用。>> 回到第一层引用。预览:
这是第一层引用。
这是嵌套引用。
回到第一层引用。
引用块中可以包含其他 Markdown 元素,包括标题、列表和代码块。
代码:
> ## 这是一个标题。>> 1. 这是第一个列表项。> 2. 这是第二个列表项。>> 下面是一段示例代码:>> return shell_exec("echo $input | $markdown_script");预览:
这是一个标题。
- 这是第一个列表项。
- 这是第二个列表项。
下面是一段示例代码:
return shell_exec("echo $input | $markdown_script");
列表
Markdown 支持有序列表和无序列表。
无序列表
HTML 标签:<ul>
无序列表可以使用星号(*)、加号(+)或短横线(-)。
代码:
* 红色* 绿色* 蓝色预览:
- 红色
- 绿色
- 蓝色
等价于:
代码:
+ 红色+ 绿色+ 蓝色以及:
代码:
- 红色- 绿色- 蓝色有序列表
HTML 标签:<ol>
有序列表使用数字加英文句点。
代码:
1. 鸟2. 麦克海尔3. 帕里什预览:
- 鸟
- 麦克海尔
- 帕里什
如果写出类似下面的内容,可能会意外触发有序列表。
代码:
1986. 多么精彩的赛季。预览:
- 多么精彩的赛季。
可以用**反斜杠转义(\)**这个句点。
代码:
1986\. 多么精彩的赛季。预览:
1986. 多么精彩的赛季。
缩进
列表中的引用块
如果要把引用块放进列表项中,引用块的 > 分隔符需要缩进。
代码:
* 一个包含引用块的列表项:
> 这是列表项 > 里面的引用块。预览:
-
一个包含引用块的列表项:
这是列表项 里面的引用块。
列表中的代码块
如果要把代码块放进列表项中,代码块需要缩进两级,也就是 8 个空格或两个制表符。
代码:
* 一个包含代码块的列表项:
<这里放代码>预览:
-
一个包含代码块的列表项:
<这里放代码>
嵌套列表
代码:
* A * A1 * A2* B* C预览:
- A
- A1
- A2
- B
- C
代码块
HTML 标签:<pre>
将代码块的每一行至少缩进 4 个空格或 1 个制表符。
代码:
这是一个普通段落:
这是一个代码块。预览:
这是一个普通段落:
这是一个代码块。代码块会一直持续到遇见未缩进的行,或者到文章末尾为止。
在代码块中,与号(&)和**尖括号(< 和 >)**会自动转换为 HTML 实体。
代码:
<div class="footer"> © 2004 Foo Corporation </div>预览:
<div class="footer"> © 2004 Foo Corporation</div>下面的围栏代码块和语法高亮属于扩展语法。你也可以用这些方式书写代码块。
围栏代码块
只要用 ``` 包裹代码,就不需要再缩进 4 个空格。
代码:
下面是一个例子:
```function test() { console.log("注意这个函数前面的空行了吗?");}```预览:
下面是一个例子:
function test() { console.log("注意这个函数前面的空行了吗?");}语法高亮
在围栏代码块中,可以添加一个可选的语言标识符,Markdown 处理器会据此进行语法高亮。支持的语言可参考 Support Languages。
代码:
```rubyrequire 'redcarpet'markdown = Redcarpet.new("Hello World!")puts markdown.to_html```预览:
require 'redcarpet'markdown = Redcarpet.new("Hello World!")puts markdown.to_html水平分割线
HTML 标签:<hr />
单独一行放置**三个或更多短横线(-)、星号(*)或下划线(_)**即可创建水平分割线。短横线或星号之间可以包含空格。
代码:
* * *********- - ----------------------------------------___预览:
表格
HTML 标签:<table>
表格是扩展语法。
使用**竖线(|)分隔列,使用短横线(-)分隔表头,使用冒号(:)**控制对齐方式。
外侧的**竖线(|)**和对齐标记是可选的。每个表头分隔单元格至少需要 3 个分隔符。
代码:
| 左对齐 | 居中 | 右对齐 ||:-------|:----:|-------:||aaa |bbb |ccc ||ddd |eee |fff |
A | B---|---123|456
A |B--|--12|45预览:
| 左对齐 | 居中 | 右对齐 |
|---|---|---|
| aaa | bbb | ccc |
| ddd | eee | fff |
| A | B |
|---|---|
| 123 | 456 |
| A | B |
|---|---|
| 12 | 45 |
行内元素
链接
HTML 标签:<a>
Markdown 支持两种链接样式:行内式和引用式。
行内式
行内链接的格式是:[链接文本](URL "标题")
标题是可选的。
代码:
这是一个[示例](http://example.com/ "标题")行内链接。
[这个链接](http://example.net/)没有 title 属性。预览:
这是一个示例行内链接。
这个链接没有 title 属性。
如果引用的是同一服务器上的本地资源,可以使用相对路径。
代码:
详情请查看我的[关于](/about/)页面。预览:
详情请查看我的关于页面。
引用式
你可以预先定义链接引用。格式如下:[id]: URL "标题"
标题同样是可选的。引用这个链接时,格式为:[链接文本][id]
代码:
[id]: http://example.com/ "这里是可选标题"这是一个[示例][id]引用式链接。预览:
这是一个示例引用式链接。
也就是说:
- 方括号中包含链接标识符,不区分大小写,可以从左边距缩进最多三个空格。
- 后面跟一个冒号。
- 后面跟一个或多个空格,或制表符。
- 后面跟链接 URL。
- 链接 URL 可以选择用尖括号包裹。
- 最后可以选择添加链接的 title 属性,title 可以放在双引号、单引号或圆括号中。
下面三种链接定义是等价的:
代码:
[foo]: http://example.com/ "这里是可选标题"[foo]: http://example.com/ '这里是可选标题'[foo]: http://example.com/ (这里是可选标题)[foo]: <http://example.com/> "这里是可选标题"如果使用一组空方括号,链接文本本身会作为引用名称。
代码:
[Google]: http://google.com/[Google][]预览:
强调
HTML 标签:<em>、<strong>
Markdown 将**星号(*)和下划线(_)**视为强调标记。单个分隔符会生成 <em>,双分隔符会生成 <strong>。
代码:
*单星号*
_单下划线_
**双星号**
__双下划线__预览:
单星号
单下划线
双星号
双下划线
如果 * 或 _ 两侧有空格,它会被当作普通的星号或下划线。
你也可以用反斜杠进行转义。
代码:
\*这段文字被普通星号包围\*预览:
*这段文字被普通星号包围*
代码
HTML 标签:<code>
使用**反引号(`)**包裹行内代码。
代码:
使用 `printf()` 函数。预览:
使用 printf() 函数。
如果要在行内代码中包含字面量反引号,可以使用多个反引号作为开始和结束分隔符。
代码:
``这里有一个字面量反引号(`)。``预览:
这里有一个字面量反引号(`)。
包裹行内代码的反引号分隔符可以包含空格:开始分隔符后一个空格,结束分隔符前一个空格。这样可以在行内代码的开头或结尾放置字面量反引号。
代码:
代码片段中的单个反引号:`` ` ``
代码片段中的反引号包裹字符串:`` `foo` ``预览:
代码片段中的单个反引号:`
代码片段中的反引号包裹字符串:`foo`
图片
HTML 标签:<img />
Markdown 的图片语法有意设计得类似链接语法,也支持两种形式:行内式和引用式。
行内式
行内图片语法如下:
标题是可选的。
代码:

预览:


也就是说:
- 一个感叹号:
! - 后面跟一组方括号,里面是图片的 alt 替代文本。
- 后面跟一组圆括号,里面是图片 URL 或路径,以及可选的 title 属性。title 可以放在双引号或单引号中。
引用式
引用式图片语法如下:![替代文本][id]
代码:
[img id]: https://s2.loli.net/2024/08/20/5fszgXeOxmL3Wdv.webp "可选 title 属性"![替代文本][img id]预览:

删除线
HTML 标签:<del>
删除线是扩展语法。
GFM 添加了删除线文本的写法。
代码:
~~错误的文字。~~预览:
错误的文字。
杂项
自动链接
Markdown 支持一种为 URL 和邮箱地址创建“自动链接”的简写方式:只要用尖括号包住 URL 或邮箱地址即可。
代码:
<http://example.com/>
<address@example.com>预览:
GFM 会自动链接标准 URL。
代码:
https://github.com/emn178/markdown预览:
https://github.com/emn178/markdown
反斜杠转义
Markdown 允许使用反斜杠转义,生成那些原本在 Markdown 格式语法中具有特殊含义的字面字符。
代码:
\*普通星号\*预览:
*普通星号*
Markdown 为以下字符提供反斜杠转义:
代码:
\ 反斜杠` 反引号* 星号_ 下划线{} 花括号[] 方括号() 圆括号# 井号+ 加号- 减号或短横线. 英文句点! 感叹号行内 HTML
对于 Markdown 语法没有覆盖的标记,可以直接使用 HTML。你不需要添加前缀,也不需要额外的分隔符来表示自己正在从 Markdown 切换到 HTML,直接写标签即可。
代码:
这是一个普通段落。
<table> <tr> <td>Foo</td> </tr></table>
这是另一个普通段落。预览:
这是一个普通段落。
| Foo |
这是另一个普通段落。
需要注意,Markdown 格式语法不会在块级 HTML 标签内部处理。
与块级 HTML 标签不同,Markdown 语法会在行内级 HTML 标签内部处理。
代码:
<span>**会生效**</span>
<div> **不会生效**</div>预览:
会生效
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时







