Skip to content

超文本标记语言 (英语:Hypertext Markup Language,简称:HTML ) 是一种用来结构化 Web 网页及其内容的标记语言。网页内容可以是:一组段落、一个重点信息列表、也可以含有图片和数据表。

HTML 不是一门编程语言,而是一种用于定义内容结构的标记语言。HTML 由一系列的元素组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈现或者工作。 一对标签可以为一段文字或者一张图片添加超链接,将文字设置为斜体,改变字号,等等。 例如,键入下面一行内容:

html
我的猫非常脾气暴躁

可以将这行文字封装成一个段落元素来使其在单独一行呈现:

html
<p>我的猫非常脾气暴躁</p>

元素

让我们深入探索一下这个段落元素:

段落元素

这个元素的主要部分有:

  1. 开始标签:包含元素的名称(本例为 p),被大于号、小于号所包围。表示元素从这里开始或者开始起作用 —— 在本例中即段落由此开始。
  2. 结束标签:与开始标签相似,只是其在元素名之前包含了一个斜杠。这表示着元素的结尾 —— 在本例中即段落在此结束。初学者常常会犯忘记包含结束标签的错误,这可能会产生一些奇怪的结果。
  3. 内容:元素的内容,本例中就是所输入的文本本身。
  4. 元素:开始标签、结束标签与内容相结合,便是一个完整的元素。

元素也可以有属性

元素属性

属性包含了关于元素的一些额外信息,这些信息本身不应显现在内容中。本例中,class 是属性名称,editor-note 是属性的值 。class 属性可为元素提供一个标识名称,以便进一步为元素指定样式或进行其他操作时使用。

属性应该包含:

  1. 在属性与元素名称(或上一个属性,如果有超过一个属性的话)之间的空格符;
  2. 属性的名称,并接上一个等号;
  3. 由引号所包围的属性值。

TIP

注:不包含 ASCII 空格(以及 ", ', `, =, <, > )的简单属性值可以不使用引号,但是建议将所有属性值用引号括起来,这样的代码一致性更佳,更易于阅读。

块级元素

块级元素占据其父元素(容器)的整个水平空间,垂直空间等于其内容高度,因此创建了一个「块」。

块级元素只能出现在 <body> 元素内。一般块级元素可以包含行内元素和其他块级元素,这种结构上的包含继承区别可以使块级元素创建比行内元素更「大型」的结构。

html
<!-- p 为块级元素 -->
<p>This paragraph is a block-level element; its background has been colored to display the paragraph's parent element.</p>

块级元素列表:

  • <address>: 联系方式
  • <article>: 文章内容
  • <aside>: 伴随内容
  • <blockquote>: 引用内容
  • <dd>: 定义列表中定义条目描述
  • <div>: 文档分区
  • <dl>: 定义列表
  • <fieldset>: 表单元素分组
  • <figcaption>: 图文信息组
  • <footer>: 区段尾或页尾
  • <form>: 表单
  • <h1>, <h2>, <h3>, <h4>, <h5>, <h6>: 标题级别 1-6
  • <header>: 区段头或页头
  • <hgroup>: 标题组
  • <hr>: 水平分割线
  • <ol>: 有序列表
  • <p>: 行
  • <pre>: 预格式化文本
  • <section>: 一个页面区段
  • <table>: 表格
  • <ul>: 无序列表

行内元素

行内元素只占据它对应标签的边框所包含的空间。一般情况下,行内元素只能包含数据和其他行内元素。默认情况下,行内元素不会以新行开始,而块级元素会新起一行。

html
<!-- span 为行内元素 -->
<p>This <span>span</span> is an inline element; its background has been colored to display both the beginning and end of the inline element's influence</p>

行内元素列表:

  • b, big, i, small, tt
  • abbr, acronym, cite, code, dfn, em, kbd, strong, samp, var
  • a, bdo, br, img, map, object, q, script, span, sub, sup
  • button, input, label, select, textarea

嵌套元素

也可以将一个元素置于其他元素之中 —— 称作嵌套。要表明猫咪非常暴躁,可以将「暴躁」用 <strong> 元素包围,「爆」字将突出显示:

html
<p>我的猫咪脾气<strong>暴躁</strong>:)</p>

