快速开始
HTML
超文本标记语言(HyperText Markup Language, HTML)是一种用于创建网页的标记语言。
HTML 不是一个编程语言,而是一个用于定义文档内容结构的标记语言。由于它不仅能插入普通的文本,还可以插入图片、音频、视频、超链接等内容,因此被称为超文本标记语言。
比如,对于一段文字,可以如下进行表示:
<p>Neymar is one of the best footballers dribbling.</p>
p 元素
p 即为 paragraphs 的缩写,表示段落元素。
HTML 元素语法
HTML 文档由元素和文本组成,例如在上述的例子中:
<p>Neymar is one of the best footballers dribbling.</p>
这个 <p> 元素由开始标签 <p>、内容(content)和结束标签 </p> 组成。
元素
在 HTML 中,元素由三个部分组成:
- 开始标签(Opening tag):包含元素的名称(本例为 p),被 
<、>所包围。开头标签标志着元素开始或开始生效的地方。 - 内容(Content):元素的内容,本例中就是段落的文本。
 - 结束标签(Closing tag):与开始标签相似,只是其在元素名之前包含了一个 
/。这标志着该元素的结束。 
注意
没有包含关闭标签会产生奇怪的结果。
提示
某些情况下一些标签可以被省略,详见 optional-tags
块级元素和内联元素
块级元素在页面中以块的形式展现。一个块级元素出现在它前面的内容之后的新行上。任何跟在块级元素后面的内容也会出现在新的行上。
块级元素通常是页面上的结构元素。例如,一个块级元素可能代表标题、段落、列表、导航菜单或页脚。
一个块级元素不会嵌套在一个内联元素里面,但它可能嵌套在另一个块级元素里面。
内联元素通常出现在块级元素中并环绕文档内容的一小部分,而不是一整个段落或者一组内容。内联元素不会导致文本换行。它通常与文本一起使用,例如,<a> 元素创建一个超链接,<em> 和 <strong> 等元素创建强调。
提示
HTML5 重新定义了元素的类别:见 元素内容分类。尽管这些新的定义更精确,但却比「块级元素」和「内联元素」更难理解。
在这篇文章中提到的「块」和「内联」,不应该与 CSS 盒子的类型中的同名术语相混淆。尽管它们默认是相关的,但改变 CSS 显示类型并不会改变元素的分类,也不会影响它可以包含和被包含于哪些元素。防止这种混淆也是 HTML5 摒弃这些术语的原因之一。
元素嵌套
元素可以进行嵌套,比如:
<p>Neymar is one of the best footballers <strong>dribbling</strong>.</p>
空元素
不是所有的元素都拥有开始标签、内容合结束标签。一些元素只有一个标签,用来在此元素的位置插入/嵌入一些东西,这些元素称为空元素。
<img width="50px" src="/blog/assets/image/frontend/basic/html/002/avatar.jpg" />
注
HTML 中,无需在一个空元素的标签末尾添加 /,例如 <img src="" alt="" />。
然而,当你希望你的 HTML 是有效的 XML 时,这也是一种有效的语法。
属性
在上述例子中,元素中包含了属性,用来控制元素的工作方式。
<img width="50px" src="/assets/image/frontend/basic/html/002/avatar.jpg" />
属性被放置在开始标签,并由一组被 = 分开的 name 和 value 组成,通常情况下用 "" 包裹 value。
属性与元素名称之间包含一个空格,如果有多个属性,属性之间由空格隔开。
提示
建议始终添加引号——这样可以避免很多问题,并且使代码更易读。
常用属性
以下属性使用于所有元素。
| 属性 | 描述 | 
|---|---|
| id | 定义元素唯一 id | 
| class | 定义一个或多个类名 | 
| style | 定义元素的样式 | 
| title | 描述元素的额外信息 | 
布尔属性
一般情况下,属性值必须由 "" 引用,但如果该属性值为空字符串,则可以完全省略该值及 =。
这种情况下,将这些属性称为布尔属性。
例如,考虑 disabled 属性,你可以将其分配给表单输入元素。用它来禁用表单输入元素,这样用户就不能输入了。被禁用的元素通常有一个灰色的外观。
<input disabled />
HTML 文档结构
一个基本的 HTML 文档如下所示:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>Sample page</h1>
    <p>This is a <a href="">simple</a> sample.</p>
    <!-- this is a comment -->
  </body>
