您的位置:首页 > Web前端 > HTML5

HTML5的学习

2016-11-08 02:26 169 查看
新技术框架,主体还是HTML5,虽然之前看过一些html4,但现在还是没有一个比较清晰的概念,这部分,我的深看!

HTML5简介

HTML5的设计目的是为了在移动设备上支持多媒体

html5新特性

- 用于绘画的canvas(画布)元素

- 用于媒介回放的video和audio元素

- 对本地离线存储的更好支持

- 新的特殊内容元素 article、footer、header、nav、section

- 新的表单控件 calendar、date、time、email、url、search

- 完全支持css3

- 2D、3D制图

- 本地sql数据

- web应用

文档类型声明,说明这是html5

<!DOCTYPE html>


HTML5浏览器支持

针对IE浏览器html5shiv 是比较好的解决方案。html5shiv主要解决HTML5提出的新的元素不被IE6-8识别,这些新元素不能作为父节点包裹子元素,并且不能应用CSS样式。

<head>
<!--[if lt IE 9]>
<script src="http://cdn.static.runoob.com/libs/html5shiv/3.7/html5shiv.min.js"></script>
<![endif]-->
</head>


html5shiv.js 引用代码必须放在
<head>
元素中,因为 IE 浏览器在解析 HTML5 新元素时需要先加载该文件。

HTML5新元素

<canvas>
标签只是图形容器,您必须使用脚本来绘制图形。

注释:
<canvas>
元素中的任何文本将会被显示在不支持
<canvas>
的浏览器中。

canvas可以进行一些2d3d绘图 一个入口,javascript的绘图API。

音频控件

<audio controls>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
您的浏览器不支持 audio 元素。
</audio>


controls是显示音频播放控件

视频控件

<video width="320" height="240" controls>
<source src="movie.mp4"  type="video/mp4">
<source src="movie.ogg"  type="video/ogg">
您的浏览器不支持 HTML5 video 标签。
</video>


source 数据源标签

嵌入标签

<embed src="helloworld.swf" tppabs="http://w3schools.com/tags/helloworld.swf">


字幕标签

<track src="subtitles_en.vtt" kind="subtitles" srclang="en"
label="English">
<track src="subtitles_no.vtt" kind="subtitles" srclang="no"
label="Norwegian">


video、audio标签内部使用

新表单元素

datalist提供input下拉输入提示,可见input用list属性,输入datalist ID

<form action="demo-form.php" method="get">
<input list="browsers" name="browser">
<datalist id="browsers">
<option value="Internet Explorer">
<option value="Firefox">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
<input type="submit">
</form>


kegen标签

用于对所输入项进行加密

<form action="demo_keygen.php" method="get">
用户名: <input type="text" name="usr_name">
加密: <keygen name="security">
<input type="submit">
</form>


output标签

oninput监听事件,html5中input标签根据type属性的不同,使界面表现更丰富。output的for属性表示参与运算的元素有谁,用空格隔开。

<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0
<input type="range" id="a" value="50">100
+<input type="number" id="b" value="50">
=<output name="x" for="a b"></output>
</form>


页面结构相关新元素

article标签

感觉就是div,字体整体要小一些,里面还是h1、p。

在h5中,设计相关话题,选用相关新标签。

aside标签

没看出有什么用

bdi标签

在文本内部设置自己在左边还是在右边,配合dir看属性使用。好像span的升级版

发现一个事,就目前菜鸟教程而言,一些标签还不适用于所有浏览器。

command标签

倒像是一个js入口,在menu标签里使用。

details标签

下拉抽屉备注效果,初始只显示summary标签内容。open属性初始显示详情内容。

<details open>
<summary>Copyright 1999-2011.</summary>
<p>文本</p>
<p>文本</p>
</details>


Tip:b标签,加粗。

dialog标签

没看出有什么用处,示例中在表格th中使用

figure标签

规定独立的流内容,照片、图片什么的

像是h5为各种内容定义了专门的外套,还不知道这么做的好处。 figcaption定义底部标题。

<figure>
<img src="img_pulpit.jpg" alt="The Pulpit Rock" width="304" height="228">
<figcaption>Fig.1 - A view of the pulpit rock in Norway.</figcaption>
</figure>


footer页脚标签

一般写文档的作者姓名,版权信息,等等。

header页眉标签

定义了文档的头部区域