必须保证元素嵌套次序正确:本例首先使用 <p> 标签,然后是 <strong> 标签,因此要先结束 <strong> 标签,最后再结束 <p> 标签。这样是不对的:

html
<p>我的猫咪脾气<strong>暴躁</p></strong>

元素必须正确地开始和结束,才能清楚地显示出正确的嵌套层次。否则浏览器就得自己猜测,虽然它会竭尽全力,但很大程度不会给你期望的结果。所以一定要避免!

空元素

不包含任何内容的元素称为空元素。比如 <img> 元素:

html
<img src="images/firefox-icon.png" alt="测试图片">

本元素包含两个属性,但是并没有 </img> 结束标签,元素里也没有内容。这是因为图像元素不需要通过内容来产生效果,它的作用是向其所在的位置嵌入一个图像。

文档

以上介绍了一些基本的 HTML 元素,但孤木不成林。现在来看看单个元素如何彼此协同构成一个完整的 HTML 页面:

html
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>测试页面</title>
    </head>
    <body>
        <img src="images/firefox-icon.png" alt="测试图片">
    </body>
</html>

这里有:

  • <!DOCTYPE html>: 文档类型。混沌初分,HTML 尚在襁褓(大约是 1991/92 年)之时,DOCTYPE 用来链接一些 HTML 编写守则,比如自动查错之类。DOCTYPE 在当今作用有限,仅用于保证文档正常读取。现在知道这些就足够了。
  • <html></html>: <html> 元素。该元素包含整个页面的内容,也称作根元素。
  • <head></head>: <head> 元素。该元素的内容对用户不可见,其中包含例如面向搜索引擎的搜索关键字(keywords)、页面描述、CSS 样式表和字符编码声明等。
  • <meta charset="utf-8">: 该元素指定文档使用 UTF-8 字符编码 ,UTF-8 包括绝大多数人类已知语言的字符。基本上 UTF-8 可以处理任何文本内容,还可以避免以后出现某些问题,没有理由再选用其他编码。
  • <title></title>: <title> 元素。该元素设置页面的标题,显示在浏览器标签页上,也作为收藏网页的描述文字。
  • <body></body>: <body> 元素。该元素包含期望让用户在访问页面时看到的内容,包括文本、图像、视频、游戏、可播放的音轨或其他内容。

图像

重温一下 <img> 元素:

html
<img src="images/firefox-icon.png" alt="测试图片">

像之前所讲,该元素通过包含图像文件路径的地址属性 src,可在所在位置嵌入图像。

该元素还包括一个替换文字属性 alt,是图像的描述内容,用于当图像不能被用户看见时显示,不可见的原因可能是:

  1. 用户有视觉障碍。视障用户可以使用屏幕阅读器来朗读 alt 属性的内容。
  2. 有些错误使图像无法显示。可以试着故意将 src 属性里的路径改错。保存并刷新页面就可以在图像位置看到: 测试图片

alt 属性的关键字即「描述文本」。alt 文本应向用户完整地传递图像要表达的意思。用「测试图片」来描述 Firefox 标志并不合适,修改成「Firefox 标志:一只盘旋在地球上的火狐」就好多了。

可以试着为图像编写一些更好的 alt 文本。

TIP

注:更多信息请参阅 无障碍访问

链接

