HTML5是新一代的标准,其工作原理主要包括3部分:
1.不破坏web
在web中使用HTML5的标准不应该让已经存在的网页无法工作。
2.修补牛蹄子路
HTML5将使用频率很高,但是不是官方的技术作为一个目标,在某种程度上确实是最 实际解决问题的途径。
3.实用至上
1.1文档声明
虽然即使不加<html><head><body> 浏览器依旧能够识别html的标签元素,但是如果不加<!doctype html> 文档说明,浏览器就会以一种混杂模式去渲染网页,不同的浏览器混杂模式不同,渲染页面差别很大,加入文档声明以后,浏览器会以 更严格的标准模式去渲染页面,以保证以一致的格式和布局显示网页。浏览器不关心你有哪种文档声明,它只要检测到文档声明即可。HTML5文档声明很简单
<!doctype html> /<!DOCTYPE html> html5不区分大小写,大写小写无所谓。
1.2语言和编码
使用选择的语言,只需要在<html lang="en/zh-CN"> 中自己添加要使用的语言即可,en 代表英文,zh-CN代表中文。
编码建议采用utf-8 这种编码简单,转换速度快,支持任何非英文字符,当然包含中文。使用如下:
<meta charset="utf-8">
1.3 引入css样式和javascript
推荐外联式引入css,javascript,可以使html5页面结构清晰,便于修改和维护,css的引入内联式和行间样式不推荐使用,js的内联式也不推荐使用。
外联式 :
<link rel="stylesheet" href="css/1.csss">
<script src="js/1.js"></script>
css的引入只能在<head></head> 中,js用<script></script>引入,但是可以放在页面的任何部分,建议放在页面的底部,这样做是要页面加载完以后,再加载交互部分。
2.html5新增的元素
新增的元素有的是添加了功能,有的是形成语义元素,让页面结构更清晰,所有语义元素都有一个特点:不真正做任何事。但是却有一定的用处:容易修改和维护、无障碍性(现代web,让任何人都能无障碍的访问网页)、搜索引擎优化。
2.1构建页面的元素
<article></article> 一块文章、新闻区域。
<aside></aside> 添加附注
<figcaption></figcaption> 插图标题
<figure></figure> 应用插图
<footer></footer> 标示页脚
<header></header> 头部
<hgroup></hgroup> 标题 里面放主标题、副标题,别的不放
<hgroup>
<h1>efgwerwq3</h1>
<h2>efgwerwq3</h2>
</hgroup>
<nav></nav> 标示一组导航
<section></section>
<details></details>
<summary></summary>
对于不识别这些新元素的浏览器 ,浏览器默认是显示为line元素。对于不认识的元素,应该显示为块级元素。有两种方式:
1.自定义
article,aside,figure,figcaption,footer,header,hgroup,nav,section,summary{
display:block;
}
2.引入
这里是使用的boostrap中兼容的小于IE9以下的浏览器
<script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
2.2标示文本
<mark>awfa</mark> 标记文本 ,默认是有黄色背景
<time>2017-7-1</time> 其实跟不同文本没区别,添加样式很方便
2.3web表单及交互
表单:就是一组文本框、列表、按钮及其他可以点击的小控件,通过这些小控件收集有关访客的某些信息。
2.3.1 input
<input type="text"> 添加了很多类型 button color image email number url tel range datatime data month week time color等
用placeholder=""添加提示信息,默认为灰色
<input type="text" placeholder="请输入.....">
用autofocus 自动获取焦点,表单中只能有一个
<input type="text" autofocus>
用required 验证非空,此为必填的字段。若添加这个属性的表单元素为空,当提交后,会有提示信息。
<input type="text" required>
可添加样式,与伪类结合以体验更好的体验:
必填时的样式
input:required{ background:red;
}
当提交会,无效时显示的样式
input:required:invalid{ background:blue;
}
更好的验证方式是正则表达式
2.3.2
<datalist id="id"></datalist> 用作下拉框,与input 一起使用,input中 指定list="id",即可选择,又可以手动输入。
<progress></progress> 进度条
<command>
<menu></menu>
<output></output> 用于js计算后,放一些数据的占位符,通常用span,现在可以用output
2.4音频、视频、插件
<audio src=""></audio>
<video src=""></video>
controls 属性可以允许用户控制音量,进度,暂停,播放等功能。autoplay 自动播放,背景播放,将controls 去掉就行。 loop循环播放。
video 比audio 多了几个属性 width=“300” height=“200” poster = "1.png" 视频的替换图片(视频出现问题时替换,例如找不到视频文件、第一帧没加载成功)
<audio src="1.mp3" controls autoplay loop ></audio>
<video src="2.mp4" controls autoplay loop width=“300” height=“200” poster = "1.png" ></video>
为了试用不同的浏览器,最好是将每种格式都列出来,这是就不要在元素上使用src,而是嵌套一组source,如下:
<audio controls>
<source src="1.mp3" type="audio/mp3" />
<source src="1.ogg" type="audio/ogg" />
</audio>
<embed src="" type=""> 插件方式
2.5画布
<canvas></canvas> 独特的地方就是用javascript去操作,可以开发炫酷的图形。其在HTML5中,只要3个属性就可以用了。
<canvas id="canvasDemo" width="300" height="300"></canvas> 基本单位为px
在js中使用,
1.首先要获取canvas对象:
var canvas = document.getElementById("canvasDemo");
2.获取二维绘图上下文
var context = canvas.getContext("2d");
画直线的例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<canvas id="canvasDemo" width="300" height="400"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("canvasDemo");
var context = canvas.getContext("2d");
context.moveTo(10, 10); //直线起点
context.lineTo(100,100); //直线终点
context.lineWidth = 10; // 线的宽度 默认单位为px
context.strokeStyle = "#abcd"; //线的颜色
context.lineCap = "butt"; //默认是butt round(圆头) square(长方头)
context.stroke(); //划线
</script>
</body>
</html>
当要绘制多个路线时,后面的样式会将前面的覆盖掉,因此应该在两个不同样式的图上面和下面(两个都必须用,否则后面依旧会覆盖前面的)用beginPath()开始画图、closePath()关闭画图。注意只用单个beginPath() 隔开也是可以的,但是不推荐,都加上,容易区分。
举个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<canvas id="canvasDemo" width="300" height="400"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("canvasDemo");
var context = canvas.getContext("2d");
// context.beginPath();
context.moveTo(10, 10);
context.lineTo(100,100);
context.lineWidth = 200;
context.strokeStyle = "yellow"; //被后面的blue 覆盖
context.lineCap = "butt";
context.stroke();
context.closePath(); //没用
//context.beginPath();
context.moveTo(100, 10);
context.lineTo(200,200);
context.lineWidth = 10; // 线的宽度 默认单位为px
context.strokeStyle = "blue"; //线的颜色
context.lineCap = "round"; //默认是butt round(圆头) square(长方头)
context.stroke();
context.closePath(); //没用
context.beginPath();
context.moveTo(120, 120);
context.lineTo(130,160);
context.lineWidth = 10;
context.strokeStyle = "red";
context.lineCap = "square";
context.stroke();
context.closePath();
</script>
</body>
</html>
绘制圆:
<script type="text/javascript">
var canvas = document.getElementById("canvasDemo");
var context = canvas.getContext("2d");
context.beginPath();
var centerX = 150; //圆心x坐标
var centerY = 300; //圆心y坐标
var radius = 50; //半径 50
var startAngle = 0; //绘图起点角度
var endAngle = 2*Math.PI; //终点角度
context.arc(centerX, centerY, radius, startAngle, endAngle); //画圆
context.strokeStyle = "red"; //轮廓填充颜色
context.fillStyle = "#abcdef"; // 内部填充颜色
context.fill(); //内部填充
context.stroke(); // 绘图
context.closePath();
</script>
贝塞尔曲线:
http://www.j--d.com 可动态调整曲线弯度和相应的代码。
2.转移坐标
如果在画布上存在很多的相同的图形,可以直接转移坐标系,达到在不同的位置画相同的图形。
例如:平移 translate(x,y) 将坐标系移到这个位置
<script type="text/javascript">
var canvas = document.getElementById("canvasDemo");
var context = canvas.getContext("2d");
context.rect(30, 30, 40, 40);
context.translate(100, 100); //坐标系转移到100 ,100的位置
context.rect(30, 30, 40, 40);
context.stroke();
</script>
旋转 rotate(deg)
<script type="text/javascript">
var canvas = document.getElementById("canvasDemo");
var context = canvas.getContext("2d");
context.translate(100, 100); //坐标系转移到100 ,100的位置
var copies = 10;
for(var i=0 ; i<copies;i++){
context.rotate(2*Math.PI*1/(copies-1)); //旋转角度
context.rect(0, 0, 40, 40);
};
context.stroke();
</script>
3.web存储
web存储都是存储在计算机上,分为本地存储localStorage,会话存储sessionStorage
localStorage长期保存在本地,不删除一直存在,限制在5MB;sessionStorage临时保存在一个打开的窗口的数据,在关闭窗口之前数据一直存在。
3.1 存储数据
localStorage["key"] = data sessionStorage["key"] = data
3.2 读取数据
localStorage['key'] sessionStorage["key"]
3.3 删除数据
localStorage.removeItem('key') sessionStorage.removeItem('key')
3.4清空数据
localStorage.clear() sessionStorage.clear()
注意默认的存储为文本形式,对于其他,例如数字,应该转换类型,否则会出错。
转化为数字 Number(localStroge['key'])
3.5 文件上传
本身不能做什么,要想保存数据,可以通过保存在本地或者是上传服务器。
4.离线应用
当网络中断时,之前的工作全部丢失,离线应用可以将网页暂时保存在本地,虽然部分功能不能用,但是等到有网时可以继续。
1.首先在网页的根目录下,建立一个.manifest的文件
2.在文件中,写入你要缓存的文件
CACHE MANIFEST
1.html
2.html
3.png
4.css
3.在要缓存的网页 1.html 2.html
的<html mainfest="文件名.manifest"></html>