<header>
元素应该作为介绍内容或者导航链接栏的容器。

注释:
<header>
标签不能被放在
<footer>、<address>
或者另一个
<header>
元素内部。

**插播:**ReactJS,ReactNative,什么关系?这么说吧,ReactJS是一套Web前端框架,就像AngularJS,而ReactNative我认为是移动端App-UI框架,基于ReactJS,将WebDom组件变成原生组件,如iOS的UIView。就好比AngularJS之于Ionic。

mark标签

标记文本,like span,示例中mark内的文本被黄色标记。

meter度量衡标签

仅用于已知最大和最小值的度量

<meter value="2" min="0" max="10">2 out of 10</meter><br>
<meter value="0.6">60%</meter>


不太清楚,示例显示了进度条,但却说不能当进度条用。

progress进度条标签

定义任何类型的任务的进度。

<progress value="80" max="100">
</progress>


注释:
<progress>
标签不适合用来表示度量衡(例如,磁盘空间使用情况或相关的查询结果)。表示度量衡,请使用
<meter>
标签代替。

nav导航标签

定义导航链接。并不是所有的 HTML 文档都要使用到
<nav>
元素。
<nav>
元素只是作为标注一个导航链接的区域。

<nav>
<a href="/html/">HTML</a> |
<a href="/css/">CSS</a> |
<a href="/js/">JavaScript</a> |
<a href="/jquery/">jQuery</a>
</nav>


ruby标签

定义 ruby 注释(中文注音或字符)。

在东亚使用,显示的是东亚字符的发音。

<ruby>
标签与
<rt>
<rp>
标签一起使用:

<ruby>
元素由一个或多个需要解释/发音的字符和一个提供该信息的
<rt>
元素组成
,还包括可选的
<rp>
元素,定义当浏览器不支持 “ruby” 元素时显示的内容。

<ruby>
漢 <rp>(</rp><rt>Kan</rt><rp>)</rp>
字 <rp>(</rp><rt>ji</rt><rp>)</rp>
</ruby>


rp标签用于当浏览器不支持ruby标签时现实的内容

rt标签的作用,就是让后面的内容放到前面头上,拼音标注方法。

rt标签

定义字符(中文注音或字符)的解释或发音。

rp标签

在 ruby 注释中使用,定义不支持 ruby 元素的浏览器所显示的内容。

section标签

定义文档中的节(section、区段)。

定义了文档的某个区域。比如章节、头部、底部或者文档的其他区域。

<section>
<h1>WWF</h1>
<p>The World Wide Fund for Nature (WWF) is ...</p>
</section>


html5的套套

time标签

定义公历的时间(24 小时制)或日期,时间和时区偏移是可选的。

该元素能够以机器可读的方式对日期和时间进行编码,这样,举例说,用户代理能够把生日提醒或排定的事件添加到用户日程表中,搜索引擎也能够生成更智能的搜索结果。

<p>我们在每天早上 <time>9:00</time> 开始营业。</p>
<p>我在 <time datetime="2016-02-14">情人节</time> 有个约会。</p>


可以写外面,也可以写里面datetime属性,方便程序识别时间字段。

wbr标签

(Word Break Opportunity) 标签规定在文本中的何处适合添加换行符。

提示:如果单词太长,或者您担心浏览器会在错误的位置换行,那么您可以使用 元素来添加 Word Break Opportunity(单词换行时机)。

<p>学习 AJAX ,您必须熟悉 <wbr>Http<wbr>Request 对象。</p>


HTML5弃用的元素

<acronym>
<applet>
<basefont>
<big>
<center>
<dir>
<font>
<frame>
<frameset>
<noframes>
<strike>
<tt>


HTML5 Canvas 画布

用于图形的绘制,通过脚本 (通常是JavaScript)来完成.

<canvas>
标签只是图形容器,您必须使用脚本来绘制图形。

你可以通过多种方法使用Canva绘制路径,盒、圆、字符以及添加图像。

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
如果浏览器不支持 HTML5 canvas 标签,显示此行。
</canvas>

<script>
var c=document.getElementById("myCanvas");
// 上下文
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
// 填充(起点坐标x,起点坐标y,宽,高)
ctx.fillRect(0,0,200,100);
</script>


Canvas路径(划线)

在Canvas上画线,我们将使用以下两种方法:

moveTo(x,y) 定义线条开始坐标

lineTo(x,y) 定义线条结束坐标

