Markdown基础语法
简介
Markdown 是一种轻量级标记语言,于2004年由约翰·格鲁伯(英语:John Gruber)创造。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”, 其中最重要的设计是可读性,也就是说这个语言应该要能直接在字面上被阅读,而不用被一些格式化指令标记 (比如 HTML)。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText, 这其中有一部分是在电子邮件中已有的纯文本标记语言。
Markdown文件会被被最终解析成HTML(或XHTML)文本。实现一个markdown解释引擎并不困难,但这里并不讨论。
基本语法
段落和换行
Markdown 段落会转换成HTML中的<p>标签。一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行。
这是一个段落
这是另一个段落
相应的HTML文本是
<p>这是一个段落</p>
<p>这是另一个段落</p>
另外,在显示上看起来像是空的,便会被视为空行。例如,若某一行只包含空格或制表符,则该行也会被视为空行。
在文本中输入的换行符会被markdown忽略。如果想强制换行,可以在换行符前插入至少两个空格。但是并不推荐这么做,因为这种方式在转换成HTML时只是在行尾插入了一个<br />标签。
这是一个
段落
注意第一行末尾有两个空格,最终会转换成:
<p>这是一个<br />段落</p>
由于Markdown是兼容HTML的,因此直接插入<br /> 标签也能达到换行的效果,同样,我们不推荐这种换行方法。
这是一个<br />
段落
会转换成:
<p>这是一个<br />段落</p>
MarkDown不负责缩进,因此在段首输入空格或制表符达不到预期的效果,但是可以通过以下两种方式使其看起来有缩进。
-
输入4个HTML的实体标记&nbsn;。转换成HTML仍然会保留这一实体标记,其表现为空格
-
输入两个中文全角空格。转换成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 会用 <pre> 和 <code> 标签来把代码区块包起来,转换成
<p>这是普通段落文本</p>
<pre><code>这是代码区块。
</code></pre>
注意,代码区块要和前后文本都保持一个空行的距离。
在代码区块中, & 、 < 和 > 会自动转成 HTML 实体,也就是说,你不必考虑代码区块中是什么文本,在转换成HTML之后,它总是能显示原来的样子。例如:
<div class="footer">
© 2018
</div>
会转换成
<pre><code><div class="footer">
&copy; 2018
</div>
</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> 标签包围,用两个 * 或 _ 包起来的话,则会被转成 <strong>,例如:
*强调一*
_强调二_
**特殊强调一**
__特殊强调二__
会转换成
<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>是一个表单元素
借助反斜杠来插入普通的符号包括下面这些:
反斜杠 `反引号 *星号 _下划线 {}花括号 []方括号 ()括弧 #井字号 +加号 -减号 .英文句 !感叹号。