我们在下载一些项目比如github项目,经常会看到.md后缀格式的文件。或者是在博客中发布一些内容时,可以使用Markdown格式发布内容,甚至在一些博客中比如typecho仅支持Markdown编辑器。
markdown.jpg

Markdown是什么呢?

md全称即markdown,.md和.markdown后缀文件一样。网上很多定义说Markdown是一种标记语言,包括百度百科上,明确定义说:“Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式”。

Markdown的语法在编译后,都会变成HTML标签,所以可以理解为Markdown就是一种轻量级的标记语言,是HTML标记语言的变种。

Markdown优点

简单、流行、B格高且使用广泛,排版功能足够使用(不足之处可用HTML、CSS弥补)。

Markdown缺点

Markdown是轻量级的标记语言,不能进行专业排版样式的编辑。所以它的缺点就是太简单,很多复杂的专业排版样式功能无法实现。

注:我却觉得这是Markdown的优点呢,如果Markdown把word的功能都实现了,那还要word干嘛呢?如果Markdown中包括了HTML所有的替代标签,又置HTML于何地呢,或者说为了简单而简单来设计一门解释语言,这样真的有必要么,不知道别人如何觉得,我觉得HTML已经非常简单了,Markdown的目标不是要取代HTML,也不是要取代Word。

Markdown的简练,不管是编译前和编译后都很适合我们阅读和理解。Markdown专注的是排版内容而不是特效,把Markdown拉到专业排版样式的角度去对比,显然是不切实际的。反而让我觉得,人们需求的苛刻,却成了Markdown的污点。

Markdown语法

标题 - h1~h6

Markdown支持两种定义标题的方式,类Setext和类atx形式。

类Setext形式是用底线的形式,利用=表示最高阶标题,-表示第二阶标题:

THis is an H1.
==============
This is an H2.
--------------

注:任何数量的=和-都是可以的。

类Atx形式则是在行首插入1到6个#,对应到标题1到6阶。

# 这是H1
## 这是H2
### 这是H3
#### 这是H4
##### 这是H5
###### 这是H6

空格、段落和换行 - &nbsp;<p><br/>

空格:如果直接在编辑器敲空格或者换行的话,markdown只显示为一个空格。想要多个空格的话,需要借助HTML的实体字符 &nbsp;,直接输入多个&nbsp;

段落:需要回车两次,编辑器换两行,才能显示为段落。即本段落和上一段内容中间,显示有一个空行(多个空行和一个空行效果是一样的)。

换行:在想要换行的地方,按下两个空格,然后再回车,即可以实现换行。如果想要换多行,就重复多次该操作,也可以使用HTML的<br />标签实现换行。

区块引用 - blockquote

Markdown标记区块引用使用类似email中用>的引用方式。

> 这是一个区块引用,这是一个区块引用。

区块引用可以嵌套使用,只需要根据层次加上不同数量的>:

> 这是一个区块引用,这是一个区块引用。
> > 这是内部引用 

无序列表 - <ul>

无序列表使用星号(*)、加号(+)和减号(-)作为列表标记。

* red
* green
* black
+ red
+ green
+ black
- red
- green
- black

注:这三种方式的效果是一样的。

无序列表可以嵌套使用。

* color
    * red
    * green
    * black

有序列表 - <ol>

有序列表使用数字接着一个英文句点。

1. red
2. green
3. black

注:在列表中使用的数字不会影响输出的HTML结果。

1. red
1. green
1. black

这段代码和上边的输出效果是一致的。

有序列表和无序列表一样,也可以嵌套使用。

代码区块 - <pre><code>

要在Markdown中建立代码区块,只需要缩进4个空格或是1个制表符就可以。

这是一个普通段落:

    这是一个代码区块

Markdown 会转换成:

<p>这是一个普通段落:</p>

<pre><code>这是一个代码区块
</code></pre>

一个代码区块会持续到没有缩进的那一行(或是文件末尾)。在代码区块里面, & 、 < 和 > 会自动转成 HTML 实体,这样的方式非常容易使用 Markdown 插入代码,只需要复制贴上,再加上缩进就可以了,剩下的 Markdown 都会自动处理。

另外一种方式建立代码区块是使用三个反引号`,并且这种方式还可以指定使用的语言,指定语言后代码会有高亮效果。

\`\`\`HTML
这是一个代码区块
\`\`\`

如果仅仅是要标记一小段行内代码,只需要用1个反引号把它包起来(`),例如:

Use the `printf()` function.

其他需要注意的地方:

如要显示一个反引号,用两个反引号包裹文档 ``