var c=document.getElementById("myCanvas");
// 获取上下文 好比抓起画笔
var ctx=c.getContext("2d");
// 移动画笔到起点
ctx.moveTo(0,0);
// 移动画笔到终点
ctx.lineTo(200,100);
// 画
ctx.stroke();

// 画圆
<script>

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95圆心坐标x,50圆心坐标y,40半径,0start?,2*Math.PI画多少);
ctx.stroke();

</script>

// 绘制文本
<script>

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
// 绘制文本
ctx.font="30px Arial";
// 填充文本  内容 起始坐标xy
ctx.fillText("Hello World",10,100);
// 画空心文本
ctx.strokeText("Hello World",10,50);
</script>


Canvas渐变

以下有两种不同的方式来设置Canvas渐变:

createLinearGradient(x,y,x1,y1) - 创建线条渐变

createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变

当我们使用渐变对象,必须使用两种或两种以上的停止颜色。

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);


创建一个径向/圆渐变

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");

// 创建渐变
// createRadialGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)
// createRadialGradient前三个参数是起始圆(cycle1)的x、y、半径,后三个是终点圆(cycle2)的x、y、半径。
var grd=ctx.createRadialGradient(75,50,5,90,60,100);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");

// 填充渐变
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);


Canvas图像

把一幅图像放置到画布上, 使用以下方法:

drawImage(image,x,y)

<script>

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
// 当img加载完毕执行的脚本语句
img.onload = function() {
// 画现成图像
ctx.drawImage(img,10,10);
}
</script>


HTML5 内联 SVG

SVG 指可伸缩矢量图形 (Scalable Vector Graphics)

SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失

SVG优势

与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:

- SVG 图像可通过文本编辑器来创建和修改

- SVG 图像可被搜索、索引、脚本化或压缩

- SVG 是可伸缩的

- SVG 图像可在任何的分辨率下被高质量地打印-

// 外面是库,里面是具体的矢量图案
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
<polygon points="100,10 40,180 190,60 10,60 160,180"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;"/>
</svg>


SVG 与 Canvas两者间的区别

SVG 是一种使用 XML 描述 2D 图形的语言。

Canvas 通过 JavaScript 来绘制 2D 图形。

SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。

在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。

Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。



SVG再单花时间看

HTML MathML

HTML5 可以在文档中使用 MathML 元素,对应的标签是
<math>...</math>


MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。

// 书写a²+b²=c²
<math xmlns="http://www.w3.org/1998/Math/MathML">

<mrow行>
<msup次方><mi项目>a</mi><mn幂>2</mn></msup>
<mo运算符>+</mo>

<msup><mi>b</mi><mn>2</mn></msup>
<mo>=</mo>

<msup><mi>c</mi><mn>2</mn></msup>
</mrow>

</math>


HTML5 拖放(Drag 和 Drop)

先Drag,后Drop。

<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>


HTML5 地理定位

不知为什么,同意浏览器访问位置后,就没反应了。

function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else
{
x.innerHTML="该浏览器不支持获取地理位置。";
}
}

function showPosition(position)
{
x.innerHTML="纬度: " + position.coords.latitude +
"<br>经度: " + position.coords.longitude;
}

function showError(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED:
x.innerHTML="用户拒绝对获取地理位置的请求。"
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML="位置信息是不可用的。"
break;
case error.TIMEOUT:
x.innerHTML="请求用户地理位置超时。"
break;
case error.UNKNOWN_ERROR:
x.innerHTML="未知错误。"
break;
}
}


视频格式

MP4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件

WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件

Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件

音频格式的MIME类型

MP3 audio/mpeg

Ogg audio/ogg

Wav audio/wav

HTML5 新的 Input 类型

color
date
datetime
datetime-local
email
month
number
range
search
tel
time
url
week
// 注意:并不是所有的主流浏览器都支持新的input类型,不过您已经可以在所有主流的浏览器中使用它们了。即使不被支持,仍然可以显示为常规的文本域。


1.颜色
<form action="demo-form.php">
选择你喜欢的颜色: <input type="color" name="favcolor"><br>
<input type="submit">
</form>
2.日期 没有报错
<form action="demo-form.php">
生日: <input type="date" name="bday">
<input type="submit">
</form>

3.日期时间,并没有看到2.3的图形选择界面,没有报错。
<form action="demo-form.php">

