本指南包含 HTML5 的核心特性、详细注释和实例代码,帮助您快速学习 HTML5。
HTML5 引入了一系列语义化标签,使页面结构更清晰,有助于搜索引擎理解内容。
<header>
<nav>
<main>
<section>
<article>
<aside>
<footer>
<figure>
<figcaption>
<mark>
<time>
<address>
<details>
<summary>
<progress>
<meter>
<dialog>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>语义化页面</title>
</head>
<body>
<!-- 页面头部 -->
<header>
<h1>网站标题</h1>
<!-- 导航栏 -->
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</header>
<!-- 主要内容 -->
<main>
<!-- 文章区块 -->
<section>
<h2>最新文章</h2>
<!-- 文章内容 -->
<article>
<h3>HTML5 新特性介绍</h3>
<p>HTML5 引入了许多新特性,如语义化标签、Canvas、本地存储等...</p>
<!-- 时间标签 -->
<time datetime="2023-01-01">2023年1月1日</time>
</article>
</section>
<!-- 侧边栏 -->
<aside>
<h3>热门标签</h3>
<ul>
<li><a href="#">HTML5</a></li>
<li><a href="#">CSS3</a></li>
<li><a href="#">JavaScript</a></li>
</ul>
</aside>
</main>
<!-- 页脚 -->
<footer>
<!-- 地址信息 -->
<address>
联系我们:info@example.com
</address>
<p>© 2023 网站名称. 保留所有权利.</p>
</footer>
</body>
</html>
Canvas 是 HTML5 引入的绘图 API,允许通过 JavaScript 在网页上绘制图形。
<canvas id="myCanvas" width="400" height="200">
您的浏览器不支持 Canvas 元素
</canvas>
<script>
// 获取 Canvas 元素
var canvas = document.getElementById('myCanvas');
// 获取 2D 绘图上下文
var ctx = canvas.getContext('2d');
// 绘制矩形
ctx.fillStyle = 'red'; // 设置填充颜色
ctx.fillRect(10, 10, 100, 50); // 绘制填充矩形 (x, y, 宽, 高)
// 绘制路径
ctx.beginPath(); // 开始路径
ctx.moveTo(150, 10); // 移动到起点
ctx.lineTo(200, 50); // 画线到指定点
ctx.lineTo(150, 90); // 画线到指定点
ctx.closePath(); // 关闭路径
ctx.strokeStyle = 'blue'; // 设置描边颜色
ctx.stroke(); // 描边路径
ctx.fillStyle = 'yellow'; // 设置填充颜色
ctx.fill(); // 填充路径
</script>
HTML5 引入了新的表单类型和属性,提供更好的用户体验和数据验证。
<!-- 电子邮件输入框:自动验证电子邮件格式 -->
<input type="email" placeholder="请输入邮箱">
<!-- URL 输入框:自动验证 URL 格式 -->
<input type="url" placeholder="请输入网址">
<!-- 数字输入框:只允许输入数字 -->
<input type="number" min="1" max="100" step="1" value="50">
<!-- 日期选择器:弹出日期选择界面 -->
<input type="date">
<!-- 时间选择器:弹出时间选择界面 -->
<input type="time">
<!-- 日期时间选择器 -->
<input type="datetime-local">
<!-- 月份选择器 -->
<input type="month">
<!-- 星期选择器 -->
<input type="week">
<!-- 颜色选择器:弹出颜色选择器 -->
<input type="color">
<!-- 搜索输入框:在某些浏览器中会显示清除按钮 -->
<input type="search" placeholder="搜索...">
<!-- 电话输入框:在移动设备上会显示数字键盘 -->
<input type="tel" placeholder="请输入电话号码">
<!-- 范围输入框:滑块控件 -->
<input type="range" min="0" max="100" value="50">
<!-- required:必填字段 -->
<input type="text" required>
<!-- placeholder:占位符文本 -->
<input type="text" placeholder="请输入内容">
<!-- autocomplete:自动完成 -->
<input type="text" autocomplete="on">
<!-- autofocus:自动聚焦 -->
<input type="text" autofocus>
<!-- pattern:正则表达式验证 -->
<input type="text" pattern="[0-9]{4}" title="请输入4位数字">
<!-- min/max/step:数值范围和步长 -->
<input type="number" min="1" max="100" step="5">
<!-- multiple:允许多选(用于文件输入) -->
<input type="file" multiple>
<!-- accept:指定文件类型 -->
<input type="file" accept="image/*">
HTML5 提供了 <audio> 和 <video> 元素,用于在网页中播放音频和视频。
<!-- 基本音频播放器 -->
<audio controls>
<source src="audio.mp3" type="audio/mpeg">
<source src="audio.ogg" type="audio/ogg">
您的浏览器不支持音频元素
</audio>
<!-- 自动播放且循环 -->
<audio autoplay loop>
<source src="background.mp3" type="audio/mpeg">
</audio>
<!-- 基本视频播放器 -->
<video controls width="400" height="300">
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
您的浏览器不支持视频元素
</video>
<!-- 自动播放、静音、循环 -->
<video autoplay muted loop width="400" height="300">
<source src="background.mp4" type="video/mp4">
</video>
HTML5 提供了 localStorage 和 sessionStorage API,用于在客户端存储数据。
localStorage 存储的数据会永久保存,除非手动清除。
// 存储数据
localStorage.setItem('username', '张三');
localStorage.setItem('age', '25');
// 获取数据
var username = localStorage.getItem('username');
console.log(username); // 输出:张三
// 删除数据
localStorage.removeItem('age');
// 清除所有数据
localStorage.clear();
// 遍历所有存储的数据
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
var value = localStorage.getItem(key);
console.log(key + ': ' + value);
}
sessionStorage 存储的数据仅在当前会话中有效,关闭浏览器标签后会被清除。
// 存储数据
sessionStorage.setItem('token', 'abc123');
// 获取数据
var token = sessionStorage.getItem('token');
// 删除数据
sessionStorage.removeItem('token');
// 清除所有数据
sessionStorage.clear();
HTML5 的 Geolocation API 允许获取用户的地理位置。
// 检查浏览器是否支持地理定位
if (navigator.geolocation) {
// 获取当前位置
navigator.geolocation.getCurrentPosition(
function(position) {
// 成功回调
var latitude = position.coords.latitude; // 纬度
var longitude = position.coords.longitude; // 经度
var accuracy = position.coords.accuracy; // 精度(米)
console.log('纬度:' + latitude);
console.log('经度:' + longitude);
console.log('精度:' + accuracy + '米');
},
function(error) {
// 错误回调
switch(error.code) {
case error.PERMISSION_DENIED:
console.log('用户拒绝了地理定位请求');
break;
case error.POSITION_UNAVAILABLE:
console.log('位置信息不可用');
break;
case error.TIMEOUT:
console.log('获取位置超时');
break;
case error.UNKNOWN_ERROR:
console.log('未知错误');
break;
}
},
{
// 选项
enableHighAccuracy: true, // 启用高精度
timeout: 5000, // 超时时间(毫秒)
maximumAge: 0 // 缓存时间(毫秒)
}
);
} else {
console.log('您的浏览器不支持地理定位');
}
Web Workers 允许在后台线程中执行 JavaScript 代码,避免阻塞主线程。
// 创建 Worker
var worker = new Worker('worker.js');
// 向 Worker 发送消息
worker.postMessage('Hello Worker!');
// 接收 Worker 发送的消息
worker.onmessage = function(event) {
console.log('收到 Worker 的消息:' + event.data);
};
// 处理错误
worker.onerror = function(error) {
console.error('Worker 错误:' + error.message);
};
// 终止 Worker
// worker.terminate();
// 接收主线程发送的消息
self.onmessage = function(event) {
console.log('收到主线程的消息:' + event.data);
// 执行耗时操作
var result = 0;
for (var i = 0; i < 1000000000; i++) {
result += i;
}
// 向主线程发送结果
self.postMessage('计算结果:' + result);
};
WebSocket 提供了浏览器与服务器之间的全双工通信通道。
// 创建 WebSocket 连接
var socket = new WebSocket('ws://echo.websocket.org');
// 连接建立时
socket.onopen = function(event) {
console.log('WebSocket 连接已建立');
// 发送消息
socket.send('Hello WebSocket!');
};
// 接收消息
socket.onmessage = function(event) {
console.log('收到消息:' + event.data);
};
// 连接关闭时
socket.onclose = function(event) {
console.log('WebSocket 连接已关闭');
};
// 发生错误时
socket.onerror = function(error) {
console.error('WebSocket 错误:' + error);
};
// 关闭连接
// socket.close();
HTML5 提供了拖放 API,允许用户通过鼠标拖放元素。
<!-- 可拖动元素 -->
<div draggable="true" id="dragElement">可拖动的元素</div>
<!-- 放置目标 -->
<div id="dropTarget">放置目标</div>
<script>
// 获取元素
var dragElement = document.getElementById('dragElement');
var dropTarget = document.getElementById('dropTarget');
// 拖动开始时
dragElement.addEventListener('dragstart', function(event) {
// 设置拖动数据
event.dataTransfer.setData('text/plain', '这是拖动的数据');
// 设置拖动效果
event.dataTransfer.effectAllowed = 'copy';
});
// 拖动结束时
dragElement.addEventListener('dragend', function(event) {
console.log('拖动结束');
});
// 拖动元素进入放置目标时
dropTarget.addEventListener('dragenter', function(event) {
// 阻止默认行为
event.preventDefault();
// 添加样式
this.style.backgroundColor = '#e3f2fd';
});
// 拖动元素在放置目标上移动时
dropTarget.addEventListener('dragover', function(event) {
// 阻止默认行为,允许放置
event.preventDefault();
});
// 拖动元素离开放置目标时
dropTarget.addEventListener('dragleave', function(event) {
// 恢复样式
this.style.backgroundColor = '';
});
// 放置元素时
dropTarget.addEventListener('drop', function(event) {
// 阻止默认行为
event.preventDefault();
// 恢复样式
this.style.backgroundColor = '';
// 获取拖动数据
var data = event.dataTransfer.getData('text/plain');
console.log('放置的数据:' + data);
});
</script>
HTML5 配合 CSS3 的媒体查询,可以实现响应式设计,使页面在不同设备上显示良好。
<!-- 内部样式中的媒体查询 -->
<style>
/* 默认样式 */
body {
font-size: 16px;
}
/* 当屏幕宽度小于 768px 时 */
@media (max-width: 768px) {
body {
font-size: 14px;
}
.container {
width: 100%;
padding: 10px;
}
}
/* 当屏幕宽度小于 480px 时 */
@media (max-width: 480px) {
body {
font-size: 12px;
}
.container {
padding: 5px;
}
}
</style>
<!-- 使用 srcset 属性提供不同分辨率的图片 -->
<img
src="small.jpg"
srcset="small.jpg 480w, medium.jpg 768w, large.jpg 1200w"
sizes="(max-width: 480px) 480px, (max-width: 768px) 768px, 1200px"
alt="响应式图片"
>
<!-- 使用 picture 元素根据屏幕尺寸选择图片 -->
<picture>
<source media="(max-width: 480px)" srcset="small.jpg">
<source media="(max-width: 768px)" srcset="medium.jpg">
<img src="large.jpg" alt="响应式图片">
</picture>
尝试调整浏览器窗口大小,观察区块布局的变化。
<!-- 使元素内容可编辑 -->
<div contenteditable="true">点击此处编辑内容...</div>
<!-- 使用 data-* 属性存储自定义数据 -->
<div data-user-id="123" data-user-name="张三">用户信息</div>
<script>
var element = document.querySelector('div');
var userId = element.dataset.userId; // 获取数据属性
var userName = element.dataset.userName;
console.log('用户ID:' + userId); // 输出:用户ID:123
console.log('用户名:' + userName); // 输出:用户名:张三
// 设置数据属性
element.dataset.userAge = '25';
</script>
<!-- 用于显示计算结果 -->
<form oninput="result.value = parseInt(a.value) + parseInt(b.value)">
<input type="number" id="a" value="0"> +
<input type="number" id="b" value="0"> =
<output name="result" for="a b">0</output>
</form>
<!-- 进度条 -->
<progress value="70" max="100">70%</progress>
<!-- 度量 -->
<meter value="0.6" min="0" max="1" low="0.3" high="0.8" optimum="0.5">60%</meter>
<!-- 可展开/折叠的内容 -->
<details>
<summary>点击查看详细信息</summary>
<p>这里是详细信息内容...</p>
</details>
这里是详细信息内容,包括HTML5的各种新特性和用法。HTML5为网页开发带来了许多新的功能,如语义化标签、Canvas、本地存储、地理位置等。通过学习这些特性,可以创建更加丰富和交互性强的网页应用。
HTML5 引入了许多新特性,使网页开发更加丰富和强大。以下是 HTML5 的主要特性:
通过学习和掌握这些特性,可以创建更加现代化、交互性强的网页应用。