`` 文本中夹杂一个`反引号如何显示 ``

如要显示3个反引号,用<pre>标签包裹文档

\`\`\`javascript
function a(){
  var a = 1;
}
\`\`\`

分隔线 - <hr>

在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:

* * *

***

*****

- - -

---------------------------------------

着重、强调 - <em><strong>

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

*斜体*

_斜体_

**加粗**

__加粗__

***倾斜加粗***

___倾斜加粗___

删除线 - <del>

添加删除线使用两个波浪线~~

~~删除线~~

下划线 - <u>

使用两个加号+,添加下划线。或者借助HTML的<u>标签。

++下划线++
或者
<u>下划线</u>

注:尽量不要给文本加下划线,因为这会和超链的表现形式混淆,会被误以为是个超链。

高亮

添加高亮效果使用两个==

==高亮==

任务列表-方框效果

- [ ] - 表示未完成任务,会出现一个未选中的复选框。
- [x] - 表示已经完成任务,会出现一个已选中的复选框。

- [x] - 已完成任务
- [ ] - 待办任务

链接 - <a>

Markdown支持两种形式的链接语法:行内式和参考式两种形式。

不管是哪一种,链接文字都是用 [方括号] 来标记。要建立一个行内式的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,如果还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可,例如:

这是通往 [码路行者](http://www.mlxz.top "码梦人生,专注前端Web") 的链接.

[码路行者](http://www.mlxz.top) 没有title属性的链接.

网址也可以使用相对路径,比如说链接到同样主机的资源:

查看 [关于](/about/) 页面.

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

这是通往 [码路行者] [id] 的链接.

[id]: http://www.mlxz.top "码梦人生,专注前端Web"

链接内容定义的形式为:

  • 方括号(前面可以选择性地加上至多三个空格来缩进),里面输入链接文字
  • 接着一个冒号
  • 接着一个以上的空格或制表符
  • 接着链接的网址
  • 选择性地接着 title内容,可以用单引号、双引号或是括弧包着

下边这三种形式都是可以的:

[码路行者]: http://www.mlxz.top "码梦人生,专注前端Web"
[码路行者]: http://www.mlxz.top '码梦人生,专注前端Web'
[码路行者]: http://www.mlxz.top (码梦人生,专注前端Web)

网址定义只有在产生链接的时候用到,不会直接出现在文件之中。链接辨别标签可以有字母、数字、空白和标点符号,但是并不区分大小写,因此下面两个链接是一样的:

[链接文本][a]
[链接文本][A]

还可以使用隐式链接标记功能,这个功能就是省略链接标记,在链接文本后边跟上一个空的方括号。这种情形下,就相当于链接标记等同于链接文本。

这是通往[码路行者]的链接。

[码路行者]: http://www.mlxz.top "码梦人生,专注前端Web"

行内式和参考式哪个更好一些?

使用 Markdown 的参考式链接,可以让文件更像是浏览器最后产生的结果,可以把一些标记相关的元数据移到段落文字之外,可以增加链接而不让文章的阅读感觉被打断。比较下边两个示例:

这是[链接1](http://link1 "链接1"),这是[链接2](http://link2 "链接2")
这是[链接1][2],这是[链接1][3]

可以看出,参考式的链接可读性更强一些。

其实,除了行内式和参考式外,还可以在<>中直接定义链接:

<http://www.mlxz.top>

写入邮箱也是可以的:

<mlxztop@126.com>

图片 - <img>

插入图片的语法和链接几乎相同,只是在前边多了一个叹号!。也有两种形式: 行内式和参考式。

行内式的图片语法看起来像是:

![Alt 文本](/path/to/img.jpg)

![Alt 文本](/path/to/img.jpg "可选的 title内容")

一个惊叹号 !,接着一个方括号,里面放上图片的替代文字
接着一个普通括号,里面放上图片的网址,最后还可以用引号包住并加上选择性的 'title' 文字。

参考式的图片语法则长得像这样:

![Alt 文本][id]

id是图片参考的名称,图片参考的定义方式则和定义链接的形式一样:

[id]: url/to/image  "可选的 title内容"

转义 - \

有一些字符在Markdown中有特殊的意义,直接插入到文档中会被当做特殊语法来解析。如果要插入这些特殊字符,可是使用反斜杠进行转义。

\**仅表现为斜体*\*

Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:

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

表格 - <table>

表格语法比较奇特:

第一行-表头,用竖线|隔开,类似这样:| 表头1 | 表头2 | 表头3 |。

第二行-列的居中方式

  • :--- 左对齐
  • ---: 右对齐
  • :---: 居中对齐

注:至少要有一个横线。

| 表头1 | 表头2 | 表头3 | 
| -----:|------:| :-----: | 
| td1   |td2    | td3 | 

兼容HTML

Markdown和HTML的语法兼容,在Markdown中实现不了的效果都可以通过HTML的标签来实现。

Markdown 的语法种类很少,只对应HTML标记的一小部分。Markdown 语法的目标是:成为一种适用于网络的书写语言,能让文档更容易读、写和随意改。

不在 Markdown 涵盖范围之内的标签,都可以直接在文档里面用 HTML 撰写。不需要额外标注这是 HTML 或是Markdown;只要直接加标签就可以了。