生日 (日期和时间): <input type="datetime" name="bdaytime">

<input type="submit">

</form>

4.当地的时日时间,still no effect,没有报错。
<form action="demo-form.php">
生日 (日期和时间): <input type="datetime-local" name="bdaytime">
<input type="submit">
</form>

5.email 效果就是,自带报错信息。
<form action="demo-form.php">
E-mail: <input type="email" name="usremail">
<input type="submit">
</form>

6.月份, 没有报错。
<form action="demo-form.php">
生日 ( 月和年 ): <input type="month" name="bdaymonth">
<input type="submit">
</form>

7.数字,有报错信息。
<form action="demo-form.php">
数量 ( 1 到 5 之间): <input type="number" name="quantity" min="1" max="5">
<input type="submit">
</form>


Input 类型: range

既有样式的滚动条

<form action="demo-form.php" method="get">
Points: <input type="range" name="points" min="1" max="10">
<input type="submit">
</form>


搜索类型输入

没看出于普通文本输入有什么关系?

<form action="demo-form.php">
Search Google: <input type="search" name="googlesearch"><br>
<input type="submit">
</form>


电话输入

没看出有什么区别,没有报错信息。

<form action="demo-form.php">
电话号码: <input type="tel" name="usrtel"><br>
<input type="submit">
</form>


突然想到一点:为什么有的没反应,是因为现在当前我用的火狐浏览器还不支持该控件。

time输入

没什么区别,没有报错信息。

<form action="demo-form.php">
选择时间: <input type="time" name="usr_time">
<input type="submit">
</form>


Input 类型: url

<form action="demo-form.php">
添加你的主页: <input type="url" name="homepage"><br>
<input type="submit">
</form>


Input 类型: week

输出值样式: 2017-W05

<form action="demo-form.php">
选择周: <input type="week" name="year_week">
<input type="submit">
</form>


input有很多属性

input的种类如下:

button
checkbox
color
date
datetime
datetime-local
email
file
hidden
image
month
number
password
radio
range
reset
search
submit
tel
text
time
url
week


HTML5新表单元素

// 使用 <input> 元素的列表属性与 <datalist> 元素绑定.
<datalist>
// 表单字段密钥对生成器 当提交表单时,会生成两个键,一个是私钥,一个是公钥。私钥(private key)存储于客户端,公钥(public key)则被发送到服务器。公钥可用于之后验证用户的客户端证书(client certificate)。
// 尚不知秘钥和前面input如何实现绑定?
<keygen>

// 输出控件
<output>


HTML5表单属性

<form> / <input>
autocomplete 属性


就是输入记忆功能,对输过的字段又提示,点击自动完成。我觉得这与浏览器缓存有关。

<form action="demo-form.php" autocomplete="on">
First name:<input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
E-mail: <input type="email" name="email" autocomplete="off"><br>
<input type="submit">
</form>


<form>
novalidate 属性


关闭表单校验

<form action="demo-form.php" novalidate>
E-mail: <input type="email" name="user_email">
<input type="submit">
</form>


<input>
autofocus 属性


让谁默认获得焦点

First name: <input type="text" name="fname" autofocus>


<input>
form 属性


在form外的input,声明自己是那个表单的。

Last name: <input type="text" name="lname" form="form1">


<input>
formaction 属性


定义表单提交的URL地址,提交到哪个子页面。

该属性只用于 type=”submit” 和 type=”image”时,且该属性会覆盖
<form>
元素中的action属性。

<form action="demo-form.php">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="提交"><br>
<input type="submit" formaction="demo-admin.php"
value="提交">
</form>


<input>
formenctype 属性


定义表单提交到服务器的编码类型,只当form是post的时候,且仅当input类型为submit或image时才使用。

<form action="demo-post_enctype.php" method="post">
First name: <input type="text" name="fname"><br>
<input type="submit" value="提交">
<input type="submit" formenctype="multipart/form-data"
value="以 Multipart/form-data 提交">
</form>


<input>
formmethod属性


定义表单提交方式,当submit、image情形同上。

<input type="submit" formmethod="post" formaction="demo-post.php" value="使用 POST 提交">


<input>
formnovalidate 属性


不验证提交,submit时使用。

<form action="demo-form.php">
E-mail: <input type="email" name="userid"><br>
<input type="submit" value="提交"><br>
<input type="submit" formnovalidate="formnovalidate" value="不验证提交">
</form>


