简介

Markdown 是一种轻量级标记语言,使用非常广泛。目前为止,本博客中的内容全部使用 Markdown 书写。

Markdown 于2004年由约翰·格鲁伯(英语:John Gruber)创造。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”,其中最重要的设计是可读性,也就是说这个语言应该要能直接在字面上被阅读,而不用被一些格式化指令标记 (比如 HTML)。

Markdown 文件会被被最终解析成HTML(或XHTML)文本。因此在Markdown直接写 HTML 也是可以的。

基本语法

段落和换行

Markdown 段落会转换成HTML中的\

标签。一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行。

这是一个段落

这是另一个段落

相应的HTML文本是

<p>这是一个段落</p>
<p>这是另一个段落</p>

另外,在显示上看起来像是空的,便会被视为空行。例如,若某一行只包含空格或制表符,则该行也会被视为空行。
在文本中输入的换行符会被markdown忽略。如果想强制换行,可以在换行符前插入至少两个空格。但是并不推荐这么做,因为这种方式在转换成HTML时只是在行尾插入了一个\
标签。

这是一个 
段落

注意第一行末尾有两个空格,最终会转换成:

<p>这是一个<br />段落</p>

由于Markdown是兼容HTML的,因此直接插入\
标签也能达到换行的效果,同样,我们不推荐这种换行方法。

这是一个<br />
段落

会转换成:

<p>这是一个<br />段落</p>

MarkDown不负责缩进,因此在段首输入空格或制表符达不到预期的效果,但是可以通过以下两种方式使其看起来有缩进。

  1. 输入4个HTML的实体标记\&nbsn;。转换成HTML仍然会保留这一实体标记,其表现为空格

  2. 输入两个中文全角空格。转换成HTML时会当成中文字符处理。

实现段首缩进最好的方式是在样式中处理。

#css file
p{
text-indent: 2em; /*首行缩进*/
}

标题

Markdown有两种方式实现标题语法,类 Setext 和类 atx 形式。

在标题内容前输入特定数量的井号(‘#’)来实现对应级别的HTML样式的标题(HTML提供六级标题),这是类 Atx 形式。例如:

# 一级标题,转换成h1标签

#### 四级标题,转换成h4标签

另一种类 Setext形式的语法是,用=实现最高阶标题,用-实现第二阶标题。任何数量的 = 和 - 其效果都是一样的,因此这种语法只能表达两级标题。

一级标题
===================

二级标题
--------------------

列表

Markdown 支持有序列表和无序列表。

无序列表使用星号、加号或是减号作为列表标记:

* 文本1
* 文本2

等同于:

- 文本1
- 文本2

有序列表则使用数字接着一个英文句点,和文本之间需要有一个空格:

1. 文本1
2. 文本2
3. 文本3

在列表标记上使用的数字并不会影响输出的 HTML 结果,因此上面的代码也可以写成这样:

1. 文本1
3. 文本2
1. 文本3

在转换成HTML后,都是

<ol>
<li>文本1</li>
<li>文本2</li>
<li>文本3</li>
</ol>

有序列表标记上的第一个数字意味着列表的起始序号,之后写什么数字无关紧要。例如:

14. 文本1
3. 文本2
1. 文本3

会转换成HTML标记

<ol start='14'>
<li>文本1</li>
<li>文本2</li>
<li>文本3</li>
</ol>

列表子项,要以一个制表符或者4个空格缩进来实现。有序和无序列表可以互相嵌套

1. 文本1
    + 子项1
    + 子项2
        1. 子子项1
        1. 子子项2
2. 文本2
3. 文本3

列表项目标记通常是放在最左边,但是其实也可以缩进,最多3个空格,因为4格缩进就将文本变成代码区块了(这个后面再讲)。

区块引用

文章中引用了他人的文字,为便于区分需要使用区块引用标记。在引用的文字前面加上 > 符号,并且和正文之间保留一个空格。

>白日依山尽,黄河入海流。欲穷千里目,更上一层楼。

文本友好几段时,需要在每个段落前都加上 > 符号。

区块引用可以嵌套(例如:引用内的引用),只要根据层次加上不同数量的 > 符号。

>只是一段引用
>>这是引用内的引用

区块引用中也可以使用其他Markdown标记,比如列表,标题等等。

> ## 登鹳雀楼
> 白日依山尽,黄河入海流。  
> 欲穷千里目,更上一层楼。

代码区块

如果你在写一篇跟程序相关的文章(比如我这篇),需要把代码按照原来的样子显示,应该怎么做呢?
很简单,只要缩进 4 个空格或是 1 个制表符就可以,例如:

这是普通段落文本
    这是代码区块

Markdown 会用 \

 和 \ 标签来把代码区块包起来,转换成

<p>这是普通段落文本</p>
<pre><code>这是代码区块。
</code></pre>

注意,代码区块要和前后文本都保持一个空行的距离。
在代码区块中, & 、 < 和 > 会自动转成 HTML 实体,也就是说,你不必考虑代码区块中是什么文本,在转换成HTML之后,它总是能显示原来的样子。例如:

<div class="footer">
        &copy; 2018
</div>

会转换成

<pre><code>&lt;div class="footer"&gt;
&amp;copy; 2018
&lt;/div&gt;
</code></pre>

链接

写作总常常用到链接,比如,参考了某篇文章,需要用链接跳转。
Markdown 支持两种形式的链接语法: 行内式和参考式两种形式。不管是哪一种,链接文字都是用 [方括号] 来标记,其语法是[显示文本](链接地址)

行内式示例如下。

我参考了文章[这是链接](http://www.example.com)

转换成:

<p>我参考了文章<a href="http://www.example.com" target="_blank">这是链接</a></p>

参考式的链接是在链接文字的括号后面再接上另一个方括号,而在第二个方括号里面要填入用以辨识链接的标记:

这里是一个 [链接][id] 以供参考.

接着,在文件的任意处,你可以把这个标记的链接内容定义出来:

[id]: http://example.com/  "链接的title"

使用参考式链接会使文章更容易阅读,不会因过多的链接而影响文章本身的内容。

强调

Markdown 使用星号(*)和下划线线(_)作为标记强调字词的符号,被 或 _ 包围的字词会被转成用 \ 标签包围,用两个 或 _ 包起来的话,则会被转成 \,例如:

*强调一*
_强调二_
**特殊强调一**
__特殊强调二__

会转换成

<em>强调一</em>
<em>强调二</em>
<strong>特殊强调一</strong>
<strong>特殊强调二</strong>

图片

插入图片和插入链接非常相似,唯一的区别就是再中括号前面加入感叹号”!”。其语法是![](图片链接地址)
图片同样也支持行内式和参考式,例如

![Alt text](http://www.example.com/path/to/img.jpg)
![Alt text](/path/to/img.jpg "Optional title")

![Alt text][id]
[id]: url/to/image  "Optional title attribute"

Markdown 不能图片的宽高,如果有需要,你可以使用普通的HTML的 标签来插入图片。

反斜杠

Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号。比如,你想插入星号,但是又不想使用强调,你可以在星号前加上反斜杠,他就会原原本本输出星号。

这就是\*Markdown*\

在Markdown中插入HTML文本,需要用反斜杠,否者会当做HTML元素。

\<input>是一个表单元素

借助反斜杠来插入普通的符号包括下面这些:

\反斜杠 `反引号 *星号 _下划线 {}花括号 []方括号 ()括弧 #井字号 +加号 -减号 .英文句 !感叹号。