链接非常重要 — 它们赋予 Web 网络属性。要植入一个链接,我们需要使用一个简单的元素 — <a>a 是「anchor」(锚)的缩写。要将一些文本添加到链接中,只需如下几步:

  1. 选择一些文本。比如「Mozilla 宣言」。
  2. 将文本包含在 <a> 元素内,就像这样:
    html
    <a>Mozilla 宣言</a>
  3. 为此 <a> 元素添加一个 href 属性,就像这样:
    html
    <a href="">Mozilla 宣言</a>
  4. 把属性的值设置为所需网址:
    html
    <a href="https://www.mozilla.org/zh-CN/about/manifesto/">Mozilla 宣言</a>

如果网址开始部分省略了 https:// 或者 http://,可能会得到错误的结果。在完成一个链接后,可以试着点击它来确保指向正确。

TIP

href 这个名字可能开始看起来有点令人费解,代表超文本引用(hypertext reference)。

标记文本

本段包含了一些最常用的文本标记 HTML 元素。

标题

标题元素可用于指定内容的标题和子标题。就像一本书的书名、每章的大标题、小标题,等。HTML 文档也是一样。HTML 包括六个级别的标题, <h1><h6>,一般最多用到 3-4 级标题。

html
<h1>主标题</h1>
<h2>顶层标题</h2>
<h3>子标题</h3>
<h4>次子标题</h4>

TIP

注:你可以看到第一级标题是有隐式的主题样式。不要使用标题元素来加大、加粗字体,因为标题对于 无障碍访问搜索引擎优化 等问题非常有意义。要保持页面结构清晰,标题整洁,不要发生标题级别跳跃。

段落

如上文所讲,<p> 元素是用来指定段落的。通常用于指定常规的文本内容:

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

列表

Web 上的许多内容都是列表,HTML 有一些特别的列表元素。标记列表通常包括至少两个元素。最常用的列表类型为:

  1. 无序列表Unordered List,无序列表中项目的顺序并不重要,就像购物列表。用一个 <ul> 元素包围。
  2. 有序列表Ordered List,有序列表中项目的顺序很重要,就像烹调指南。用一个 <ol> 元素包围。

列表的每个项目用一个列表项目(List Item)元素 <li> 包围。

比如,要将下面的段落片段改成一个列表:

html
<p>Mozilla 是一个全球社区,这里聚集着来自五湖四海的技术人员、思考者和建造者,我们致力于……</p>

可以这样更改标记:

html
<p>Mozilla 是一个全球社区,这里聚集着来自五湖四海的</p>

<ul>
    <li>技术人员</li>
    <li>思考者</li>
    <li>建造者</li>
</ul>

<p>我们致力于……</p>

标签速查表

