前言#
在 HTML5 中推出了很多语义化的标签,所谓语义化就是标签能够对内容有所表达,比如 p 标签就是段落 paragraph 的意思。其实如果只是实现页面的效果,只使用 div 和 span 就可以做到。但是语义化的好处就是对开发者比较友好,文档的结构清晰,各部分功能一目了然,便于开发和维护。同时语义化的文档也能够对 SEO 起到更好的效果。本文来介绍一下 HTML5 中的标签。
HTML5 标签#
本文列出了所有标准化的 HTML5 元素,使用起始标签描述,按照功能分组。新网站应当只使用这里列出的元素。
符号 这个元素在 HTML5 中加入 代表该元素是在 HTML5 中新增的。另外注意,这里列出的其他元素可能在 HTML5 标准中得到了扩充或经过修改。
根元素#
| Element | Description |
|---|---|
<html> | 代表 HTML 或 XHTML 文档的根。其他所有元素必须是这个元素的子节点。 |
文档元数据#
| Element | Description |
|---|---|
<head> | 代表关于文档元数据的一个集合,包括脚本或样式表的链接或内容。 |
<title> | 定义文档的标题,将显示在浏览器的标题栏或标签页上。该元素只能包含文本,包含的标签不会被解释。 |
<base> | 定义页面上相对 URL 的基准 URL。 |
<link> | 用于链接外部资源到该文档。 |
<meta> | 定义其他 HTML 元素无法描述的元数据。 |
<style> | 用于内联 CSS。 |
脚本#
| Element | Description |
|---|---|
<script> | 定义一个内联脚本或链接到外部脚本。脚本语言是 JavaScript。 |
<noscript> | 定义当浏览器不支持脚本时显示的替代文字。 |
<template> | 这个元素在 HTML5 中加入,通过 JavaScript 在运行时实例化内容的容器。 |
章节#
| Element | Description |
|---|---|
<body> | 代表 HTML 文档的内容。在文档中只能有一个 <body> 元素。 |
<section> | 这个元素在 HTML5 中加入,定义文档中的一个章节。 |
<nav> | 这个元素在 HTML5 中加入,定义只包含导航链接的章节。 |
<article> | 这个元素在 HTML5 中加入,定义可以独立于内容其余部分的完整独立内容块。 |
<aside> | 这个元素在 HTML5 中加入,定义和页面内容关联度较低的内容——如果被删除,剩下的内容仍然很合理。 |
<h1>,<h2>,<h3>,<h4>,<h5>,<h6> | 标题元素实现了六层文档标题,<h1> 是最大的标题,<h6> 是最小的标题。标题元素简要地描述章节的主题。 |
<header> | 这个元素在 HTML5 中加入,定义页面或章节的头部。它经常包含 logo、页面标题和导航性的目录。 |
<footer> | 这个元素在 HTML5 中加入,定义页面或章节的尾部。它经常包含版权信息、法律信息链接和反馈建议用的地址。 |
<address> | 定义包含联系信息的一个章节。 |
<main> | 这个元素在 HTML5 中加入,定义文档中主要或重要的内容。 |
组织内容#
| Element | Description |
|---|---|
<p> | 定义一个段落。 |
<hr> | 代表章节、文章或其他长内容中段落之间的分隔符。 |
<pre> | 代表其内容已经预先排版过,格式应当保留 。 |
<blockquote> | 代表引用自其他来源的内容。 |
<ol> | 定义一个有序列表。 |
<ul> | 定义一个无序列表。 |
<li> | 定义列表中的一个列表项。 |
<dl> | 定义一个定义列表(一系列术语和其定义)。 |
<dt> | 代表一个由下一个 <dd> 定义的术语。 |
<dd> | 代表出现在它之前术语的定义。 |
<figure> | 这个元素在 HTML5 中加入,代表一个和文档有关的图例。 |
<figcaption> | 这个元素在 HTML5 中加入,代表一个图例的说明。 |
<div> | 代表一个通用的容器,没有特殊含义。 |
文字形式#
| Element | Description |
|---|---|
<a> | 代表一个链接到其他资源的超链接 。 |
<em> | 代表强调 文字。 |
<strong> | 代表特别重要 文字。 |
<small> | 代表注释 ,如免责声明、版权声明等,对理解文档不重要。 |
<s> | 代表不准确或不相关 的内容。 |
<cite> | 代表作品标题 。 |
<q> | 代表内联的引用 。 |
<dfn> | 代表一个术语包含在其最近祖先内容中的定义 。 |
<abbr> | 代表省略 或缩写 ,其完整内容在 title 属性中。 |
<data> | 这个元素在 HTML5 中加入,关联一个内容的机器可读的等价形式 (该元素只在 WHATWG 版本的 HTML 标准中,不在 W3C 版本的 HTML5 标准中)。 |
<time> | 这个元素在 HTML5 中加入,代表日期 和时间 值;机器可读的等价形式通过 datetime 属性指定。 |
<code> | 代表计算机代码 。 |
<var> | 代表代码中的变量 。 |
<samp> | 代表程序或电脑的输出 。 |
<kbd> | 代表用户输入 ,一般从键盘输出,但也可以代表其他输入,如语音输入。 |
<sub>,<sup> | 分别代表下标 和上标 。 |
<i> | 代表一段不同性质 的文字,如技术术语、外文短语等。 |
<b> | 代表一段需要被关注 的文字。 |
<u> | 代表一段需要下划线呈现的文本注释,如标记出拼写错误的文字等。 |
<mark> | 这个元素在 HTML5 中加入,代表一段需要被高亮的引用 文字。 |
<ruby> | 这个元素在 HTML5 中加入,代表被ruby 注释 标记的文本,如中文汉字和它的拼音。 |
<rt> | 这个元素在 HTML5 中加入,代表 ruby 注释 ,如中文拼音。 |
<rp> | 这个元素在 HTML5 中加入,代表 ruby 注释两边的额外插入文本 ,用于在不支持 ruby 注释显示的浏览器中提供友好的注释显示。 |
<bdi> | 这个元素在 HTML5 中加入,代表需要脱离父元素文本方向的一段文本。它允许嵌入一段不同或未知文本方向格式的文本。 |
<bdo> | 指定子元素的文本方向 ,显式地覆盖默认的文本方向。 |
<span> | 代表一段没有特殊含义的文本,当其他语义元素都不适合文本时候可以使用该元素。 |
<br> | 代表换行 。 |
<wbr> | 这个元素在 HTML5 中加入,代表建议换行 (Word Break Opportunity) ,当文本太长需要换行时将会在此处添加换行符。 |
编辑#
| Element | Description |
|---|---|
<ins> | 定义增加 到文档的内容。 |
<del> | 定义从文档移除 的内容。 |
嵌入内容#
| Element | Description |
|---|---|
<img> | 代表一张图片 。 |
<iframe> | 代表一个内联的框架 。 |
<embed> | 这个元素在 HTML5 中加入,代表一个嵌入 的外部资源,如应用程序或交互内容。不推荐使用 |
<object> | 代表一个外部资源 ,如图片、HTML 子文档、插件等。 |
<param> | 代表 <object> 元素所指定的插件的参数 。 |
<video> | 这个元素在 HTML5 中加入 ,表一段视频及其视频文件和字幕,并提供了播放视频的用户界面。 |
<audio> | 这个元素在 HTML5 中加入,代表一段声音 ,或音频流 。 |
<source> | 这个元素在 HTML5 中加入,为 <video> 或 <audio> 这类媒体元素指定媒体源 。 |
<track> | 这个元素在 HTML5 中加入,为 <video> 或 <audio> 这类媒体元素指定文本轨道(字幕) 。 |
<canvas> | 这个元素在 HTML5 中加入,代表位图区域 ,可以通过脚本在它上面实时呈现图形,如图表、游戏绘图等。 |
<map> | 与 <area> 元素共同定义图像映射 区域。 |
<area> | 与 <map> 元素共同定义图像映射 区域。 |
<svg> | 这个元素在 HTML5 中加入,定义一个嵌入式矢量图 。 |
<math> | 这个元素在 HTML5 中加入,定义一段数学公式 。大多数浏览器暂不支持 |
表格#
| Element | Description |
| ------------ | ------------------------------------- | --- | --- |
| <table> | 定义多维数据 。 |
| <caption> | 代表表格的标题 。 |
| <colgroup> | 代表表格中一组单列或多列 。 |
| <col> | 代表表格中的列 。 |
| <tbody> | 代表表格中一块具体数据 (表格主体)。 |
| <thead> | 代表表格中一块列标签 (表头)。 |
| <tfoot> | 代表表格中一块列摘要 (表尾)。 |
| <tr> | 代表表格中的行 。 |
| <td> | 代表表格中的单元格 | | 。 |
| <th> | 代表表格中的头部单元格 。 |
表单#
| Element | Description |
|---|---|
<form> | 代表一个表单 ,由控件组成。 |
<fieldset> | 代表控件组 。 |
<legend> | 代表 <fieldset> 控件组的标题 。 |
<label> | 代表表单控件的标题 。 |
<input> | 代表允许用户编辑数据的数据区 (文本框、单选框、复选框等)。 |
<button> | 代表按钮 。 |
<select> | 代表下拉框 。 |
<datalist> | 这个元素在 HTML5 中加入,代表提供给其他控件的一组预定义选项 。 |
<optgroup> | 代表一个选项分组 。 |
<option> | 代表一个 <select> 元素或 <datalist> 元素中的一个选项 |
<textarea> | 代表多行文本框 。 |
<keygen> | 这个元素在 HTML5 中加入,代表一个密钥对生成器控件。已在标准中废弃 |
<output> | 这个元素在 HTML5 中加入,代表计算值 。 |
<progress> | 这个元素在 HTML5 中加入,代表进度条 。 |
<meter> | 这个元素在 HTML5 中加入,代表滑动条 。 |
交互元素#
| Element | Description |
|---|---|
<details> | 这个元素在 HTML5 中加入,代表一个用户可以(点击)获取额外信息或控件的小部件 。 |
<summary> | 这个元素在 HTML5 中加入,代表 <details> 元素的综述 或标题 。 |
<menuitem> | 这个元素在 HTML5 中加入,代表一个用户可以点击的菜单项。已在标准中废弃 |
<menu> | 这个元素在 HTML5 中加入,代表菜单。 |
新标签的应用#
在 HTML5 中提供的新标签中有些特别的可以拿出来特别说一下。
templete 内容模板元素#
HTML 内容模板(<template>)元素是一种用于保存客户端内容机制,该内容在加载页面时不会呈现,但随后可以(原文为 may be)在运行时使用 JavaScript 实例化。将模板视为一个可存储在文档中以便后续使用的内容片段。虽然解析器在加载页面时确实会处理 <template> 元素的内容,但这样做只是为了确保这些内容有效;但元素内容不会被渲染。
figure 和 figurecaption#
HTML <figure> 元素代表一段独立的内容, 经常与说明(caption) <figcaption> 配合使用, 并且作为一个独立的引用单元。当它属于主内容流(main flow)时,它的位置独立于主体。这个标签经常是在主文中引用的图片,插图,表格,代码段等等,当这部分转移到附录中或者其他页面时不会影响到主体。
mark#
<mark> 元素用来显示与用户当前活动相关的一部分文档内容。例如,它可能被用于显示匹配搜索结果中的单词。
ruby>、rt 和 rp#
<ruby> 元素被用来展示东亚文字注音或字符注释。 <rt> 代表 ruby 注释 ,如中文拼音,日语罗马音等。 <rp> 元素用于不支持 <ruby> 元素的情况。 <rp> 的内容提供了应该展示的东西,通常是圆括号,以便表示 ruby 注解的存在。
ruby这个单词来源于日语ルビ,表示注音假名小铅字,即振り仮名。ruby语言的名字也来源于此。
bdi 和 bdo#
这两个元素在HTML全局属性dir ↗中进行详细介绍。
wbr#
<wbr> 是指 Word Break Opportunity,让浏览器在需要换行时从我们设定的位置进行换行。<wbr> 仅仅表示一个零宽的位置,不会对文本产生额外的影响。我们可以在我们期待浏览器换行的位置插入 <wbr> 标签,比如 url 的换行推荐在各个标点之前。比如如下的代码,当我们不断减小视口或元素的宽度,浏览器会从我们设置 <wbr> 的位置进行换行。
<p>
http://this<wbr />.is<wbr />.a<wbr />.really<wbr />.long<wbr />.example<wbr />.com/With<wbr />/deeper<wbr />/level<wbr />/pages<wbr />/deeper<wbr />/level<wbr />/pages<wbr />/deeper<wbr />/level<wbr />/pages<wbr />/deeper<wbr />/level<wbr />/pages<wbr />/deeper<wbr />/level<wbr />/pages
</p>htmlembed#
<embed> 元素将外部内容嵌入文档中的指定位置。此内容由外部应用程序或其他交互式内容源(如浏览器插件)提供。
大多数现代浏览器已经弃用并取消了对浏览器插件的支持,所以如果您希望您的网站可以在普通用户的浏览器上运行,那么依靠 <embed> 通常是不明智的。可以使用 <img>、<iframe>、<video>、<audio> 等标签代替。
picture、video、audio、track 和 source#
这四个标签都是用来在文档中嵌入媒体文件的。
<picture> 元素通过包含零或多个 <source> 元素和一个 <img> 元素来为不同的显示/设备场景提供图像版本。浏览器会选择最匹配的子 <source> 元素,如果没有匹配的,就选择 <img> 元素的 src 属性中的 URL。然后,所选图像呈现在 <img> 元素占据的空间中。
<video> 元素 用于在 HTML 或者 XHTML 文档中嵌入媒体播放器,用于支持文档内的视频播放。这些视频资源可以使用 src 属性或者 <source> 元素来进行描述:浏览器将会选择最合适的一个来使用。也可以将 <video> 标签用于音频内容,但是 <audio> 元素可能在用户体验上更合适。
<audio>元素用于在文档中嵌入音频内容。 <audio> 元素可以包含一个或多个音频资源, 这些音频资源可以使用 src 属性或者 <source> 元素来进行描述:浏览器将会选择最合适的一个来使用。也可以使用 MediaStream 将这个元素用于流式媒体。
<track> 元素被当作媒体元素 <audio> 和 <video> 的子元素来使用。它允许指定时序文本字幕(或者基于时间的数据),例如自动处理字幕。字幕格式有 WebVTT 格式(.vtt 格式文件)— Web 视频文本字幕格式,以及指时序文本标记语言(TTML)格式。
<source> 元素为 <picture>, <audio> 或者 <video> 元素指定多个媒体资源。这是一个空元素。它通常用于以不同浏览器支持的多种格式提供相同的媒体内容。要决定加载哪个 URL,user agent 检查每个 <source> 的 srcset、media 和 type 属性,来选择最匹配页面当前布局、显示设备特征等的兼容资源。
<picture>
<source media="(min-width: 650px)" srcset="demo1.jpg" />
<source media="(min-width: 465px)" srcset="demo2.jpg" />
<img src="img_girl.jpg" />
</picture>html
<audio>和<video>都有很多属性和用法,本文不作详细介绍。
canvas#
<canvas>元素可被用来通过 JavaScript(Canvas API 或 WebGL API)绘制图形及图形动画。<canvas> 的内容也是非常丰富的,不在本文做详细介绍。
svg#
SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格式都是基于像素处理的,SVG 则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真。
如果 svg 不是根元素,svg 元素可以用于在当前文档(比如说,一个 HTML 文档)内嵌套一个独立的 svg 片段 。 这个独立片段拥有独立的视口和坐标系统。
svg 的内容可以参考阮一峰老师的文章SVG图像入门教程 ↗
math#
Mathematical Markup Language (MathML) 是一个用于描述数学公式、符号的一种 XML 标记语言。MathML 的顶级元素是 <math>。所有有效的 MathML 实例必须被包括在 <math> 标记中。另外不可以在一个 <math> 元素中嵌套第二个 <math> 元素,但是 <math> 元素中可以有任意多的子元素 。
MathML 的内容可以参考MDN ↗,目前大多数浏览器都不支持 <math>,如果想使用数学公式有几个方案:
datalist#
<datalist> 元素包含了一组 <option> 元素,这些元素表示其它表单控件可选值。
output#
<output> 标签表示计算或用户操作的结果。可以用标签的 form 属性指定关联的 form 的 id,从而达到在文档任何位置使用 <output> 的目的。
progress#
<progress> 元素用来显示一项任务的完成进度.虽然规范中没有规定该元素具体如何显示,浏览器开发商可以自己决定,但通常情况下,该元素都显示为一个进度条形式。
meter#
<meter>元素用来显示已知范围的标量值或者分数值。
details#
<details> 元素可创建一个挂件,仅在被切换成展开状态时,它才会显示内含的信息。<summary> 元素可为该部件提供概要或者标签。
已废弃的标签#
以下标签已经从 HTML5 中移除,应停止使用。
<acronym><applet><basefont><big><center><dir><font><frame><frameset><noframes><strike><tt>
语义化标签实例#
上面我们已经介绍了所有的 HTML5 标签,HTML5 提供了非常丰富的语义化标签。我们如何用这些语义化的标签来重构我们的文档解构呢?我们就以 MDN 的HTML5 标签列表 ↗页面为例子来看看它是怎么实现的。MDN 的页面基本都是用语义化的标签编写 HTML 文档的。
首先我们按功能将页面分为几个主要结构,所有内容都是这些主要结构的子结构。
<body>
<div>
<header>页面头部,通常包含 logo、页面标题和导航性的目录。</header>
<main>主内容:整个页面核心内容</main>
<section>一个章节:显示一些与页面主要内容无关的部分</section>
<footer>页面尾部,通常包含版权信息、法律信息链接和反馈建议用的地址。</footer>
</div>
</body>html这样我们就已经确定了页面的结构,当我们要写入一个内容的时候也知道应该往哪个部分填充。
header#
header 部分的内容有页面的标题,搜索框,用户头像和一个导航。MDN 采用的是 grid 网格结构,导航用的是 nav 标签,其他都是用 div 实现。
<header>
页面头部,通常包含 logo、页面标题和导航性的目录。
<div>MDN标题</div>
<nav>
导航
<ul>
列表
<li></li>
<li></li>
<li></li>
</ul>
</nav>
<div>搜索框</div>
<div>用户头像</div>
</header>htmlmain#
核心内容部分是用户浏览页面最关注的部分,我们来 MDN 查阅资料主要就是看这部分内容,甚至可以说只看这部分内容。
<main>
主内容:整个页面核心内容
<header>主内容头部:包括标题导航等内容</header>
<div>
<aside>
<section>
侧边导航栏
<header>侧边导航栏标题</header>
<ul>
列表展示当前页面的导航目录,点击跳转到对应章节,此处也可以用一个nav嵌套
</ul>
</section>
</aside>
<div class="content">
核心内容
<article>content</article>
<div>
一个独立于content的section:metadata 修改时间
<section></section>
</div>
</div>
</div>
</main>htmlsection#
一个用来填写邮箱,接收 MDN 邮件的章节,内部为一个 form。
footer#
最后是页面的尾部,包含了 MDN 网站的一些重要链接导航和版权信息、法律信息链接等。