<input>
formtarget 属性


规定在何处打开action的URL

_blank  在新窗口中打开。
_self   默认。在相同的框架中打开。
_parent     在父框架集中打开。
_top    在整个窗口中打开。
framename   在指定的框架中打开。

...
<input type="submit" formtarget="_blank" value="提交到一个新的页面上">
</form>


<input>
height 和 width 属性


只适用于image类型的input,好比图标按钮。就是说按钮还有一种input形式。

<input type="image" src="img_submit.gif" alt="Submit" width="48" height="48">


<input>
list 属性


绑定哪个datalist id,输入备选项。

<input>
min 和 max 属性


min、max 和 step 属性用于为包含数字或日期的 input 类型规定限定(约束)。

注意: min、max 和 step 属性适用于以下类型的
<input>
标签:date pickers、number 以及 range。

Enter a date before 1980-01-01:
<input type="date" name="bday" max="1979-12-31">

Enter a date after 2000-01-01:
<input type="date" name="bday" min="2000-01-02">

Quantity (between 1 and 5):
<input type="number" name="quantity" min="1" max="5">


<input>
multiple 属性


multiple 属性是一个 boolean 属性.

multiple 属性规定
<input>
元素可选择多个值。

注意: multiple 属性适用于以下类型的
<input>
标签:email 和 file:

选择图片: <input type="file" name="img" multiple>


<input>
pattern 属性


输入的正则校验,自定义校验规则,title属性为自定义错误信息。 注意:pattern 属性适用于以下类型的
<input>
标签: text, search, url, tel, email, 和 password.

Country code: <input type="text" name="country_code" pattern="[A-Za-z]{3}" title="Three letter country code">


<input>
placeholder 属性


注意: placeholder 属性适用于以下类型的
<input>
标签:text, search, url, telephone, email 以及 password。

<input>
required 属性


哪个input是必填的

required 属性适用于以下类型的
<input>
标签:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file

Username: <input type="text" name="usrname" required>


<input>
step 属性


就是步长

step 属性与以下type类型的input一起使用: number, range, date, datetime, datetime-local, month, time 和 week.

<input type="number" name="points" step="3">


HTML5语义元素

引入一个概念,语义元素,就是带有特殊意味的元素。

无语义元素:如div,span等,无需考虑包含内容。

语义元素:如form,table,img,清楚地定义了包含的内容。

HTML5中新的语义元素

<header>
<nav>
<section>
<article>
<aside>
<figcaption>
<figure>
<footer>


HTML5
<section>
元素


就是区段,任何内容你都可以套一个section。

HTML5
<article>
元素


定义独立的内容,使用场景:论坛帖子forum post,博客帖子,新闻故事,评论等。

HTML5
<nav>
元素


定义导航链接,但是不是所有的链接都需要包含在nav里。

<nav>
<a href="/html/">HTML</a> |
<a href="/css/">CSS</a> |
<a href="/js/">JavaScript</a> |
<a href="/jquery/">jQuery</a>
</nav>


HTML5
<aside>
元素


定义页面主区域内容之外的内容(比如侧边栏)。

aside的内容应与主区域的相关。

HTML5
<header>
元素


描述文档的头部区域

HTML5
<footer>
元素


文档的底部区域,作者、著作权什么的。

HTML5
<figure>
<figcaption>
元素


规定独立的流内容,图像,照片,图标之类。figcaption为流标题,放在下面就是底部标题。

<figure>
<img src="img_pulpit.jpg" alt="The Pulpit Rock" width="304" height="228">
<figcaption>Fig.1 - A view of the pulpit rock in Norway.</figcaption>
</figure>


刚说的这些都是块元素,除了figcaption,为了解决个别浏览器不认以上块元素,你可以在,像是表里写下:

means display them as block.

header, section, footer, aside, nav, article, figure
{
display: block;
}


Internet Explorer 8 及更早IE版本不认怎么办?

IE8 及更早IE版本无法在这些元素中渲染CSS效果,以至于你不能使用
<header>, <section>, <footer>, <aside>, <nav>, <article>, <figure>,
或者其他的HTML5 elements.

解决办法: 你可以使用HTML5 Shiv Javascript脚本来解决IE的兼容问题。HTML5 Shiv下载地址:http://cdn.static.runoob.com/libs/html5shiv/3.7/html5shiv.min.js