</html>
其中:
<!DOCTYPE html>用于声明该文档使用 HTML5 标准。<html>标签表示 HTML 文档的开始。<head>标签包含了网页的元信息,如标题、样式表和脚本等。<title>标签用于定义网页的标题,显示在浏览器的标题栏中。<body>标签包含了网页的主要内容。<!-- -->代表文档注释内容。
下面将介绍 HTML 文档结构中较为复杂的元素。
DOCTYPE
在 HTML 中,每个 HTML 文档必须以 DOCTYPE 开头,它的目的在于告诉浏览器应该以什么样的文档类型定义(Document Type Definition, DTD)来解析文档。
DTD
DTD:文档类型定义,是一套关于标记符的语法规则。
在 HTML5 以前,HTML 都是基于标准通用标记语言(Standard Generalized Markup Language,SGML)来实现的,而 SGML 使用 DTD 来定义不同版本的语法。
详情请见 DOCTYPE
<html> 元素
<html> 元素表示一个 HTML 文档的根(顶级元素),所以也被称为根元素。
W3C 标准建议为 <html> 元素增加 lang 属性,作用在于:
- 帮助语音合成工具确定要使用的发音;
 - 帮助翻译工具确定要使用的翻译规则。
 
一些常用的规则:
lang="en"表示该文档的语言为英文;lang="zh-CN"表示该文档的语言为中文。
<head> 元素
<head> 元素用于规定网页的元信息,一般常见的配置:
<title>标签用于定义网页的标题。<meta charset="utf-8">用于设置网页的字符编码。
UTF-8
utf-8 字符集包含了大多数人类书面语言的字符。基本上它能识别输入的所有文本内容。
不设置或者错误设置可能会导致文档乱码。
W3C 也将 UTF-8 标记为推荐的字符编码,所以建议在任何 HTML 文件中都添加此标签。
详情请见 字符编码
HTML 注释
HTML 拥有在代码中写注释的机制。浏览器会忽略注释,有效地使注释对用户来说不可见。注释的目的是让你在代码中加入注释,以解释你的逻辑或编码。如果你在离开很久后回到一个代码库,以至于你不能完全记住它,这就非常有用。同样,当不同的人在进行修改和更新时,注释也是非常宝贵的。
为了将一段 HTML 中的内容置为注释,你需要将其用特殊的记号 包裹起来,比如:
<p>我在注释外!</p>
<!-- <p>我在注释内!</p> -->
HTML 空白
HTML 中对空格的处理有点特殊,无论在 HTML 元素的内容中使用多少空格(包括一个或多个空白字符或换行),当渲染这些代码的时候,HTML 解释器会将连续出现的空白字符减少为一个单独的空格符。
<p>狗 狗 很 呆 萌。</p>
<p>狗 狗 很 呆 萌。</p>
字符引用
在 HTML 中,字符 <、>、"、' 和 & 是特殊字符。它们是 HTML 语法自身的一部分,那么你如何将这些字符包含进你的文本中呢,比如说如果你真的想要在文本中使用符号 & 或者 <,而不想让它们被浏览器视为代码并被解释?
我们必须使用字符引用——表示字符的特殊编码,它们可以在那些情况下使用。每个字符引用以符号 & 开始,以分号;结束。
在下面的案例中,你会看到第一段是错误的,因为浏览器会认为第二个 <p> 是开始一个新的段落!第二段是正确的,因为我们用字符引用来代替了角括号 < 和 > 符号。
<p>HTML 中用</p>
<p>来定义段落元素。</p>
<p>HTML 中用 <p> 来定义段落元素</p>
下面是一些常用的字符引用
| 原义字符 | 等价字符引用 | 
|---|---|
< | < | 
> | > | 
" | " | 
' | apos | 
& | & | 
备注
不需要为任何其他符号使用实体引用,因为只要你的 HTML 的字符编码设置为 UTF-8,现代浏览器就能很好地处理实际符号。