H5快速学习
M1:HTML 基本结构与声明规范
一、标准 HTML5 文档结构
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>标准HTML5页面</title>
</head>
<body><!-- 页面内容写在这里 -->
</body>
</html>
二、部分详解
1. <!DOCTYPE html>
-
声明文档使用的是 HTML5。
-
必须放在文档最顶端,不能有任何内容(含空格)在前面。
-
不属于 HTML 标签,它是 SGML 遗留语法,为浏览器触发“标准模式”而设。
2. <html lang="zh-CN">
-
lang
属性:指明页面使用的语言,对语音阅读器、SEO、翻译工具友好。 -
W3C推荐以 IETF BCP 47(如 zh-CN、en-US)声明语言。
3. <head>
元信息头部
包含不会在页面中直接渲染的“文档元数据”。
标签 | 功能 |
---|---|
<meta charset="UTF-8"> | 定义页面使用 UTF-8 编码,保证中英文字符正确显示 |
<meta name="viewport"...> | 为响应式设计优化移动端显示(非 HTML 核心,但为 Web App 推荐) |
<title> | 网页标签栏显示的标题,W3C 强制必须存在 |
4. <body>
-
所有页面内容、结构、语义标签、脚本都应写在
<body>
中。 -
只允许有一个
<body>
元素。
三、补充参考
-
HTML Living Standard:https://html.spec.whatwg.org/
-
HTML Element Index(所有元素规范):https://html.spec.whatwg.org/multipage/indices.html#elements-3
-
DOCTYPE 规范:https://html.spec.whatwg.org/#the-doctype
M2:HTML 元素分类与嵌套规则
一、HTML 元素五大分类
分类名 | 说明 | 常见标签示例 |
---|---|---|
元素类型 | 内容模型定义 | 标签示例 |
元数据内容(Metadata content) | 文档元信息,位于 <head> 中 | <title> <meta> <link> <style> <script> |
流内容(Flow content) | 网页中可出现在 <body> 中的任何内容 | 几乎所有标签 |
段落内容(Sectioning content) | 构建文档结构的内容区域 | <article> <section> <nav> <aside> |
嵌入内容(Embedded content) | 插入媒体或外部资源 | <img> <video> <audio> <iframe> <canvas> <svg> |
交互内容(Interactive content) | 用户可交互元素 | <a> <button> <details> <input> <label> <textarea> |
一个标签可以同时属于多个分类。
二、嵌套规则与嵌套合法性
HTML 不是随便嵌套的,遵循 父子关系 + 分类兼容 原则
<article><h2>标题</h2><p>段落文字</p><section><h3>子部分</h3><p>子段落</p></section>
</article>
交互元素不可嵌套
<a href="#"><button>错误嵌套</button> <!-- ❌ 错误:不能把交互内容嵌套在<a>里 -->
</a>
head 外使用 meta
<body><meta charset="UTF-8"> <!-- ❌ 错误:meta只能在<head>中 -->
</body>
<p>
中不能包含块级标签如 div
<p>开始<div>不合法的嵌套</div> <!-- ❌ -->
</p>
M3:文本内容标签
一、标题标签:<h1>
~ <h6>
-
共6级,
<h1>
表示最高层级标题,<h6>
最低。 -
用于文档结构分层,不是为了设置字体大小(那是 CSS 的事)。
-
每个页面建议只使用一个
<h1>
,表示页面主标题。
<h1>网站主标题</h1>
<h2>新闻中心</h2>
<h3>行业动态</h3>
二、段落标签:<p>
-
表示一段文字,自动在前后添加空行。
-
是 HTML 中最基本的文本容器。
-
禁止在
<p>
中嵌入块级元素(如<div>
、<section>
、<img>
等)。
三、换行标签:<br>
-
强制换行,用于诗句、地址、单行注释等非常规文本排布。
-
是空元素,不能包裹任何内容。
四、水平线标签:<hr>
-
表示内容主题的变化或分隔。
-
渲染为一条水平线。
-
也是空元素,不需要闭合。
五、引用标签:<blockquote>
-
表示长文本引用,通常是外部来源。
-
可以使用
cite
属性注明来源。 -
内容中可以包含多个
<p>
、标题、列表等块级元素。
<blockquote cite="https://example.com/article"><p>这是引用的一段文字,可能来自其他网站。</p>
</blockquote>
六、预格式文本:<pre>
-
用于保留空格、换行、缩进等格式。
-
常用于代码展示或 ASCII 图表。
-
可配合
<code>
一起使用。
<pre>
function test() {console.log("Hello World");
}
</pre>
七、行内语义标签(了解)
-
<strong>
:表示强调,通常渲染为加粗 -
<em>
:表示语气强调,通常渲染为斜体 -
<code>
:表示代码片段(行内) -
<abbr title="HyperText Markup Language">HTML</abbr>
:缩写解释 -
<mark>
:高亮关键词(搜索结果等)
M4:语义结构标签
一、结构性语义标签汇总
标签 | 语义说明 | 可包含内容 |
---|---|---|
<header> | 页头、区块头部(可以有多个) | 标题、导航、Logo 等 |
<footer> | 页脚、区块结尾信息 | 版权、作者、导航等 |
<nav> | 导航栏,内部应包含链接 | 菜单链接列表 |
<main> | 页面主内容(仅限一个) | 核心结构块 |
<section> | 内容区块(有标题) | 通常带有 <h*> |
<article> | 独立内容块 | 可单独分发(如博客、新闻) |
<aside> | 附属内容 | 侧边栏、提示、引用 |
二、用法与示例
<header>
可出现在 <body>
或 <section>
内部,表示某部分的头部区域。
<header><h1>我的博客</h1><nav><a href="/">主页</a><a href="/posts">文章</a></nav>
</header>
<footer>
页面或区块底部信息,常用于版权、联系方式等。
<footer><p>版权 © 2025 我的博客</p>
</footer>
<nav>
包含导航链接的区块,应只用于真正的主要导航集合。
<nav><ul><li><a href="/home">首页</a></li><li><a href="/about">关于</a></li></ul>
</nav>
<main>
整个页面的核心内容区域,每个文档只能有一个 <main>
标签。
<main><article><h2>最新文章</h2><p>这是博客文章的内容段落。</p></article>
</main>
<section>
内容区块,建议有标题。用于逻辑分组内容(新闻、评论、FAQ等)。
<section><h2>常见问题</h2><p>你可以问的问题如下……</p>
</section>
<article>
独立可复用的内容单元,可单独抓取或再发布。常用于博客文章、新闻条目、论坛贴文。
<article><h2>第1篇博客</h2><p>这是博客正文……</p>
</article>
<aside>
用于当前页面的补充信息,不是主要内容。常见于侧边栏、广告、提示框等。
<aside><h3>相关文章</h3><ul><li><a href="#">如何写语义化 HTML</a></li></ul>
</aside>
三、结构化布局推荐
<body><header>...</header><nav>...</nav><main><article>...</article><section>...</section><aside>...</aside></main><footer>...</footer>
</body>
四、常见误区
❌ 错误做法 | ✅ 替代方法 |
---|---|
所有结构都用 <div> | 使用 <section> 、<article> 表达语义 |
页面中多个 <main> | 每页仅允许一个 <main> |
用 <nav> 包所有链接 | <nav> 只用于主导航区域,不含页面内容区跳转 |
忽略 <header> 、<footer> 作用 | 每个 <section> /<article> 块可独立拥有自己的 <header> /<footer> |
M5:链接与媒体资源
一、超链接标签 <a>
作用:创建指向页面内部、外部或锚点的链接。
<a href="https://example.com">跳转到站外</a>
常用属性:
属性 | 说明 |
---|---|
href | 指定跳转地址(必需) |
target="_blank" | 在新标签页打开链接 |
download | 下载链接资源 |
rel="noopener" | 新窗口打开时提高安全性(配合 _blank 使用) |
<a href="https://www.w3.org" target="_blank" rel="noopener">访问W3C</a>
二、图像标签 <img>
作用:用于嵌入图片(内容图或装饰图)。
<img src="avatar.jpg" alt="用户头像">
常用属性:
属性 | 说明 |
---|---|
src | 图像路径(本地或远程) |
alt | 图片加载失败时显示的替代文本(必须写) |
width / height | 设置图像大小 |
loading="lazy" | 懒加载图像(HTML5标准) |
不能直接写在
<p>
中,应放在段落外或独立结构中可配合
<figure>
使用,增强语义
<figure><img src="sunrise.jpg" alt="日出"><figcaption>清晨的山间日出</figcaption>
</figure>
三、音频标签 <audio>
作用:嵌入音频播放功能(HTML5 新增)
<audio controls><source src="music.mp3" type="audio/mpeg">您的浏览器不支持 audio 标签。
</audio>
常用属性:
属性 | 说明 |
---|---|
controls | 显示音频控制面板 |
autoplay | 自动播放(慎用) |
loop | 播放完自动重新开始 |
muted | 默认静音 |
preload | 预加载策略:none 、metadata 、auto |
四、视频标签 <video>
作用:嵌入视频播放器
<video controls width="400"><source src="demo.mp4" type="video/mp4">您的浏览器不支持 video 标签。
</video>
常用属性与 <audio>
基本一致
可增加 封面图:
<video controls poster="cover.jpg">
可增加多种格式支持:
<source src="video.webm" type="video/webm">
五、可访问性与性能建议
标签 | 最关键的可访问性措施 |
---|---|
<img> | 必写 alt ,不应为空 |
<a> | 链接内容要有可读性(避免仅用图标) |
<audio> / <video> | 提供字幕 / 文本说明;避免自动播放 |
媒体 | 加载大文件应使用 loading="lazy" 或响应式加载策略 |
M6:列表与表格结构
一、列表标签
<ul>
:无序列表
适用于:导航栏、清单、选项
子项用
<li>
包裹,顺序不重要
<ul><li>HTML</li><li>CSS</li><li>JavaScript</li>
</ul>
<ol>
:有序列表
适用于:步骤、流程、排名
默认数字编号,支持自定义类型
<ol type="1" start="3"><li>打开网页</li><li>点击登录</li><li>输入信息</li>
</ol>
常用 type
值:
1
(默认数字)a
(小写字母)A
(大写字母)i
(小写罗马)I
(大写罗马)
<dl>
:定义列表
适用于术语与解释、FAQ、键值结构
结构由
<dt>
(定义项)与<dd>
(定义内容)组成
<dl><dt>HTML</dt><dd>超文本标记语言</dd><dt>CSS</dt><dd>层叠样式表</dd>
</dl>
二、表格结构
<table><thead><tr><th>姓名</th><th>年龄</th></tr></thead><tbody><tr><td>张三</td><td>25</td></tr><tr><td>李四</td><td>30</td></tr></tbody>
</table>
常用子标签:
标签 | 说明 |
---|---|
<table> | 表格容器 |
<thead> | 表格头部 |
<tbody> | 表格主体 |
<tfoot> | 表格尾部(如总计) |
<tr> | 表格行 |
<th> | 表头单元格(加粗+居中) |
<td> | 普通单元格 |
合法结构建议:
-
<thead>
、<tbody>
、<tfoot>
都可选,但推荐结构化使用 -
<thead>
必须在<tbody>
前 -
<th>
用于列名或行标题,具语义意义
合并列(横向):
<td colspan="2">合并两列</td>
合并行(纵向):
<td rowspan="3">合并三行</td>
表格语义增强:
-
<caption>
:表格标题(必须在<table>
内第一个位置) -
<colgroup>
+<col>
:用于列样式控制 -
使用
<scope="col">
/<scope="row">
增强可访问性
<table><caption>学生成绩表</caption><thead><tr><th scope="col">姓名</th><th scope="col">数学</th></tr></thead>
</table>
三、嵌套结构示意
<ul><li>前端<ul><li>HTML</li><li>CSS</li></ul></li><li>后端</li>
</ul>
M7:表单结构与控件
一、表单结构 <form>
<form action="/submit" method="post"><!-- 表单控件 -->
</form>
属性 | 说明 |
---|---|
action | 表单提交地址(URL) |
method | 请求方式(get / post ) |
autocomplete | 是否自动填充(on/off) |
novalidate | 禁用 HTML5 表单验证 |
target | 提交后页面跳转目标 |
二、输入控件 <input>
<input type="text" name="username" placeholder="请输入用户名" required>
常见 type
类型
类型 | 说明 |
---|---|
text | 单行文本 |
password | 密码输入 |
email | 邮箱格式验证 |
number | 数字(可用 ↑↓) |
checkbox | 多选框 |
radio | 单选框 |
submit / reset / button | 按钮控件 |
date / time | 日期时间选择 |
file | 上传文件 |
range | 滑动条(0~100) |
示例:文本 + 密码 + 提交按钮
<form><label for="user">用户名:</label><input type="text" id="user" name="user" required><label for="pass">密码:</label><input type="password" id="pass" name="pass" required><input type="submit" value="登录">
</form>
三、下拉菜单 <select>
<label for="lang">选择语言:</label>
<select id="lang" name="language"><option value="html">HTML</option><option value="css">CSS</option><option value="js">JavaScript</option>
</select>
可配合
multiple
实现多选菜单
四、多行文本框 <textarea>
<label for="msg">留言:</label>
<textarea id="msg" name="message" rows="5" cols="40"></textarea>
五、常用表单控件辅助标签
标签 | 说明 |
---|---|
<label for="id"> | 与表单控件绑定,点击 label 聚焦控件 |
<fieldset> | 分组多个控件,推荐用于复杂表单结构 |
<legend> | 为 <fieldset> 提供标题说明 |
<datalist> | 配合 <input list> 提供输入建议 |
**<datalist>
示例:**
<input list="fruits" name="fruit">
<datalist id="fruits"><option value="苹果"><option value="香蕉"><option value="西瓜">
</datalist>
六、HTML5 原生验证属性
属性 | 说明 |
---|---|
required | 必填 |
pattern | 自定义正则验证 |
min / max / step | 数值、日期范围控制 |
maxlength | 最大输入长度 |
placeholder | 占位提示 |
readonly / disabled | 只读/禁用输入框 |
M7:表单结构与控件
一、表单结构 <form>
<form action="/submit" method="post"><!-- 表单控件 -->
</form>
属性 | 说明 |
---|---|
action | 表单提交地址(URL) |
method | 请求方式(get / post ) |
autocomplete | 是否自动填充(on/off) |
novalidate | 禁用 HTML5 表单验证 |
target | 提交后页面跳转目标 |
二、输入控件 <input>
<input type="text" name="username" placeholder="请输入用户名" required>
常见 type
类型
类型 | 说明 |
---|---|
text | 单行文本 |
password | 密码输入 |
email | 邮箱格式验证 |
number | 数字(可用 ↑↓) |
checkbox | 多选框 |
radio | 单选框 |
submit / reset / button | 按钮控件 |
date / time | 日期时间选择 |
file | 上传文件 |
range | 滑动条(0~100) |
示例:文本 + 密码 + 提交按钮
<form><label for="user">用户名:</label><input type="text" id="user" name="user" required><label for="pass">密码:</label><input type="password" id="pass" name="pass" required><input type="submit" value="登录">
</form>
三、下拉菜单 <select>
<label for="lang">选择语言:</label>
<select id="lang" name="language"><option value="html">HTML</option><option value="css">CSS</option><option value="js">JavaScript</option>
</select>
可配合
multiple
实现多选菜单
四、多行文本框 <textarea>
<label for="msg">留言:</label>
<textarea id="msg" name="message" rows="5" cols="40"></textarea>
五、常用表单控件辅助标签
标签 | 说明 |
---|---|
<label for="id"> | 与表单控件绑定,点击 label 聚焦控件 |
<fieldset> | 分组多个控件,推荐用于复杂表单结构 |
<legend> | 为 <fieldset> 提供标题说明 |
<datalist> | 配合 <input list> 提供输入建议 |
**<datalist>
示例:**
<input list="fruits" name="fruit">
<datalist id="fruits"><option value="苹果"><option value="香蕉"><option value="西瓜">
</datalist>
六、HTML5 原生验证属性
属性 | 说明 |
---|---|
required | 必填 |
pattern | 自定义正则验证 |
min / max / step | 数值、日期范围控制 |
maxlength | 最大输入长度 |
placeholder | 占位提示 |
readonly / disabled | 只读/禁用输入框 |
M8:元数据与脚本结构(HTML Head 部分)
一、<head>
的语义作用
-
定义页面元信息(metadata)
-
加载样式与脚本资源
-
不显示在浏览器主界面中
-
是
<html>
的直接子元素,必须存在
二、常用 Head 标签详解
<meta>
:元数据标签
页面编码(必须放在最前)
<meta charset="UTF-8">
视口设置(移动端响应式页面)
<meta name="viewport" content="width=device-width, initial-scale=1.0">
SEO / 社交分享(可选项)
<meta name="description" content="这是一个HTML学习页面">
<meta name="author" content="Your Name">
<meta property="og:title" content="页面标题">
禁止缓存(部分场景需要)
<meta http-equiv="Cache-Control" content="no-cache">
<title>
:页面标题
<title>我的网页标题</title>
<link>
:外部资源链接
引入外部 CSS 样式表
<link rel="stylesheet" href="style.css">
网站图标(Favicon)
<link rel="icon" href="/favicon.ico" type="image/x-icon">
字体、预加载资源(优化性能)
<link rel="preconnect" href="https://fonts.googleapis.com">
<style>
:内联样式表
<style>body {background-color: #f2f2f2;font-family: Arial;}
</style>
<script>
:引入 JS 脚本
行内 JS
<script>console.log('页面已加载');
</script>
外部 JS 文件
<script src="main.js"></script>
推荐放在页面底部或使用 defer
<script src="main.js" defer></script>
属性 | 说明 |
---|---|
defer | 等待文档解析完成后再执行(顺序执行) |
async | 异步加载并立即执行(执行顺序不保证) |
<base>
:基础链接路径
<base href="https://example.com/">
所有相对路径都基于此
base
;必须在<head>
中最前面出现一次。
三、完整示例 Head 结构
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="一个 HTML5 教学页面"><title>HTML5 教学</title><link rel="icon" href="/favicon.ico" type="image/x-icon"><link rel="stylesheet" href="style.css"><script src="main.js" defer></script>
</head>
四、推荐加载顺序
<meta>
(编码、视口、描述)<title>
<link>
(样式)<style>
(如有)<script>
(加defer
)
M9:HTML5 API 标签
一、<canvas>
:位图绘图区域
作用:提供一个可通过 JavaScript 进行 2D 或 3D 绘图的容器;自身不显示内容,仅作为“画布
<canvas id="chart" width="400" height="300">当前浏览器不支持 canvas。
</canvas>
属性 | 说明 |
---|---|
width / height | 设置画布尺寸(非 CSS 尺寸) |
id | 用于 JS 选取绘图上下文 |
结构合法性:不可嵌入可视内容,通常为空容器。
二、<svg>
:矢量图容器
作用:嵌入可缩放矢量图(SVG),不失真,适用于图标、动画、数据可视化等
<svg width="100" height="100"><circle cx="50" cy="50" r="40" fill="blue" />
</svg>
可内联或使用
<img src="xxx.svg">
引入外部 SVG 文件。
三、<template>
:模板内容块
作用:声明一段 HTML 模板,默认不会渲染在页面中,供 JavaScript 克隆插入
示例结构:
<template id="card-template"><div class="card"><h3>标题</h3><p>描述内容</p></div>
</template>
<template>
内容不会出现在 DOM 渲染树中- 不能直接在模板内运行脚本、触发事件,需通过 JS 激活
四、<slot>
:Web Component 插槽
作用:用于 Web Component 中定义插槽(内容占位符)
<my-card><span slot="title">我是标题</span><span slot="content">我是内容</span>
</my-card>
通常在组件定义中:
<template><h3><slot name="title"></slot></h3><p><slot name="content"></slot></p>
</template>
非组件开发中不会直接使用,但需了解其结构和嵌套关系。
五、<dialog>
:原生对话框组件
作用:创建模态或非模态弹窗,HTML5 新增语义结构;内置显示/关闭控制方法(需 JS 触发)
<dialog id="popup"><p>这是一个对话框</p><button onclick="popup.close()">关闭</button>
</dialog>
dialog.show()
和dialog.close()
通过 JS 控制显示行为。
六、标签对比总结(结构层面)
标签 | 是否默认显示 | 是否配合 JS | 是否可嵌套内容 | 典型用途 |
---|---|---|---|---|
<canvas> | 否 | ✅ 强依赖 | ❌(非可视) | 绘图 |
<svg> | ✅ | 可选 | ✅ | 图形、图标 |
<template> | 否 | ✅ | ✅(但不渲染) | 页面模板 |
<slot> | 否 | ✅(组件) | ✅ | Web Components |
<dialog> | 否(需 JS 激活) | ✅ | ✅ | 原生弹窗 |
M10:综合页面结构构建
一、项目说明:HTML5 语义化个人主页
页面模块结构:
区块 | 内容组成 | 对应标签 |
---|---|---|
顶部区域 | 页面标题 + 导航菜单 | <header> + <nav> |
主体内容 | 一篇介绍文章 + 一张图片 + 联系表单 | <main> + <article> + <img> + <form> |
侧边栏 | 推荐文章(列表) | <aside> + <ul> |
页面底部 | 版权信息 | <footer> |
元信息 | 页面元数据、样式、脚本 | <head> (含 <meta> 、<title> 、<link> 、<script> ) |
二、综合结构示例(结构图)
<!DOCTYPE html>
<html lang="zh-CN">├── <head>└── <body>├── <header>│ └── <nav>├── <main>│ ├── <article>│ │ └── <img>│ ├── <form>│ └── <aside>└── <footer>
三、实战目标
- 合法的文档声明与编码设置
- 使用语义结构标签(
header
、main
、section
、article
、footer
等) - 插入一张图片,带有
alt
文本 - 编写一个联系表单,包含邮箱输入框、文本框、提交按钮
- 包含一个推荐列表(侧边栏)、一个版权区域
- 页面头部引入样式文件与 JS 脚本
- 全部标签闭合、结构层次合理、嵌套合法
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><mata name="description" content="基于HTML5语言结构主页" /><title>我的个人主页</title><link rel="stylesheet" href="style.css" /><script src="main.js" defer></script></head><body><header><h1>主页</h1><nav><ul><li><a href="#about">about</a></li><li><a href="#contact">contact</a></li><li><a href="#posts">posts</a></li></ul></nav></header><main><article id="about"><h2>关于我</h2><p>nothing</p><figure><img src="357.jpg" alt="测试图片" /><figcaption>没有照片的照片</figcaption></figure></article><section id="contact"><h2>联系方式</h2><form action="#"><label for="email">电子邮箱</label><input type="email" id="email" name="email" required /><br /><br /><label for="message">留言:</label><br /><textareaid="message"name="message"rows="5"cols="40"required></textarea><br /><br /><input type="submit" value="发送" /></form></section><aside id="posts"><h2>阅读</h2><ul><li><a href="#">猎魔人</a></li><li><a href="#">百年孤独</a></li><li><a href="#">史蒂夫·乔布斯传</a></li></ul></aside></main><footer><p>底部</p></footer></body>
</html>