下载后,将以下代码放入的网页中:

<!--[if lt IE 9]>
<script src="html5shiv.js"></script>
<![endif]-->


以上代码在浏览器小于IE9版本时会加载html5shiv.js文件. 你必须将其放置于
<head>
元素中,因为 IE浏览器需要在头部加载后渲染这些HTML5的新元素。

HTML5 Web存储

一个比cookie更好的本地存储方式

什么是HTML5 web存储?

使用HTML5可以在本地存储用户的浏览数据,早些时候,本地存储使用的是 cookie。但是Web 存储需要更加的安全与快速. 这些数据不会被保存在服务器上,但是这些数据只用于用户请求网站数据上.它也可以存储大量的数据,而不影响网站的性能。

数据以 键/值 对存在, web网页的数据只允许该网页访问使用。

localStorage和sessionStorage

这是客户端存储数据的两个对象。

- localStorage:没有时间限制的数据存储

- sessionStorage:针对一个session的数据存储

浏览器支持校验:

if(typeof(Storage)!=="undefined")
{
// 是的! 支持 localStorage  sessionStorage 对象!
// 一些代码.....
} else {
// 抱歉! 不支持 web 存储。
}


localStorage对象

localStorage 对象存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。

<div id="result"></div>
<script>
if(typeof(Storage)!=="undefined")
{
localStorage.sitename="菜鸟教程";
document.getElementById("result").innerHTML="网站名:" + localStorage.sitename;
}
else
{
document.getElementById("result").innerHTML="对不起,您的浏览器不支持 web 存储。";
}
</script>


不管是 localStorage,还是 sessionStorage,可使用的API都相同,常用的有如下几个(以localStorage为例):

保存数据:localStorage.setItem(key,value);

读取数据:localStorage.getItem(key);

删除单个数据:localStorage.removeItem(key);

删除所有数据:localStorage.clear();

得到某个索引的key: localStorage.key(index);

键值对通常以字符串存入,涉及数字,还需先转格式在字符化。否则如下例子点击计数就会出现111111,而不是2,3,4…

localStorage.clickcount=Number(localStorage.clickcount)+1;


sessionStorage对象

sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后数据会被删除

JSON.stringify

JSON obj to str:

var site = new Object;
...
var str = JSON.stringify(site); // 将对象转换为字符串


str to JSON obj:

var site = JSON.parse(str);


你需要确保 localStorage 存储的数据都为 JSON 格式,否则 JSON.parse(str) 将会报错。确保str都为JSON格式吧

HTML5 Web SQL 数据库

Q:示例都没效果,怎么在本地使用数据库?

在Chrome里有效果,在浏览器里有个Web SQL 里面是建立的数据库mydb。就好比iOS 有sqlite 或 coredata一样。

所以叫 HTML5 Web SQL。

核心方法

openDatabase:使用现有或新建一个数据库

transaction:控制一个事务,执行提交或回滚

executeSql: 用于sql语句查询

打开数据库

var db = openDatabase('mydb数据库名','1.0版本号','Test DB描述',2*1024*1024数据库大小); 还有创建回调


查询

ts.executeSql(sqlQuery,[value1,value2..],dataHandler,errorHandler)

// 抓取数据库
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
// 在数据库mydb中创建一个LOGS表,有两个字段id和log。
db.transaction(function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
});


插入数据

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "菜鸟教程")');
// 动态值插入数据
tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?'), [e_id, e_log];
});


读取数据

db.transaction(function (tx) {
tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
var len = results.rows.length, i;
msg = "<p>查询记录条数: " + len + "</p>";
document.querySelector('#status').innerHTML +=  msg;

for (i = 0; i < len; i++){
alert(results.rows.item(i).log );
}

}, null);
});


删除记录

db.transaction(function (tx) {
tx.executeSql('DELETE FROM LOGS  WHERE id=1');
});
// 动态删除
tx.executeSql('DELETE FROM LOGS WHERE id=?', [id]);


更新记录

db.transaction(function (tx) {
tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2');
});
// 动态更新
db.transaction(function(tx) {
tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=?', [id]);
});


HTML5 应用程序缓存

使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。

什么是应用程序缓存(Application Cache)?

HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。

应用程序缓存为应用带来三个优势:

离线浏览 - 用户可在应用离线时使用它们

速度 - 已缓存资源加载得更快

减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。

就是:变的再去访问服务器,不变的直接读本地缓存。

