html5学习

Table of Contents

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
  • email
  • 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页面的不同部分:

Html5Semantics.PNG

  • <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>";
};

实例解析:

  1. 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demosse.php")
  2. 每接收到一次更新,就会发生 onmessage 事件
  3. 当 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 所在的目录。