标签描述版本属性
<!--...-->定义注释4/5none
<!DOCTYPE>定义文档类型4/5none
<a>定义超链接,用于从一个页面链接到另一个页面。4/5href | hreflang | media | ping | rel | target | type
<abbr>定义缩写4/5全局属性
<acronym>定义首字母缩写4-
<address>定义文档作者或拥有者的联系信息 .4/5全局属性
<applet>定义嵌入的 applet4-
<area>定义图像映射内部的区域(图像映射指的是带有可点击区域的图像)。4/5alt | coords | href | hreflang | media | ping | rel | shape | target | type
<article>定义独立的内容5全局属性
<aside>定义页面内容之外的内容5全局属性
<audio>定义声音,比如音乐或其他音频流。5autobuffer | autoplay | controls | loop | src
<b> 定义粗体文本 , 用于强调某些文本4/5全局属性
<base>定义页面上的所有链接规定默认地址或默认目标4/5href | target
<basefont>定义文档中所有文本的默认颜色、大小和字体4-
<bb>定义文本的文本方向,使其脱离其周围文本的方向设置。5type
<bdi>指的是 bidi 隔离, 允许您设置一段文本,使其脱离其父元素的文本方向设置 .5dir
<bdo>定义文本显示的方向。4/5dir
<big>定义大号文本。4-
<blockquote>定义摘自另一个源的块引用 。4/5cite
<body>定义文档的主体 。5全局属性
<br>插入换行符。4/5全局属性
<button>定义按钮。4/5autofocus | disabled | form | formaction | formenctype | formme-thod | formnovalidate | formtarget | name | type | value
<canvas>定义图形,比如图表和其他图像5height | width
<caption>定义表格标题。4/5全局属性
<center>定义居中的文本。4-
<cite>定义作品(比如书籍、歌曲、电影、电视节目、绘画、雕塑等等)的标题。4/5全局属性
<code>定义计算机代码文本。4/5全局属性
<col>定义为表格中的一个或多个列定义属性值。 。4/5span
<colgroup>定义对表格中的列进行组合,以便对其进行格式化。4/5span
<command>定义命令按钮。5checked | default | disabled | hidden | icon | label | radiogroup | type
<datagrid>定义可选数据的列表。 datagrid 作为树列表来显示。5disabled | multipe
<datalist>定义下拉列表。 请与 input 元素配合使用该元素,来定义 input 可能的值。5全局属性
<dd>定义一个定义列表中对项目的描述 。4/5全局属性
<del>定义删除文本。4/5cite | datetime
<details>定义描述文档或文档某个部分的细节。5open
<dialog>定义对话,比如交谈5全局属性
<dir>定义目录列表。4-
<div>定义文档中的一个部分。4/5全局属性
<dfn>定义一个定义项目。4/5title
<dl>定义一个定义列表 .4/5全局属性
<dt>定义一个定义列表中的一个项目。4/5全局属性
<em>呈现为被强调的文本。4/5全局属性
<embed>定义嵌入的内容,比如插件5height | src | type | width
<fieldset>定义用于从逻辑上将表单中的元素组合起来。4/5disabled | form | name
标签描述版本属性
<figcaption>定义 fiqure 元素的标题(caption)。5全局属性
<figure>规定独立的流内容(图像、图表、照片、代码等等)。5全局属性
<font>规定文本的字体、大小和颜色。4-
<footer>定义 section 或 document 的页脚。5全局属性
<form>用于创建供用户输入的 HTML 表单4/5action | date | replace | accept | accept-charset | enctype | method | target
<frame>定义子窗口(框架)4-
<frameset>定义框架集。4-
<h1> to <h6>定义标题。<h1> 定义最大的标题。<h6> 定义最小的标题4/5全局属性
<head>所有头部元素的容器。位于 <head> 内部的元素可以包含脚本、指引浏览器找到样式表、提供元信息,等等。4/5
<header>定义文档的页眉(介绍信息)。5全局属性
<hgroup>用于对网页或区段(section)的标题进行组合。4/5全局属性
<hr>水平线,它应该定义内容中的主题变化4/5全局属性
<html>告知浏览器这是一个 HTML 文档。4/5manifest
<i> 呈现斜体的文本。4/5全局属性
<iframe>创建包含另一个文档的行内框架。4/5src | name | sandbox | seamless | width | height
<img>定义 HTML 页面中的图像。4/5alt | src | height | ismap | usemap | width
<input>规定用户可输入数据的输入字段。4/5accept | alt | auto-complete | autofocus | checked | disabled | from | formaction | formenctype | formme-thod | formnovalidate | formtarget | height | list | max | maxiength | min | multipe | name | pattern | placeholder | readonly | required | size | src | step | type | value | width
<ins>定义文档的其余部分之外的插入文本。4/5cite | datetime
<isindex>定义单行的输入域。4-
<keygen>规定用于表单的密钥对生成器字段。5autofocus | challenge | disabled | form | keytype | name
<kbd>定义键盘文本。它表示文本是从键盘上键入的。它经常用在与计算机相关的文档或手册中。4/5全局属性
<label>为 input 元素定义标签(label)4/5for | form
<legend>为以下元素定义标题(caption):<fieldset><figure><details>4/5全局属性
<li>定义列表项,有序列表和无序列表中都使用 <li> 标签。4/5value
<link>定义文档与外部资源之间的关系。 大多数时候都用来连接样式表。4/5href | rel | media | hreflang | type | sizes
<mark>定义带有记号的文本。请在需要突出显示文本时使用 <m> 标签5全局属性
<map>定义客户端图像映射。图像映射指的是带有可点击区域的图像。4/5label | type
<menu>定义菜单列表。当希望列出表单控件时使用该标签。5autosubmit | compact | label | type
<meta>可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。5charset | content | http-equiv | name | scheme
<meter>定义度量衡。仅用于已知最大和最小值的度量。5high | low | max | min | optimum | value
<nav>定义导航链接的部分。5全局属性
<noframes>向浏览器显示无法处理框架的提示文本。4-
<noscript>定义在脚本未被执行时的替代内容(文本)。4/5
标签描述版本属性
<object>定义一个嵌入的对象。4/5data | height | type | usemap | width | object
<ol>定义有序列表。4/5compact | start | reversed
<optgroup>定义选项组。此元素允许您组合选项。当您使用一个长的选项列表时,对相关的选项进行组合会使处理更加容易。4/5disabled | label
<option>定义下拉列表中的一个选项。4/5disabled | label | selected | value
<output>定义不同类型的输出,比如脚本的输出。5form | for | name
<p>定义段落4/5全局属性
<param>允许您为插入 XHTML 文档的对象规定 run-time 设置,也就是说,此标签可为包含它的 <object> 标签提供参数。4/5name | value | type | valuetype
<pre>定义预格式化文本。4/5全局属性
<progress>定义运行中的进度(进程)。5max | value
<q>定义一个短的引用。4/5cite
<ruby>定义 ruby 注释。5全局属性
<rp>定义若浏览器不支持 ruby 元素显示的内容。5全局属性
<rt>义 ruby 注释的解释。5全局属性
<s>定义加删除线的文本4-
<samp>定义样本计算机代码。4/5全局属性
<script>定义脚本。4/5async | type | defer | src | charset
<section>定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分5cite
<select>创建下拉列表4/5autofocus | data | disabled | form | multiple | name
<small>将旁注 (side comments) 呈现为小型文本。4/5全局属性
<source>为媒介元素(比如 <video><audio>)定义媒介资源。5media | src | type
<span>用于对文档中的行内元素进行组合4/5全局属性
<strike>定义加删除线的文本。4-
<strong>定义重要的文本 .4/5全局属性
<style>定义 HTML 文档的样式信息。4/5media | type | scoped
<sub>定义下标文本4/5全局属性
<sup>定义上标文本。4/5全局属性
<summary>包含 details 元素的标题,"details" 元素用于描述有关文档或文档片段的详细信息。4/5全局属性
<table>定义 HTML 表格4/5全局属性
<tbody>定义表格的主体。4/5全局属性
<td>定义表格单元4/5colspan | rowspan | headers
<textarea>定义一个文本区域 (text-area) (一个多行的文本输入区域)。4/5autofocus | cols | disabled | form | name | feadonly | required | required | rows | maxlength | placeholder | wrap
<tfoot>定义表格的页脚(脚注)4/5全局属性
<th>定义 HTML 表格中的表头单元格。4/5colspan | rowspan | scope
<thead>定义表格的表头。4/5全局属性
<time>定义公历的时间(24 小时制)或日期,时间和时区偏移是可选的。5datetime
<title>定义文档的标题4
<tr>定义表格中的行。4/5全局属性
<track>为诸如 video 元素之类的媒介规定外部文本轨道。5default | kind | label | src | srclang
<tt>定义打字机文本。4-
<u>定义下划线文本 。4-
<ul>定义无序列表。4/5全局属性
<var>定义变量。4/5全局属性
<video>定义视频,比如电影片段或其他视频流。5src | poster | autobuffer | autoplay | loop | controls | width | height
<xmp>定义预格式文本。4-