完成的Manifest文件

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js

NETWORK:
login.php

FALLBACK:
/html/ /offline.html


需要在html标签中包含manifest属性

<!DOCTYPE HTML>
<html manifest="demo.appcache">
<head>
...
</html>


manifest 文件的建议的文件扩展名是:”.appcache”。

请注意,manifest 文件需要配置正确的 MIME-type,即 “text/cache-manifest”。必须在 web 服务器上进行配置。

HTML5 Web Workers

web worker 是运行在后台的 JavaScript,不会影响页面的性能。

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。

var w;

function startWorker() {
if(typeof(Worker) !== "undefined") {
if(typeof(w) == "undefined") {
w = new Worker("demo_workers.js");
}
w.onmessage = function(event) {
document.getElementById("result").innerHTML = event.data;
};
} else {
document.getElementById("result").innerHTML = "抱歉,你的浏览器不支持 Web Workers...";
}
}

function stopWorker()
{
w.terminate();
// 将指针回收
w = undefined;
}

// demo_workers.js代码
var i=0;

function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}

timedCount();


Web Workers 和 DOM

由于 web worker 位于外部文件中,它们无法访问下例 JavaScript 对象:

window 对象

document 对象

parent 对象

HTML5 服务器发送事件(Server-Sent Events)

Server-Sent 事件指的是网页自动获取来自服务器的更新。

EventSource 对象用于接收服务器发送事件通知

if(typeof(EventSource)!=="undefined")
{
var source=new EventSource("demo_sse.php");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "<br>";
};
}


onopen事件:当通往服务器的连接被打开

onerror事件:当发生错误

HTML5 WebSocket

function WebSocketTest()
{
if ("WebSocket" in window)
{
alert("您的浏览器支持 WebSocket!");

// 打开一个 web socket
var ws = new WebSocket("ws://localhost:9998/echo");

ws.onopen = function()
{
// Web Socket 已连接上,使用 send() 方法发送数据
ws.send("发送数据");
alert("数据发送中...");
};

ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert("数据已接收...");
};

ws.onclose = function()
{
// 关闭 websocket
alert("连接已关闭...");
};
}

else
{
// 浏览器不支持 WebSocket
alert("您的浏览器不支持 WebSocket!");
}
}


安装 pywebsocket

同时需要创建一个服务

$ python setup.py build
$ sudo python setup.py install
$ sudo python standalone.py -p 9998 -w ../example/


HTML5测验

2. HTML5 的正确 doctype 是?

你的回答: <!DOCTYPE HTML5>

回答错误!

正确答案:<!DOCTYPE html>

3. 在 HTML5 中,哪个元素用于组合标题元素?

你的回答: <header>

回答错误!

正确答案:<hgroup>

4. HTML5 中不再支持下面哪个元素?

你的回答: <ins>

回答错误!

13. 在 HTML5 中,您能够直接将 SVG 元素嵌入 HTML 页面中。

你的回答: 错误

回答错误!

正确答案:正确
正确答案:<font>

19. 哪种输入类型用于定义周和年控件(无时区)?

你的回答: date

回答错误!

正确答案:week

20. 哪个 HTML5 元素用于显示已知范围内的标量测量?

你的回答: <measure>

回答错误!

正确答案:<meter>


HTML5代码规范

定义好图片的尺寸,在加载时可以预留指定空间,减少闪烁。

<img src="html5.gif" alt="HTML5" style="width:128px;height:128px">


等号前后可以使用空格。但我们推荐少用空格:

<link rel="stylesheet" href="styles.css">


每行代码尽量少于 80 个字符。

HTML5 中
<title>
元素是必须的,标题名描述了页面的主题:

<head>
<meta charset="UTF-8">
<title>菜鸟教程</title>
</head>


CSS样式规范

将左花括号与选择器放在同一行。

左花括号与选择器间添加一个空格。

使用两个空格来缩进。

冒号与属性值之间添加一空格。

逗号和符号之后使用一个空格。

每个属性与值结尾都要使用分号。

只有属性值包含空格时才使用引号。

右花括号放在新的一行。

每行最多 80 个字符。

HTML5的规范和XHTML的规范大同小异,都是让代码看上去更规整。

HTML及参考手册,需要的时候再查阅,毕竟现在说的是HTML5.

至此,HTML5的学习完结。Now,我可以说我会HTML5了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: