HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。
HTML5的设计目的是为了在移动设备上支持多媒体。
HTML5 中的一些有趣的新特性:
声明必须位于 HTML5 文档中的第一行,使用非常简单:
注意:对于中文网页需要使用 声明编码,否则会出现乱码。
HTML5 定了 8 个新的 HTML 语义(semantic) 元素。所有这些元素都是 块级 元素。
为了能让旧版本的浏览器正确显示这些元素,你可以设置 CSS 的 display 属性值为 block:
header, section, footer, aside, nav, main, article, figure { display: block; }
为 HTML 添加新元素
我的第一个标题
我的第一个段落。
我的第一个新元素
JavaScript 语句 document.createElement("myHero") 是为 IE 浏览器添加新的元素。
你可以使用以上的方法来为 IE 浏览器添加 HTML5 元素,但是:
Internet Explorer 8 及更早 IE 版本的浏览器不支持以上的方式。
我们可以使用 Sjoerd Visscher 创建的 "HTML5 Enabling JavaScript", " shiv" 来解决该问题:
以上代码是一个注释,作用是在 IE 浏览器的版本小于 IE9 时将读取 html5.js 文件,并解析它。
针对IE浏览器html5shiv 是比较好的解决方案。html5shiv主要解决HTML5提出的新的元素不被IE6-8识别,这些新元素不能作为父节点包裹子元素,并且不能应用CSS样式。
html5shiv.js 引用代码必须放在
元素中,因为 IE 浏览器在解析 HTML5 新元素时需要先加载该文件。
标签 | 描述 |
---|---|
标签定义图形,比如图表和其他图像。该标签基于 JavaScript 的绘图 API |
标签 | 描述 |
---|---|
定义音频内容 | |
定义视频(video 或者 movie) | |
定义多媒体资源 | |
定义嵌入的内容,比如插件。 | |
为诸如 |
标签 | 描述 |
---|---|
定义选项列表。请与 input 元素配合使用该元素,来定义 input 可能的值。 | |
规定用于表单的密钥对生成器字段。 | |
定义不同类型的输出,比如脚本的输出。 |
HTML5提供了新的元素来创建更好的页面结构:
标签 | 描述 |
---|---|
定义页面独立的内容区域。 | |
定义页面的侧边栏内容。 | |
允许您设置一段文本,使其脱离其父元素的文本方向设置。 | |
定义命令按钮,比如单选按钮、复选框或按钮 | |
用于描述文档或文档某个部分的细节 | |
定义对话框,比如提示框 | |
标签包含 details 元素的标题 | |
规定独立的流内容(图像、图表、照片、代码等等)。 | |
定义 | |
定义 section 或 document 的页脚。 | |
定义了文档的头部区域 | |
定义带有记号的文本。 | |
定义度量衡。仅用于已知最大和最小值的度量。 | |
定义导航链接的部分。 | |
定义任何类型的任务的进度。 | |
定义 ruby 注释(中文注音或字符)。 | |
定义字符(中文注音或字符)的解释或发音。 | |
在 ruby 注释中使用,定义不支持 ruby 元素的浏览器所显示的内容。 | |
定义文档中的节(section、区段)。 | |
定义日期或时间。 | |
规定在文本中的何处适合添加换行符。 |
以下的 HTML 4.01 元素在HTML5中已经被删除:
HTML5
可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。
一个画布在网页中是一个矩形框,通过
注意: 默认情况下
注意: 标签通常需要指定一个id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小.
提示:你可以在HTML页面中使用多个
使用 style 属性来添加边框:
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
实例解析:
首先,找到
var c=document.getElementById("myCanvas");
然后,创建 context 对象:
var ctx=c.getContext("2d");
下面的两行代码绘制一个红色的矩形:
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。
fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。
注:
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。getContext() 方法返回一个用于在画布上绘图的环境。
语法
Canvas.getContext(contextID)
参数
参数 contextID 指定了想要在画布上绘制的类型。当前唯一的合法值是 "2d",它指定了二维绘图,并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API。
提示:在未来,如果
canvas 是一个二维网格。
canvas 的左上角坐标为 (0,0)
上面的 fillRect 方法拥有参数 (0,0,150,75)。
意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。
在Canvas上画线,我们将使用以下两种方法:
绘制线条我们必须使用到 "ink" 的方法,就像stroke().
实例
定义开始坐标(0,0), 和结束坐标 (200,100)。然后使用 stroke() 方法来绘制线条:
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.moveTo(0,0); ctx.lineTo(200,100); ctx.stroke();
在canvas中绘制圆形, 我们将使用以下方法:
arc(x,y,r,start,stop)
画布的左上角坐标为0,0
- x:圆心在x轴上的坐标
- y:圆心在y轴上的坐标
- r:半径长度
- start:起始角度,以弧度表示,圆心平行的右端为0度
- stop:结束角度,以弧度表示
注意:Math.PI表示180°,画圆的方向是顺时针
实际上我们在绘制圆形时使用了 "ink" 的方法, 比如 stroke() 或者 fill().
实例
使用 arc() 方法 绘制一个圆:
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.arc(95,50,40,0,2*Math.PI); ctx.stroke();
使用 canvas 绘制文本,重要的属性和方法如下:
使用 fillText():
实例
使用 "Arial" 字体在画布上绘制一个高 30px 的文字(实心):
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.font="30px Arial"; ctx.fillText("Hello World",10,50);
使用 strokeText():
实例
使用 "Arial" 字体在画布上绘制一个高 30px 的文字(空心):
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.font="30px Arial"; ctx.strokeText("Hello World",10,50);
渐变可以填充在矩形, 圆形, 线条, 文本等等, 各种形状可以自己定义不同的颜色。
以下有两种不同的方式来设置Canvas渐变:
当我们使用渐变对象,必须使用两种或两种以上的停止颜色。
addColorStop()方法指定颜色停止,参数使用坐标来描述,可以是0至1.
使用渐变,设置fillStyle或strokeStyle的值为 渐变,然后绘制形状,如矩形,文本,或一条线。
使用 createLinearGradient():
实例
创建一个线性渐变。使用渐变填充矩形:
var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); // 创建渐变 var grd = ctx.createLinearGradient(0,0,200,0); grd.addColorStop(0,"red"); grd.addColorStop(1,"white"); // 填充渐变 ctx.fillStyle = grd; ctx.fillRect(10,10,150,80);
使用 createRadialGradient():
实例
创建一个径向/圆渐变。使用渐变填充矩形:
var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); // 创建渐变 var grd = ctx.createRadicalGradient(75,50,5,90,60,100); grd.addColorStop(0,"red"); grd.addColorStop(1,"white"); // 填充渐变 ctx.fillStyle = grd; ctx.fillRect(10,10,150,80);
参数值
(x, y, r) (x1,y1,r1)分别可以代表一个圆形的特征, 个人感觉通常情况下(x,y) 和 (x1,y1)简单地相同即可(即同心圆), 这样做出来的径向渐变已经十分美观,符合大众审美观。
参数 描述 x0 渐变的开始圆的 x 坐标 y0 渐变的开始圆的 y 坐标 r0 开始圆的半径 x1 渐变的结束圆的 x 坐标 y1 渐变的结束圆的 y 坐标 r1 结束圆的半径
把一幅图像放置到画布上, 使用以下方法:
drawImage(image,x,y)
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("scream");
ctx.drawImage(img,10,10);
什么是SVG?
- SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
- SVG 用于定义用于网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失
- SVG 是万维网联盟的标准
在 HTML5 中,能够将 SVG 元素直接嵌入 HTML 页面中:
SVG 是一种使用 XML 描述 2D 图形的语言。
Canvas 通过 JavaScript 来绘制 2D 图形。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
下表列出了 canvas 与 SVG 之间的一些不同之处。
Canvas | SVG |
---|---|
|
|
HTML5 可以在文档中使用 MathML 元素,对应的标签是 。
MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。
以下是一个简单的 MathML 实例:
菜鸟教程(runoob.com)
以下实例添加了一些运算符:
菜鸟教程(runoob.com)
以下实例是一个 2×2 矩阵,可以在 Firefox 3.5 以上版本查看到效果:
菜鸟教程(runoob.com)
拖放(Drag and drop)是HTML5标准的组成部分。
下面的例子是一个简单的拖放实例:
菜鸟教程(runoob.com)
拖动 RUNOOB.COM 图片到矩形框中:
它看上去也许有些复杂,不过我们可以分别研究拖放事件的不同部分。
首先,为了使元素可拖动,把 draggable 属性设置为 true :
然后,规定当元素被拖动时,会发生什么。
在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。
dataTransfer.setData() 方法设置被拖数据的数据类型和值:
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
这要通过调用 ondragover 事件的 event.preventDefault() 方法:
event.preventDefault()
当放置被拖数据时,会发生 drop 事件。
在上面的例子中,ondrop 属性调用了一个函数,drop(event):
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
代码解释:
菜鸟教程(runoob.com)
HTML5 Geolocation API 用于获得用户的地理位置。
鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。
使用 getCurrentPosition() 方法来获得用户的位置。
下例是一个简单的地理定位实例,可返回用户位置的经度和纬度:
菜鸟教程(runoob.com)
点击按钮获取您当前坐标(可能需要比较长的时间获取):
实例解析:
上面的例子是一个非常基础的地理定位脚本,不含错误处理。
getCurrentPosition() 方法的第二个参数用于处理错误。它规定当获取用户位置失败时运行的函数:
菜鸟教程(runoob.com)
点击按钮获取您当前坐标(可能需要比较长的时间获取):
如需在地图中显示结果,需要访问可使用经纬度的地图服务,比如谷歌地图或百度地图:
菜鸟教程(runoob.com)
点击按钮获取您当前坐标(可能需要比较长的时间获取):
在上例中,我们使用返回的经纬度数据在谷歌地图中显示位置(使用静态图像)。
演示如何使用脚本来显示带有标记、缩放和拖曳选项的交互式地图。
菜鸟教程(runoob.com)
点击按钮获取您当前坐标(可能需要比较长的时间获取):
若成功,则 getCurrentPosition() 方法返回对象。始终会返回 latitude、longitude 以及 accuracy 属性。如果可用,则会返回其他下面的属性。
属性 | 描述 |
---|---|
coords.latitude | 十进制数的纬度 |
coords.longitude | 十进制数的经度 |
coords.accuracy | 位置精度 |
coords.altitude | 海拔,海平面以上以米计 |
coords.altitudeAccuracy | 位置的海拔精度 |
coords.heading | 方向,从正北开始以度计 |
coords.speed | 速度,以米/每秒计 |
timestamp | 响应的日期/时间 |
watchPosition() - 返回用户的当前位置,并继续返回用户移动时的更新位置(就像汽车上的 GPS)。
clearWatch() - 停止 watchPosition() 方法
下面的例子展示 watchPosition() 方法。您需要一台精确的 GPS 设备来测试该例(比如 iPhone):
实例:
菜鸟教程(runoob.com)
点击按钮获取您当前坐标(可能需要比较长的时间获取):
直到现在,仍然不存在一项旨在网页上显示视频的标准。
今天,大多数视频是通过插件(比如 Flash)来显示的。然而,并非所有浏览器都拥有同样的插件。
HTML5 规定了一种通过 video 元素来包含视频的标准方法。
如需在 HTML5 中显示视频,您所有需要的是:
实例
当前,
浏览器 | MP4 | WebM | Ogg |
---|---|---|---|
Internet Explorer | YES | NO | NO |
Chrome | YES | YES | YES |
Firefox | YES | YES | YES |
Safari | YES | NO | NO |
Opera | YES (从 Opera 25 起) | YES | YES |
格式 | MIME-type |
---|---|
MP4 | video/mp4 |
WebM | video/webm |
Ogg | video/ogg |
HTML5
其中的方法用于播放、暂停以及加载等。其中的属性(比如时长、音量等)可以被读取或设置。其中的 DOM 事件能够通知您,比方说,
例中简单的方法,向我们演示了如何使用
菜鸟教程(runoob.com)
标签 | 描述 |
---|---|
定义一个视频 | |
定义多种媒体资源,比如 | |
定义在媒体播放器文本轨迹 |
直到现在,仍然不存在一项旨在网页上播放音频的标准。
今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。
HTML5 规定了在网页上嵌入音频元素的标准,即使用
如需在 HTML5 中播放音频,你需要使用以下代码:
实例
菜鸟教程(runoob.com)
control 属性供添加播放、暂停和音量控件。
在 之间你需要插入浏览器不支持的
目前,
浏览器 | MP3 | Wav | Ogg |
---|---|---|---|
Internet Explorer 9+ | YES | NO | NO |
Chrome 6+ | YES | YES | YES |
Firefox 3.6+ | YES | YES | YES |
Safari 5+ | YES | YES | NO |
Opera 10+ | YES | YES | YES |
Format | MIME-type |
---|---|
MP3 | audio/mpeg |
Ogg | audio/ogg |
Wav | audio/wav |
标签 | 描述 |
---|---|
定义了声音内容 | |
规定了多媒体资源, 可以是多个,在 |
HTML5 拥有多个新的表单输入类型。这些新特性提供了更好的输入控制和验证。
本章全面介绍这些新的输入类型:
注意:并不是所有的主流浏览器都支持新的input类型,不过已经可以在所有主流的浏览器中使用它们了。即使不被支持,仍然可以显示为常规的文本域。
color 类型用在input字段主要用于选取颜色,如下所示:
实例
从拾色器中选择一个颜色:
选择你喜欢的颜色:
菜鸟教程(runoob.com)
date 类型允许你从一个日期选择器选择一个日期。
实例
定义一个时间控制器:
生日:
datetime 类型允许你选择一个日期(UTC 时间)。
实例
定义一个日期和时间控制器(本地时间):
生日 (日期和时间):
datetime-local 类型允许你选择一个日期和时间 (无时区).
实例
定义一个日期和时间 (无时区):
生日 (日期和时间):
email 类型用于应该包含 e-mail 地址的输入域。
实例
在提交表单时,会自动验证 email 域的值是否合法有效:
E-mail:
month 类型允许你选择一个月份。
实例
定义月与年 (无时区):
number 类型用于应该包含数值的输入域。
还能够设定对所接受的数字的限定:
实例
定义一个数值输入域(限定):
数量 ( 1 到 5 之间 ):
使用下面的属性来规定对数字类型的限定:
属性 | 描述 |
---|---|
disabled | 规定输入字段是禁用的 |
max | 规定允许的最大值 |
maxlength | 规定输入字段的最大字符长度 |
min | 规定允许的最小值 |
pattern | 规定用于验证输入字段的模式 |
readonly | 规定输入字段的值无法修改 |
required | 规定输入字段的值是必需的 |
size | 规定输入字段中的可见字符数 |
step | 规定输入字段的合法数字间隔 |
value | 规定输入字段的默认值 |
range 类型用于应该包含一定范围内数字值的输入域。
range 类型显示为滑动条。
实例
定义一个不需要非常精确的数值(类似于滑块控制):
请使用下面的属性来规定对数字类型的限定:
search 类型用于搜索域,比如站点搜索或 Google 搜索。
实例
定义一个搜索字段 (类似站点搜索或者Google搜索):
Search Google:
实例
定义输入电话号码字段:
电话号码:
time 类型允许你选择一个时间。
实例
定义可输入时间控制器(无时区):
选择时间:
url 类型用于应该包含 URL 地址的输入域。
在提交表单时,会自动验证 url 域的值。
实例
定义输入URL字段:
添加您的主页:
提示: iPhone 中的 Safari 浏览器支持 url 输入类型,并通过改变触摸屏键盘来配合它(添加 .com 选项)。
week 类型允许你选择周和年。
实例
定义周和年 (无时区):
选择周:
HTML5 有以下新的表单元素:
注意:不是所有的浏览器都支持HTML5 新的表单元素,但是你可以在使用它们,即使浏览器不支持表单属性,仍然可以显示为常规的表单元素。
使用 元素的列表属性与
实例
元素使用
当提交表单时,会生成两个键,一个是私钥,一个公钥。
私钥(private key)存储于客户端,公钥(public key)则被发送到服务器。公钥可用于之后验证用户的客户端证书(client certificate)。
实例
带有keygen字段的表单:
实例
将计算结果显示在
HTML5 的
novalidate 属性是一个 boolean(布尔) 属性.
novalidate 属性规定在提交表单时不应该验证 form 或 input 域。
实例
无需验证提交的表单数据
E-mail:
autofocus 属性是一个 boolean 属性.
autofocus 属性规定在页面加载时,域自动地获得焦点。
实例
让 "First name" input 输入域在页面载入时自动聚焦:
First name:
form 属性规定输入域所属的一个或多个表单。
提示:如需引用一个以上的表单,请使用空格分隔的列表。
实例
位于form表单外的 input 字段引用了 HTML form (该 input 表单仍然属于form表单的一部分):
菜鸟教程(runoob.com)
First name:
"Last name" 字段没有在 form 表单之内,但它也是 form 表单的一部分。
Last name:
注意: IE 不支持 form 属性
The formaction 属性用于描述表单提交的URL地址.
The formaction 属性会覆盖
元素中的action属性. 注意: The formaction 属性用于 type="submit" 和 type="image".
实例
以下HTMLform表单包含了两个不同地址的提交按钮:
First name:
Last name:
formenctype 属性描述了表单提交到服务器的数据编码 (只对form表单中 method="post" 表单)
formenctype 属性覆盖 form 元素的 enctype 属性。
主要: 该属性与 type="submit" 和 type="image" 配合使用。
实例
第一个提交按钮已默认编码发送表单数据,第二个提交按钮以 "multipart/form-data" 编码格式发送表单数据:
First name:
formmethod 属性定义了表单提交的方式。
formmethod 属性覆盖了
注意: 该属性可以与 type="submit" 和 type="image" 配合使用。
实例
重新定义表单提交方式实例:
First name:
Last name:
novalidate 属性是一个 boolean 属性.
novalidate属性描述了 元素在表单提交时无需被验证。
formnovalidate 属性会覆盖
注意: formnovalidate 属性与type="submit一起使用
实例
两个提交按钮的表单(使用与不适用验证 ):
E-mail:
formtarget 属性指定一个名称或一个关键字来指明表单提交数据接收后的展示。
The formtarget 属性覆盖
注意: formtarget 属性与type="submit" 和 type="image"配合使用.
实例
两个提交按钮的表单, 在不同窗口中显示:
First name:
Last name:
height 和 width 属性规定用于 image 类型的 标签的图像高度和宽度。
注意: height 和 width 属性只适用于 image 类型的 标签。
提示:图像通常会同时指定高度和宽度属性。如果图像设置高度和宽度,图像所需的空间 在加载页时会被保留。如果没有这些属性, 浏览器不知道图像的大小,并不能预留 适当的空间。图片在加载过程中会使页面布局效果改变 (尽管图片已加载)。
实例
定义了一个图像提交按钮, 使用了 height 和 width 属性:
list 属性规定输入域的 datalist。datalist 是输入域的选项列表。
实例
在
min、max 和 step 属性用于为包含数字或日期的 input 类型规定限定(约束)。
注意: min、max 和 step 属性适用于以下类型的 标签:date pickers、number 以及 range。
实例
元素最小值与最大值设置:
//Enter a date before 1980-01-01:
//Enter a date after 2000-01-01:
//Quantity (between 1 and 5):
multiple 属性是一个 boolean 属性.
multiple 属性规定 元素中可选择多个值。
注意: multiple 属性适用于以下类型的 标签:email 和 file:
实例
上传多个文件:
Select images:
pattern 属性描述了一个正则表达式用于验证 元素的值。
注意:pattern 属性适用于以下类型的 标签: text, search, url, tel, email, 和 password.
提示: 是用来全局 title 属性描述了模式.
实例
下面的例子显示了一个只能包含三个字母的文本域(不含数字及特殊字符):
Country code:
placeholder 属性提供一种提示(hint),描述输入域所期待的值。
简短的提示在用户输入值前会显示在输入域上。
注意: placeholder 属性适用于以下类型的 标签:text, search, url, telephone, email 以及 password。
实例
input 字段提示文本t:
required 属性是一个 boolean 属性.
required 属性规定必须在提交之前填写输入域(不能为空)。
注意:required 属性适用于以下类型的 标签:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file。
实例
不能为空的input字段:
Username:
step 属性为输入域规定合法的数字间隔。
如果 step="3",则合法的数是 -3,0,3,6 等
提示: step 属性可以与 max 和 min 属性创建一个区域值.
注意: step 属性与以下type类型一起使用: number, range, date, datetime, datetime-local, month, time 和 week.
实例
规定input step步长为3:
语义= 意义
语义元素 = 有意义的元素
一个语义元素能够清楚的描述其意义给浏览器和开发者。
无语义 元素实例:
语义元素实例: