html5学习
Table of Contents
- 1. 什么是 HTML5?
- 2. HTML5 是如何起步的?
- 3. 语义元素
- 4. html5 Canvas
- 5. HTML内联SVG
- 6. HTML5 拖放(Drag 和 Drop)
- 7. MathML
- 8. HTML5Video
- 9. HTML5 Audio - 如何工作
- 10. html新的input类型
- 11. html5新的表单元素
- 12. html新的表单属性
- 13. 什么是语义元素?
- 14. HTML5 Web 存储
- 15. HTML5 应用程序缓存
- 16. HTML5 Web Workers
- 17. HTML5 服务器发送事件(Server-Sent Events)
- 18. HTML5 Web Socket
1 什么是 HTML5?
HTML5是下一代HTML标准。
HTML,HTML4.01的上一个版本诞生于1999年。自从那以后,Web世界已经经历了巨变。
HTML5仍处于完善之中。然而,大部分现代浏览器已经具备了某些HTML5支持。
2 HTML5 是如何起步的?
HTML5是W3C与WHATWG合作的结果,WHATWG指Web Hypertext Application Technology Working Group。。
WHATWG致力于web表单和应用程序,而W3C专注于XHTML 2.0。在2006年,双方决定进行合作,来创建一个新版本的HTML。
HTML5中的一些有趣的新特性:
- 用于绘画的canvas元素
- 用于媒介回放的video和audio元素
- 对本地离线存储的更好的支持
- 新的特殊内容元素,比如article、footer、header、nav、section
- 新的表单控件,比如calendar、date、time、email、url、search
3 语义元素
标签 | 描述 |
---|---|
<article> | 定义页面独立的页面区域 |
<aside> | 定义页面的侧边栏内容 |
<bdi> | 允许你设置一段文本,使其脱离父元素的文本方向 |
<command> | 定义命令按钮,比如单选按钮,复选框或者按钮 |
<details> | 用于描述文档或者文档中某个部分的细节 |
<dialog> | 定义对话框,比如提示框 |
<summary> | 标签包含details元素的标题 |
<figure> | 规定独立的流内容(比如图像,图表,照片,代码等等 |
<figcation> | 定义figure元素的标题 |
<footer> | 设置Session或者document的页脚 |
<header> | 定义文档的头部区域 |
<mark> | 定义带有记号的文本 |
<meter> | 定义度量衡,仅用于已知最大值和最小值的度量。 |
<nav> | 定义导航链接的部分 |
<progress> | 定义任何类型的任务的进度 |
<ruby> | 定义ruby注释(中文注音或字符) |
<rt> | 定义字符(定义中文注音或字符)的解释或发音 |
<rp> | 在ruby注释中使用,定义不支持ruby元素的浏览器所显示的内容 |
<section> | 定义文档中的节(section、区段) |
<time> | 定义日期或者时间 |
<wbr> | 规定在文本中的何处适合添加换行符 |
4 html5 Canvas
HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.
<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。
你可以通过多种方法使用Canva绘制路径,盒、圆、字符以及添加图像。
4.1 创建一个画布(Canvas)
一个画布在网页中是一个矩形框,通过 <canvas> 元素来绘制.
注意: 默认情况下 <canvas> 元素没有边框和内容。
<canvas>简单实例如下:
<canvas id="myCanvas" width="200" height="100"></canvas>
注意: 标签通常需要指定一个id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小.
提示:你可以在HTML页面中使用多个 <canvas> 元素.
4.2 使用 JavaScript 来绘制图像
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:
<script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.fillStyle="#FF0000"; ctx.fillRect(0,0,150,75); </script>
5 HTML内联SVG
5.1 什么是SVG?
- SVG指可伸缩矢量图形(Scalable Vector Graphics)
- SVG用于定义用于网络的基于矢量的图形
- SVG使用XML格式定义图形
- SVG图像在放大或改变尺寸的情况下其图形质量不会有损失
- SVG是万维网联盟的标准
5.2 SVG优势
与其他图像格式相比(比如JPEG和GIF),使用SVG的优势在于:
- SVG图像可通过文本编辑器来创建和修改
- SVG图像可被搜索、索引、脚本化或压缩
- SVG是可伸缩的
- SVG图像可在任何的分辨率下被高质量地打印
5.3 SVGSVG 与 Canvas两者间的区别
SVG 是一种使用 XML 描述 2D 图形的语言。
Canvas 通过 JavaScript 来绘制 2D 图形。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
5.4 Canvas 与 SVG 的比较
canvas | SVG |
---|---|
依赖分辨率 | 不依赖分辨率 |
不支持事件处理器 | 支持事件处理器 |
弱的文本渲染能力 | 最适合带有大型渲染区域的应用(例如Google)地图 |
能够以.png或者.jpg格式保存结果图像 | 复杂度高会减慢渲染速度(但过度使用dom的应用都不快 |
最适合图像密集型的游戏,其中的许多对象可能被频繁的重绘 | 不适合游戏应用 |
6 HTML5 拖放(Drag 和 Drop)
拖放(Drag 和 drop)是 HTML5 标准的组成部分。
6.1 拖放实例
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> <style type="text/css"> #div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;} </style> <script> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); } function drop(ev) { ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } </script> </head> <body> <p>拖动 W3CSchool.cc 图片到矩形框中:</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <img id="drag1" src="/images/logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69"> </body> </html>
7 MathML
HTML5 可以在文档中使用 MathML 元素,对应的标签是 <math>…</math> 。
MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。
8 HTML5Video
8.1 Web站点上的视频
直到现在,仍然不存在一项旨在网页上显示视频的标准。
今天,大多数视频是通过插件(比如 Flash)来显示的。然而,并非所有浏览器都拥有同样的插件。
HTML5 规定了一种通过 video 元素来包含视频的标准方法。
8.2 html5中视频是如何工作的
<video> 元素提供了 播放、暂停和音量控件来控制视频。
同时<video> 元素元素也提供了 width 和 height 属性控制视频的尺寸.如果设置的高度和宽度,所需的视频空间会在页面加载时保留。。如果没有设置这些属性,浏览器不知道大小的视频,浏览器就不能再加载时保留特定的空间,页面就会根据原始视频的大小而改变。
<video> 与</video> 标签之间插入的内容是提供给不支持 video 元素的浏览器显示的。
<video> 元素支持多个 <source> 元素. <source> 元素可以链接不同的视频文件。浏览器将使用第一个可识别的格式。
当前, <video> 元素支持三种视频格式: MP4, WebM, 和 Ogg。
8.3 HTML5 <video> - 使用 DOM 进行控制
HTML5 <video> 和 <audio> 元素同样拥有方法、属性和事件。
<video> 和 <audio>元素的方法、属性和事件可以使用JavaScript进行控制.
其中的方法有用于播放、暂停以及加载等。其中的属性(比如时长、音量等)可以被读取或设置。其中的 DOM 事件能够通知您,比方说,<video> 元素开始播放、已暂停,已停止,等等。
9 HTML5 Audio - 如何工作
如需在 HTML5 中播放音频,你需要使用以下代码:
<audio controls> <source src="horse.ogg" type="audio/ogg"> <source src="horse.mp3" type="audio/mpeg"> 您的浏览器不支持 audio 元素。 </audio>
10 html新的input类型
- color
- date
- datetime
- datetime-local
- month
- number
- range
- search
- tel
- time
- url
- week
11 html5新的表单元素
- <datalist>
- <keygen>
- <output>
11.1 html5-datalist元素
<datalist>规定元素的选项列表
11.2 HTML5 <keygen> 元素
<keygen> 元素的作用是提供一种验证用户的可靠方法。
<keygen>标签规定用于表单的密钥对生成器字段。
当提交表单时,会生成两个键,一个是私钥,一个公钥。
私钥(private key)存储于客户端,公钥(public key)则被发送到服务器。公钥可用于之后验证用户的客户端证书(client certificate)
<form action="demo_keygen.asp" method="get"> 用户名: <input type="text" name="usr_name"> 加密: <keygen name="security"> <input type="submit"> </form>
11.3 HTML5 <output> 元素
<output> 元素用于不同类型的输出,比如计算或脚本输出
12 html新的表单属性
HTML5 的 <form> 和 <input>标签添加了几个新属性.
12.1 <form>新属性:
- autocomplete
- novalidate
12.2 <input>新属性:
- autocomplete
- autofocus
- form
- formaction
- formenctype
- formmethod
- formnovalidate
- formtarget
- height 与 width
- list
- min 与 max
- multiple
- pattern (regexp)
- placeholder
- required
- step
13 什么是语义元素?
一个语义元素能够清楚的描述其意义给浏览器和开发者。
无语义 元素实例: <div> 和 <span> - 无需考虑内容.
语义元素实例: <form>, <table>, and <img> - 清楚的定义了它的内容.
13.1 HTML5中新的语义元素
许多现有网站都包含以下HTML代码: <div id="nav">, <div class="header">, 或者 <div id="footer">, 来指明导航链接, 头部, 以及尾部.
HTML5提供了新的语义元素来明确一个Web页面的不同部分:
- <header>
- <nav>
- <section>
- <artivle>
- <aside>
- <figcation>
- <figure>
- <footer>
13.2 我们可以开始使用这些语义元素吗?
以上的元素都是块元素(除了<figcaption>).
为了让这些块及元素在所有版本的浏览器中生效,你需要在样式表文件中设置一下属性 (以下样式代码可以让旧版本浏览器支持本章介绍的块级元素):
header,section,footer,aside,nav,article,figure { display:block; }
13.3 HTML5 <figure> 和 <figcaption> 元素
<figure>标签规定独立的流内容(图像、图表、照片、代码等等)。
<figure> 元素的内容应该与主内容相关,但如果被删除,则不应对文档流产生影响。
<figcaption> 标签定义 <figure> 元素的标题.
<figcaption>元素应该被置于 "figure" 元素的第一个或最后一个子元素的位置。
14 HTML5 Web 存储
HTML5 web 存储,一个比cookie更好的本地存储方式。
14.1 什么是 HTML5 Web 存储?
使用HTML5可以在本地存储用户的浏览数据。
早些时候,本地存储使用的是cookies。但是Web 存储需要更加的安全与快速. 这些数据不会被保存在服务器上,但是这些数据只用于用户请求网站数据上.它也可以存储大量的数据,而不影响网站的性能.
数据以 键/值 对存在, web网页的数据只允许该网页访问使用。
14.2 localstorage和sessionstorage
客户端存储数据的两个对象
- localstorage
- sessionstorage
14.3 localStorage 对象
localStorage 对象存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
14.4 sessionStorage 对象
sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。
if(typeof(Storage)!=="undefined") { if (sessionStorage.clickcount) { sessionStorage.clickcount=Number(sessionStorage.clickcount)+1; } else { sessionStorage.clickcount=1; } document.getElementById("result").innerHTML="在这个会话中你已经点击了该按钮 " + sessionStorage.clickcount + " 次 "; } else { document.getElementById("result").innerHTML="抱歉,您的浏览器不支持 web 存储"; }
15 HTML5 应用程序缓存
使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。
15.1 什么是应用程序缓存(Application Cache)?
HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。 应用程序缓存为应用带来三个优势:
- 离线浏览 - 用户可在应用离线时使用它们
- 速度 - 已缓存资源加载得更快
- 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。
15.2 使用应用程序缓存
15.2.1 Cache Manifest基础
如需启动应用程序缓存,请在文档的<html>标签中加入manifest属性:
<!doctype html> <html manifest="demo.appcache"> ... </html>
15.2.2 Manifest 文件
manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。
manifest 文件可分为三个部分:
- CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
- NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
- FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
15.2.3 实例 - 完整的 Manifest 文件
CACHE MANIFEST # 2012-02-21 v1.0.0 /theme.css /logo.gif /main.js NETWORK: login.php FALLBACK: /html/ /offline.html
15.2.4 关于应用程序缓存的说明
请留心缓存的内容。
一旦文件被缓存,则浏览器会继续展示已缓存的版本,即使您修改了服务器上的文件。为了确保浏览器更新缓存,您需要更新 manifest 文件。
注意: 浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。
16 HTML5 Web Workers
web worker 是运行在后台的JavaScript代码,不会影响页面的性能。
16.1 什么是web worker?
当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。
web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。
16.2 Web Workers 和 DOM
由于 web worker 位于外部文件中,它们无法访问下例 JavaScript 对象:
- window 对象
- document 对象
- parent 对象
17 HTML5 服务器发送事件(Server-Sent Events)
HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。
17.1 接收 Server-Sent 事件通知
EventSource 对象用于接收服务器发送事件通知:
var source=new EventSource("demo_sse.php"); source.onmessage=function(event) { document.getElementById("result").innerHTML+=event.data + "<br>"; };
实例解析:
- 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demosse.php")
- 每接收到一次更新,就会发生 onmessage 事件
- 当 onmessage 事件发生时,把已接收的数据推入 id 为 "result" 的元素中
17.2 EventSource对象
我们使用 onmessage 事件来获取消息。不过还可以使用其他事件:
事件 | 描述 |
---|---|
onopen | 当通往服务器的连接被打开 |
onmessage | 当接收消息 |
onerror | 当发生错误 |
18 HTML5 Web Socket
18.1 什么是webSocket
WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。
当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。
以下 API 用于创建 WebSocket 对象。
var Socket = new WebSocket(url, [protocal] );
以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。
18.2 安装 pywebsocket
在执行以上程序前,我们需要创建一个支持 WebSocket 的服务。从 pywebsocket 下载 mod-pywebsocket ,或者使用 git 命令下载:
git clone https://github.com/google/pywebsocket.git
mod-pywebsocket 需要 python 环境支持
mod-pywebsocket 是一个 Apache HTTP 的 Web Socket扩展,安装步骤如下:
解压下载的文件。
进入 pywebsocket 目录。
执行命令:
$ python setup.py build $ sudo python setup.py install
查看文档说明:
$ pydoc mod_pywebsocket
开启服务
在 pywebsocket/modpywebsocket 目录下执行以下命令:
$ sudo python standalone.py -p 9998 -w ../example/
以上命令会开启一个端口号为 9998 的服务,使用 -w 来设置处理程序 echowsh.py 所在的目录。