FE-01-HTML5 语义化与现代表单
本节目标:理解 HTML5 语义化标签的使用场景、文档大纲、可访问性,以及现代表单控件和验证 API。
1. 为什么要语义化
语义化 HTML = 用对的标签表达对的内容,而不是全部 <div> + <span> + class。
好处:
- 可访问性:屏幕阅读器、盲文显示器能正确解析
- SEO:搜索引擎能理解页面结构
- 可维护性:代码即文档,结构清晰
- 性能:浏览器能少渲染、多复用
- 跨设备:适配未来的设备/浏览器
2. 文档结构标签
1 |
|
核心标签对照:
| 标签 | 用途 | 别用 |
|---|---|---|
<header> |
页面/区块的头部 | 不要每个 div 都套 |
<nav> |
主要导航 | 不用在所有链接组 |
<main> |
页面主体(每页唯一) | 不要嵌在 article 里 |
<article> |
独立可分发的内容(博客、新闻) | 简单的卡片别用 |
<section> |
有标题的主题分组 | 单纯样式分组用 div |
<aside> |
侧边栏/相关补充 | 任何次要内容 |
<footer> |
页面/区块底部 | 同 header |
<h1> ~ <h6> |
标题层级(不要跳级) | 不要为大小用 |
3. 内容语义标签
1 | <!-- 文本 --> |
4. 图标与插图
1 | <!-- SVG 直接内联(推荐,小图标) --> |
5. ARIA 属性(无障碍)
ARIA = Accessible Rich Internet Applications。W3C 标准,给辅助技术补充信息。
5 条 ARIA 规则:
- 优先用原生 HTML 标签(
<button>而不是<div role="button">) - 不要改原生语义(
<h2 role="tab">❌) - 所有交互控件必须键盘可达
- 不要用
role="presentation"隐藏可读元素 - 所有可交互元素必须有可访问名
1 | <!-- 标签关联(屏幕阅读器读出"用户名") --> |
6. HTML5 表单新特性
6.1 新的 input type
1 | <form> |
6.2 自动验证属性
1 | <input type="text" |
6.3 验证 API
1 | <form id="signup" novalidate> |
validity 对象属性:
valid:是否合法valueMissing:必填但空typeMismatch:类型不匹配(email/url/number)patternMismatch:正则不匹配tooShort/tooLong:长度超限rangeUnderflow/rangeOverflow:数值超界stepMismatch:不满足 stepbadInput:输入无法解析
6.4 <datalist> 自动补全
1 | <input list="browsers" name="browser"> |
6.5 <output> 显示计算结果
1 | <form oninput="result.value = parseInt(a.value) + parseInt(b.value)"> |
7. 现代表单组件实战
1 | <form> |
8. SEO 最佳实践
1 | <head> |
9. 性能相关的 HTML 技巧
1 | <!-- 关键资源预加载 --> |
10. 可访问性 checklist
- 所有图片有
alt(装饰性用alt="") - 所有交互元素键盘可达(Tab 顺序合理)
- focus 状态有视觉提示(不要
outline: none) - 表单字段有关联的
<label> - 标题层级不跳级(h1 → h2 → h3)
- 语言标记
<html lang="..."> - 颜色对比度 ≥ 4.5:1(正文)/ 3:1(大字号)
- 错误消息用
aria-live或role="alert" - 动效用
prefers-reduced-motion兼容 - 用 axe / Lighthouse / WAVE 检测
小结
| 主题 | 要点 |
|---|---|
| 语义化 | 用对的标签,不要 div 套一切 |
| 文档结构 | header/nav/main/article/section/aside/footer |
| 媒体 | figure+figcaption、picture、video+track |
| 表单 | type=email/url/date、required、pattern |
| 验证 | HTML5 原生 + Constraint Validation API |
| a11y | ARIA 是补充,不是替代原生 HTML |
| SEO | title/description/og:*/JSON-LD |
下一节讲 CSS3 进阶:Flexbox、Grid、动画、容器查询——真正写”现代 CSS”。