H5快速学习

发布于:2025-06-18 ⋅ 阅读:(21) ⋅ 点赞:(0)

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 预加载策略:nonemetadataauto

四、视频标签 <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>

四、推荐加载顺序

  1. <meta>(编码、视口、描述)
  2. <title>
  3. <link>(样式)
  4. <style>(如有)
  5. <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>

三、实战目标

  1. 合法的文档声明与编码设置
  2. 使用语义结构标签(headermainsectionarticlefooter 等)
  3. 插入一张图片,带有 alt 文本
  4. 编写一个联系表单,包含邮箱输入框、文本框、提交按钮
  5. 包含一个推荐列表(侧边栏)、一个版权区域
  6. 页面头部引入样式文件与 JS 脚本
  7. 全部标签闭合、结构层次合理、嵌套合法
<!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 />
          <textarea
            id="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>

网站公告

今日签到

点亮在社区的每一天
去签到