HTML 与 CSS 响应式布局:从语义化到现代布局与无障碍
0. 元信息
- 主题路径:
docs/topics/html-css-responsive/README.md - 主分类:前端与客户端
- 辅助分类:工程技术 / 无障碍
- 适合对象:会用 HTML/CSS 写静态页、想系统掌握语义化、CSS 基础、现代布局、响应式策略与可访问性的开发者
- 建议周期:4~6 周(每周 10~14 小时,至少 60% 时间写代码 + 1 屏实测)
- 前置知识:会写 HTML/CSS、能用浏览器 DevTools、无后端依赖
- 最终目标:能独立设计并实现一套兼容桌面/平板/手机/打印的完整响应式页面,且通过 WCAG 2.2 AA 关键审计
1. 学习路线
语义化 HTML5 与 landmark
→ 表单与可访问控件
→ CSS 基础(盒模型 / 文档流 / 定位 / 继承 / 优先级)
→ Flexbox 完整模型
→ Grid 二维布局
→ Container Queries 与流式排版
→ 颜色、对比度、OKLCH、prefers-color-scheme
→ 动画、过渡、prefers-reduced-motion、View Transitions
→ 性能(critical CSS、content-visibility、CSS containment、字体加载)
→ 无障碍(WCAG 2.2、ARIA、键盘导航、焦点管理)
→ 工具链(PostCSS、Sass、Lightning CSS、Tailwind、UnoCSS)
按”结构 → 皮肤 → 行为 → 兼容 → 无障碍 → 工程”的顺序学。每一步都跑在真浏览器上。CSS 看不见写不好——必须上设备或 DevTools 设备模拟看真实断点。
2. 阶段周数分配(4~6 周,量力而行)
| 阶段 | 4 周方案 | 6 周方案 | 备注 |
|---|---|---|---|
| 1. 语义化 HTML5 与表单 | 0.5 | 1 | landmark + 表单 + ARIA 基础 |
| 2. CSS 基础(盒模型 / 文档流 / 优先级) | 0.5 | 1 | box-sizing、BFC、cascade、specificity |
| 3. Flexbox 完整模型 | 0.5 | 1 | 主轴 / 交叉轴 / 弹性 / 换行 / gap |
| 4. Grid 二维布局 | 0.5 | 1 | 容器 / 项目 / 命名线 / area |
| 5. 响应式策略 | 0.5 | 1 | mobile-first、clamp()、流体排版、container queries |
| 6. 现代颜色与动画 | 0.25 | 0.5 | OKLCH、color-mix、reduced-motion、view transitions |
| 7. 无障碍 + 性能 + 工具链 | 1 | 1 | WCAG 2.2、critical CSS、content-visibility、Tailwind / Lightning CSS |
| 8. 综合项目 | 0.25 | 0.5 | 完整响应式营销页 + 公司官网 |
4 周方案节奏紧。6 周方案多出的时间做设备回归、断点对照、Lighthouse 复跑,不用来囤视频。
3. 九阶段表
| 阶段 | 核心知识 | 实践产出 | 可观察学会标准 |
|---|---|---|---|
| 1. 语义化 HTML5 | landmark(header / nav / main / aside / footer)、article / section、figure、details / summary、address、time | 一份语义化的个人主页骨架 | 不看答案能用 <header><nav><main><article><aside><footer> 写出合法结构,缺一即补 |
| 2. 表单与可访问控件 | <label for>、<fieldset>、<legend>、<input type>、原生校验、:invalid、:focus-visible | 完整注册表单 + 校验 | 能解释 <label> 与 aria-label 的取舍;能用 :invalid 写错误样式 |
| 3. CSS 基础 | 盒模型(content / padding / border / margin)、box-sizing、display、position、normal flow、BFC、IFC、cascade、specificity、@layer、继承 | 一份带图解的 CSS 基础备忘 | 能口算选择器权重;能解释 margin collapse 为何在 flex 容器中消失 |
| 4. Flexbox | main / cross axis、flex-direction / flex-wrap / flex / align-items / justify-content / gap / place-items、min-width: 0 截断 | 完整 navbar + 卡片列表 + sticky footer | 能解释”为何 flex 子元素文字不自动换行”;能解释 auto vs 1 vs none |
| 5. CSS Grid | 容器与项目、grid-template-columns / rows / areas、命名线、subgrid、auto-fit / auto-fill + minmax、place-items | 整页 12 列布局 + 杂志型 masonry | 能口算 auto-fit minmax(250px, 1fr) 在 1200px 下有几列;能用 subgrid 对齐卡片 |
| 6. 响应式策略 | mobile-first、@media、min-width vs max-width、clamp()、fluid typography、container queries、container query units (cqw / cqh)、clamp() + 流式间距 | 一份三屏断点对照的同一组件 | 能解释”为何 mobile-first 比 desktop-first 更省 CSS”;能用 clamp() 写出无 media query 的字号 |
| 7. 现代颜色与动画 | color spaces、oklch()、color-mix()、WCAG contrast、forced colors、prefers-color-scheme、prefers-reduced-motion、transition、@keyframes、View Transitions API | 一份支持深色 / 浅色 / 高对比的 token 体系 + 减动画模式 | 能解释 OKLCH 比 sRGB 均匀在哪;能用 View Transitions 做 SPA 过渡 |
| 8. 无障碍 + 性能 | WCAG 2.2 AA、focus 顺序、skip link、ARIA live region、键盘焦点环、content-visibility、contain、critical CSS、字体加载策略(font-display / size-adjust) | 一份命中 Lighthouse a11y ≥ 95 的页面 | 能解释为什么”关掉动画”是 a11y 而不是”好看”;能写出可被 axe-core 通过的 DOM |
| 9. 工具链 + 综合项目 | PostCSS、Tailwind / UnoCSS、Lightning CSS、Sass、stylelint、Prettier、autoprefixer、构建产物分析 | 完整营销页 + 公司官网首页,移动 / 平板 / 桌面 / 打印四态都过 | 能解释 Tailwind 的原子化与传统 CSS 的取舍;能用 Lightning CSS 在 CI 内压缩 |
每个阶段都对照一个真实设备的渲染——单看桌面调试器容易误判。
4. 第一周任务
Day 1 约定:编辑器 = VS Code + 官方 HTML/CSS 扩展 + axe DevTools 扩展。本计划全程使用静态 HTML + CSS,不引入框架。浏览器配置:
Chrome+Firefox+Safari(mac/iOS 必需)。所有截图与 DevTools 设备模拟记录到notes/week1-day1.md,后面复盘时引用。
| 日 | 任务 | 当天交付 |
|---|---|---|
| Day 1 | 用语义化标签写 hello page(含 <header><nav><main><article><aside><footer>);安装 axe DevTools;跑一次扫描并记录 | 截图 + axe 报告 |
| Day 2 | 表单 + 校验:注册页(用户名 / 邮箱 / 密码 + 确认密码),用 <label for>、<fieldset>、pattern、required、:invalid | 可交互表单 + 4 类边界(空 / 错 / 短 / 长) |
| Day 3 | 盒模型练习:拿一个现成 div,画出 content-box vs border-box 切换时的尺寸变化 | 截图 + 笔记 |
| Day 4 | Flexbox navbar:左 logo / 中菜单 / 右按钮;窄屏下折叠为汉堡;用 gap 替代 margin | 桌面 + 移动两种状态截图 |
| Day 5 | Flex/Grid 选择:同一卡片列表,分别用 Flexbox 与 Grid 写一遍,对比 DOM 与 CSS 行数 | 两份源码 + 笔记 |
| Day 6 | Grid 杂志排版:用 subgrid 对齐 3 张卡片的标题 / 描述 / meta 区 | 截图 + 笔记 |
| Day 7 | 项目:一个最小响应式落地页。步骤 A:手机版 360×640 跑通;步骤 B:补桌面 1440×900、平板 768×1024 两态 | 3 张截图 + 简短 README |
Day 7 步骤 A 只求”手机能看”。步骤 B 每次只改一个断点,记下像素。
5. 阶段通用验收
- 不看答案重写该阶段的最小 demo;
- 解释”它解决什么问题、为什么比旧方案好”;
- 截图 3 种宽度(360 / 768 / 1440)+ 打印预览 + 高对比模式;
- 在真机上跑过至少一次(iPhone 真机最稳,Android 模拟器可);
- axe-core / Lighthouse a11y ≥ 95;
- 列出至少 3 类边界(窄屏 / 长串 / 已禁用 JS / prefers-reduced-motion);
- 能修改现有页面(换主题、加断点、动画、accessibility)而不是只能照抄。
6. 最终验收
- 独立完成:1 套完整响应式营销页(4 个断点),1 套公司官网首页(带导航 / hero / 特性 / 表单 / 页脚),覆盖浅色 / 深色 / 高对比 / 打印 4 态;
- 至少完成 12 个练习:3 个语义化结构、3 个表单校验、3 个 Flex / Grid 对比、3 个响应式策略(mobile-first / clamp() / container queries);
- 完成 1 个综合项目(首选营销页 + 公司官网首页);
- Lighthouse 跑分:Performance ≥ 90、A11y ≥ 95、Best Practices ≥ 90、SEO ≥ 90;
- axe-core 0 critical / serious 违规;
- 能用 15 分钟讲清”viewport / dpi / prefers-* 与 container queries 的边界关系”。
7. 综合项目
首选:设计并实现一套兼容手机 / 平板 / 桌面 / 打印的完整响应式营销页 + 公司官网首页(同一品牌两套页)。
必做:
- 4 个断点:360 / 768 / 1024 / 1440,全部跑实机或 Chrome Device Mode 截图;
- 4 个 prefers-* 状态:浅色 / 深色 /
prefers-reduced-motion: reduce/forced-colors: active; - 1 个打印样式:
@media print隐藏 nav / footer,保留主要内容并加 URL 链接; - 表单:注册 / 订阅 / 联系 至少 2 种,含字段级错误提示;
- 资源:自托管可变字体 1 个;图标用 SVG inline 或 SVG sprite;
- 性能:critical CSS 内联首屏,剩余 CSS 异步加载;首屏图片
fetchpriority="high"+decoding="async"; - 可访问:跳转链接、
focus-visible、skip nav、aria-current、aria-live(表单提交反馈); - 工具链:Lightning CSS 压缩 + PostCSS(autoprefixer + nesting)+ stylelint(a11y + 现代语法)。
备选:重构一套遗留桌面端网站为 mobile-first 响应式,并完成 WCAG 2.2 AA 审计。
要求:保留原页面内容与路由,但所有页面 ≤ 768px 不出现横向滚动;桌面版沿用原视觉但加断点;axe-core 0 critical;附”原 vs 新”截图对比与一份 WCAG 2.2 AA 自评表。
任何项目都要包含:
- 需求与受众;
- 设计 token(颜色 / 字号 / 间距 / 圆角 / 阴影 / 断点);
- 完整源码(HTML + CSS,可能含少量 JS 用于 menu 开关);
- 真机 / 模拟截图(4 断点 × 4 状态);
- Lighthouse + axe 报告(HTML / JSON);
- README + 一段 5 分钟讲设计取舍的视频或笔记;
retrospective.md:踩坑清单、设计 token 演进、未完成项。
8. 推荐开源资料
按角色分工,避免堆链接。
| 阶段 | 角色 | 资料 | 链接 | 用法 |
|---|---|---|---|---|
| 1~3 | 权威参考 | MDN HTML | https://developer.mozilla.org/en-US/docs/Web/HTML | 查元素与属性;不替代教程 |
| 2~7 | 权威参考 | MDN CSS | https://developer.mozilla.org/en-US/docs/Web/CSS | 查属性与示例 |
| 1~9 | 规范 | W3C CSS Working Group | https://www.w3.org/Style/CSS/ | 看 CSS3/4 模块状态与快照 |
| 1~3 | 入门 | web.dev Learn HTML / CSS | https://web.dev/learn/html/ | Google 出品,结构清晰 |
| 4~5 | 入门 | CSS Tricks: A Complete Guide to Flexbox / Grid | https://css-tricks.com/snippets/css/complete-guide-grid/ | 默认 cheatsheet |
| 4~6 | 进阶 | Smashing Magazine | https://www.smashingmagazine.com/category/css/ | 案例 + 现代方案 |
| 4~7 | 进阶 | Lea Verou 博客 | https://lea.verou.me/blog/ | CSS WG 成员;看现代 CSS 一手解读 |
| 6~7 | 进阶 | Rachel Andrew 博客 | https://rachelandrew.co.uk/ | Grid 规范作者;看 Grid / Container Queries 一手解读 |
| 6~7 | 进阶 | CSS Wizardry(Harry Roberts) | https://csswizardry.com/ | 工程化 CSS / ITCSS / 命名 |
| 6 | 进阶 | Layout Land(Jen Simmons) | https://www.youtube.com/@LayoutLand | 视频讲解 Container Queries / Subgrid |
| 6 | 进阶 | Una Kravets Blog | https://una.im/ | Container Queries 联合编辑 |
| 8 | a11y | web.dev Accessibility | https://web.dev/accessibility/ | Google 实践 |
| 8 | a11y | The A11y Project | https://www.a11yproject.com/ | a11y 速查 |
| 8 | a11y | WCAG 2.2 规范 | https://www.w3.org/TR/WCAG22/ | 验收基准 |
| 7 | 兼容 | caniuse | https://caniuse.com/ | 查浏览器支持与 baseline |
| 7 | 工具 | Lightning CSS | https://lightningcss.dev/ | 压缩 + 现代语法降级 |
| 7 | 工具 | PostCSS | https://postcss.org/ | 插件化 CSS 工具链 |
| 7 | 工具 | Tailwind CSS | https://tailwindcss.com/ | 原子化 CSS 框架 |
| 7 | 工具 | Sass | https://sass-lang.com/ | 嵌套 / 变量 / mixin |
| 9 | 复核 | axe-core | https://github.com/dequelabs/axe-core | a11y 自动化 |
| 9 | 复核 | Lighthouse | https://developer.chrome.com/docs/lighthouse/overview/ | 性能 / a11y / SEO 跑分 |
默认顺序:MDN / web.dev 主线 → 写 demo → CSS-Tricks / Smashing 验错 → Lea Verou / Rachel Andrew 看现代 CSS 一手 → WCAG 2.2 对照 → caniuse 查兼容性 → axe / Lighthouse 复跑。复制代码前先看 LICENSE。
9. 学习资料汇聚(v0.3 自包含)
本节由本计划生成。链接指向原始材料或作者公开内容。规范和浏览器支持会更新,决策时再查版本与日期。
9.1 背景与动机
HTML 来自 Tim Berners-Lee 1991 年的 Web 提案,最初只有 18 个元素。CSS 1996 年才成为 W3C 推荐标准。最早的 Web 是学术文档,所有样式都靠浏览器默认。
2005 年前后,Web 开始承担”应用”的职责。随之而来的是 jQuery、float 布局、表格布局、IE 兼容性噩梦。2012 年响应式网页设计(RWD,Ethan Marcotte)让 @media 成为事实标准。2017 年 Grid 落地、2020~2023 年 Container Queries 与 Cascade Layers 让 CSS 终于能像现代布局系统那样工作。
今天的 HTML/CSS 是”工程化的样式 + 结构化语义”:HTML5 的 landmark 让辅助技术能精准跳区;Flexbox + Grid 让”垂直居中”与”等高列”不再是玄学;Container Queries 让组件真正独立于页面尺寸;WCAG 2.2 把无障碍从”加分项”变”准入门槛”。
学会它,等于把 Web 的地基铺好——后面 JS 框架再多也是在这层之上长出来的。
9.2 概念地图
flowchart LR
HTML[HTML 语义化]
HTML --> Landmark[Landmark: header/nav/main/aside/footer]
HTML --> Section[article/section/figure/details]
HTML --> Form[表单 + label + fieldset]
HTML --> A11yAttr[ARIA: roles / aria-*]
CSS[CSS]
CSS --> Foundation[基础: 盒模型 / 文档流 / 定位]
CSS --> Cascade[cascade / specificity / @layer / 继承]
CSS --> Selectors[选择器]
Foundation --> Flex[Flexbox]
Foundation --> Grid[CSS Grid]
Grid --> Subgrid[subgrid]
Flex --> Multi[多列]
Grid --> CQ[Container Queries + units]
CSS --> Color[Color: oklch / color-mix]
CSS --> Theme[prefers-color-scheme / forced-colors]
CSS --> Motion[transition / animation / view transitions]
CSS --> ReducedMotion[prefers-reduced-motion]
CSS --> Perf[性能: critical CSS / content-visibility / contain]
CSS --> Font[字体: font-display / size-adjust]
HTML --> A11y[WCAG 2.2]
CSS --> A11y
A11y --> Keyboard[键盘导航 + focus-visible]
A11y --> ScreenReader[屏幕阅读器]
A11y --> Contrast[对比度 + 焦点环]
CSS --> Tool[工具链]
Tool --> PostCSS[PostCSS]
Tool --> Sass[Sass]
Tool --> LC[Lightning CSS]
Tool --> Tailwind[Tailwind / UnoCSS]
关系说明:
- HTML 语义化是地基;没有 landmark 与 label,再好看的样式也对屏幕阅读器不友好。
- CSS 基础(盒模型 / 文档流)决定了 Flex 与 Grid 的边界;不理解 BFC / inline-formatting 就会踩”margin 折叠消失”等坑。
- 现代布局(Flex / Grid / Container Queries)把”页面级布局”与”组件级布局”分开。
- 颜色、动画、字体三块影响”手感与可访问性”,与 prefers-* 媒体查询深度耦合。
- 性能(critical CSS / content-visibility)放在 CSS 章节——CSS 是 Web 渲染的关键路径。
- 工具链是收口,把上面所有能力落到一个可重复构建的产物里。
9.3 基础知识讲解
9.3.1 经典论文 / 规范
| 资料 | 影响 | 建议读法 |
|---|---|---|
| Berners-Lee, Information Management: A Proposal (1989) | Web 的起源 | 看”为什么需要超文本”的初衷 |
| W3C HTML Living Standard | 当前 HTML 唯一权威 | 查元素与 attribute 行为 |
| W3C CSS Working Group Snapshots | CSS 各模块状态 | 区分”已 REC”与”CR/ED” |
| W3C WCAG 2.2 (2023) | 无障碍验收基准 | 验收时对照,原版无捷径 |
| Ethan Marcotte, Responsive Web Design (A List Apart, 2010) | RWD 的提出 | 对照今天的 container query 看历史 |
| W3C CSS Containment Module Level 1 | contain 规范 | 看 content-visibility 与 contain-intrinsic-size 的关系 |
| W3C Media Queries Level 4 / Level 5 | 现代媒体查询 | 查 prefers-color-scheme / prefers-reduced-motion / prefers-reduced-data |
9.3.2 经典书籍
| 书 | 作者 | 影响 | 用法 |
|---|---|---|---|
| HTML5: The Missing Manual | Matthew MacDonald | HTML5 权威入门 | 阶段 1~2 主线 |
| CSS: The Definitive Guide | Eric Meyer / Estelle Weyl | CSS 全集 | 阶段 3~5 词典式查 |
| Transcending CSS | Andy Clarke | 经典设计 + CSS 实践 | 阶段 7 配合审美训练 |
| CSS Secrets | Lea Verou | 现代 CSS 技巧 | 阶段 6~7 案例精读 |
| Bulletproof Web Design | Dan Cederholm | 弹性布局 + 渐进增强 | 阶段 5 历史与方法 |
| Designing with Web Standards | Jeffrey Zeldman | Web 标准运动起源 | 概念史,理解”为什么” |
备查:Jon Duckett 的 HTML and CSS、Robin Nixon 的 Learning PHP, MySQL & JavaScript(首页基础)。
9.3.3 优秀博客 / 文档
| 资料 | 特点 | 用法 |
|---|---|---|
| MDN HTML | HTML 元素与属性权威 | 默认查文档 |
| MDN CSS | CSS 属性与示例权威 | 默认查文档 |
| web.dev | Google 出品的工程化指南 | 性能 + 现代 CSS |
| CSS-Tricks | 案例与 cheatsheet | 入门与查写法 |
| Smashing Magazine | 长文 + 现代方案 | 案例补充 |
| Lea Verou 博客 | CSS WG 成员对规范的解读 | 现代 CSS 一手 |
| Rachel Andrew 博客 | Grid / Subgrid / Container Queries 一手 | 阶段 5~6 |
| CSS Wizardry(Harry Roberts) | ITCSS + 工程化 CSS | 阶段 9 |
| Layout Land(YouTube) | 视频讲 Container Queries / Subgrid | 视觉学习者 |
| Una Kravets 博客 | Container Queries 联合编辑 | 阶段 6 |
| Jen Simmons 博客 | Web 平台进展 | 看浏览器支持一手 |
| The A11y Project | a11y 速查 | 阶段 8 速查 |
| caniuse | 浏览器支持 | 写之前必查 |
| Lightning CSS 文档 | 现代 CSS 工具链 | 阶段 9 |
| Tailwind 文档 | 原子化方案 | 阶段 9 选型参考 |
9.3.4 核心人物
| 人物 | 主要影响 | 建议追踪的材料 |
|---|---|---|
| Tim Berners-Lee | Web / HTML / W3C 创始人 | 1989 提案、W3C 演讲 |
| Håkon Wium Lie | CSS 共同作者 / Opera CTO | Cascading Style Sheets 论文 |
| Bert Bos | CSS 共同作者 | 早期 W3C CSS 文档 |
| Eric Meyer | CSS 全集作者 / 早期 web 标准布道者 | CSS: The Definitive Guide |
| Jeffrey Zeldman | Web 标准运动 | Designing with Web Standards |
| Ethan Marcotte | 响应式网页设计之父 | A List Apart 文章 |
| Rachel Andrew | CSS Grid 规范编辑 | Grid Layout MDN 章节 |
| Lea Verou | CSS WG 成员 / MIT CSAIL | CSS Secrets、verou.me |
| Una Kravets | Container Queries 联合编辑 | una.im、Chromium blog |
| Jen Simmons | Web 布局 / display: grid 布道 | Layout Land |
| Harry Roberts | CSS 工程化 / ITCSS | csswizardry.com |
| Manuel Matuzović | 现代 CSS / a11y | matuzo.at |
| Andy Clarke | Transcending CSS / 设计思维 | stuffandnonsense.co.uk |
| Miriam Suzanne | Container Queries / Cascade Layers | miriam.codes |
9.3.5 开发方法
| 方法 | 具体动作 | 何时用 |
|---|---|---|
| Mobile-first media queries | min-width 从小到大写,避免桌面特化 | 任何响应式 |
| One source of truth for tokens | 颜色 / 字号 / 间距 / 断点全部走 CSS 自定义属性 + :root | 主题与暗色 |
| Compare before commit | 同一组件在 360 / 768 / 1440 截图对比,再写 CSS | 写断点前 |
| Use semantic HTML first | 能用 <button> 就不用 <div onClick> | 一开始 |
| Layered cascade | 把 reset / tokens / base / components / utilities 分 @layer | 多人协作或大项目 |
| prefers-reduced-motion mandatory | 任何动画都包 @media (prefers-reduced-motion: no-preference) | 阶段 7 |
| Lint a11y before deploy | stylelint a11y + axe-core CI 阻断 | 每次 PR |
| Critical CSS for first paint | 首屏 CSS 内联,剩余 CSS 异步 | 性能门槛 |
9.3.6 必读资源子集(最少 12 条)
- MDN — HTML elements reference:所有 HTML 元素的权威。
- MDN — CSS reference:所有 CSS 属性与示例的权威。
- W3C — Cascading Style Sheets (CSS) Snapshot:CSS 各模块当前规范状态。
- W3C — WCAG 2.2:无障碍验收基准。
- web.dev — Learn HTML / CSS / Accessibility:Google 出品的结构化主线。
- CSS-Tricks — A Complete Guide to Flexbox:Flexbox 速查。
- CSS-Tricks — A Complete Guide to CSS Grid:Grid 速查。
- Smashing Magazine — CSS Category:长文与现代方案。
- Lea Verou — blog:现代 CSS 一手。
- Rachel Andrew — blog:Grid / Subgrid / Container Queries 一手。
- caniuse:浏览器支持。
- The A11y Project:无障碍速查。
9.4 经典问题与经典案例
| # | 问题 | 为什么重要 | 最简答案或证据 |
|---|---|---|---|
| 1 | 移动端出现水平滚动 | 内容宽度超过 100vw | 给图片 max-width: 100%;排查固定宽度元素 |
| 2 | flex 子元素文字不换行 | min-width: auto 默认 | 给子元素 min-width: 0 |
| 3 | auto-fit 与 auto-fill 行为差异 | 影响最少卡片数 | auto-fit 会让空轨道折叠成 0;auto-fill 保留空轨道 |
| 4 | subgrid 不生效 | 父容器不是 grid | 只有 display: grid 的容器内才能用 subgrid |
| 5 | container query 不触发 | 容器漏写 container-type | 必须声明 container-type: inline-size 才能用 @container |
| 6 | prefers-color-scheme 不生效 | 没设 meta 或媒体查询写错 | <meta name="color-scheme" content="light dark"> + @media (prefers-color-scheme: dark) |
| 7 | 焦点环被 outline:none 干掉 | a11y 反模式 | 用 :focus-visible 区分鼠标 / 键盘 |
| 8 | color-scheme 与暗色同时设导致对比度异常 | computed color 与作者 color 冲突 | 统一用 token,不混用 color-scheme 与硬编码颜色 |
| 9 | clamp() 流体字号首屏闪烁 | 字体未优化 | 用可变字体 + font-display: swap + size-adjust |
| 10 | position: sticky 在 overflow 父元素内失效 | sticky 受 overflow 影响 | 所有祖先不能有 overflow: hidden / auto |
| 11 | print 样式丢失 | 没写 @media print | 写一份 print 样式表 + 跑打印预览 |
| 12 | content-visibility: auto 引起布局抖动 | 缺 contain-intrinsic-size | 给一个估算尺寸 |
| 13 | @layer 顺序与 specificity 混了 | cascade 顺序被作者样式盖过 | 文档级声明顺序:reset → tokens → base → components |
| 14 | 嵌套选择器与传统写法混用 | 现代语法不规范 | 用 Lightning CSS 一键降级 |
9.5 学习难点
概念难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| 盒模型 content-box vs border-box | IE vs W3C 历史 | 全局 * { box-sizing: border-box },画图对比 |
| BFC 与 margin collapse | flex 内 margin 不折叠,但 block 内会 | 写 5 个例子对比 |
| Cascade 顺序 | specificity / origin / importance / order 四维 | 画 cascade 矩阵;用 @layer 显式分层 |
| Flex 主轴 / 交叉轴 | flex-direction 切换后轴跟着变 | 用直尺画两条轴,分别标 justify-* 与 align-* |
| Grid 显式 / 隐式网格 | grid-auto-rows 影响超出部分 | 用 grid-auto-flow: dense 让稀疏区域更紧 |
| 容器查询与媒体查询边界 | 媒体看视口,容器看容器 | 一句话:“媒体查询给页面用,container queries 给组件用” |
思维难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| 选择 flex 还是 grid | 看不出”一维 vs 二维” | 一行 / 一列 = flex;行列同时需要 = grid |
| 何时用 cascade layer | 怕破坏特异性 | 决定”基础 → 组件 → 工具类”三段;少用 !important |
| a11y 不是”加完 ARIA” | ARIA 修复不了结构错 | 先结构,后 ARIA;用 :focus-visible 比 outline:none 强 |
工程难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| 跨设备回归 | 桌面看着好,手机错乱 | 在真机或 Device Mode 跑截图清单 |
| 暗色模式颜色串台 | 多处硬编码颜色 | 全部走 var(--token);用 prefers-color-scheme + class 双轨 |
| 性能与 a11y 冲突 | 想隐藏但需要可读 | 不要 display:none;用 sr-only 工具类 |
| 工具链选择焦虑 | 怕选错 | 默认选 Lightning CSS + 原生 CSS + 少量 Sass;不一定要 Tailwind |
9.6 技术标准与接口
9.6.1 Entity
| 名称 | 版本 | 发布组织 | 状态 | 许可证 / 可访问性 |
|---|---|---|---|---|
| HTML Living Standard | 持续 | WHATWG | Living Standard | 公开 |
| CSS Working Group Snapshots | 持续 | W3C CSS WG | 各类模块状态 | 公开 |
| WCAG | 2.2 | W3C | Recommendation | 公开 |
| WAI-ARIA | 1.2 | W3C WAI | Recommendation | 公开 |
| CSS Box Model Module | Level 3 | W3C CSS WG | Candidate Recommendation | 公开 |
| CSS Flexbox Module | Level 1 | W3C CSS WG | Recommendation | 公开 |
| CSS Grid Layout Module | Level 1 / Level 2(subgrid) | W3C CSS WG | Recommendation / CR | 公开 |
| CSS Containment Module | Level 1 | W3C CSS WG | Recommendation | 公开 |
| CSS Cascading and Inheritance Level | 5 / 6 | W3C CSS WG | Recommendation / CR | 公开 |
| CSS Nesting Module | Level 1 | W3C CSS WG | First Public Working Draft → 候选 | 公开 |
| View Transitions API | Level 1 / Level 2 | W3C CSS WG | 浏览器已实现,标准仍在演进 | 公开 |
| Media Queries Level 4 / Level 5 | L4 推荐;L5 WD | W3C CSS WG | Recommendation / WD | 公开 |
| prefers-color-scheme | MQL 5 | W3C CSS WG | Recommendation(通过 MQL4) | 公开 |
| prefers-reduced-motion | MQL 5 | W3C CSS WG | Recommendation | 公开 |
| Container Queries Units(cqw / cqh / cqi / cqb) | CSS Containment L3(cqi 单元) | W3C CSS WG | 浏览器已实现,规范 CR | 公开 |
9.6.2 Scope
- HTML 定义结构与语义;CSS 定义样式与动画;ARIA 补 gap;WCAG 给出可访问性验收。
- W3C 规范定义”应当怎么工作”;浏览器实现定义”今天能怎么用”;caniuse 桥接两者。
- 工具链(Lightning CSS / PostCSS / Tailwind)负责把现代 CSS 落到当前浏览器能跑的产物。
9.6.3 Structure
- HTML:
<!DOCTYPE html>→<html lang>→<head>(meta / title / link / style)→<body>(landmark + 内容)。 - CSS:选择器 → 声明 → 值;
@media/@container/@supports控制条件;@layer控制 cascade 顺序。 - 现代特性速记:
- 布局:
flex、grid、subgrid、columns、@container、container-type、container-name。 - 颜色:
oklch()/oklab()/color-mix()/color()/light-dark()。 - 动画:
transition、@keyframes、animation、prefers-reduced-motion、@view-transition。 - 性能:
content-visibility: auto/hidden、contain、contain-intrinsic-size、font-display。 - Cascade:
@layer、revert-layer、:where()(特异性 0)、:is()/:not()。
- 布局:
- 必须掌握的属性:
box-sizing、display、position、inset、margin/padding/gap/place-*、min-width/max-width/clamp()、aspect-ratio、color-scheme、accent-color、color、background、border、outline、font/line-height/letter-spacing、transform/transition。
9.6.4 Ecosystem
- 浏览器:Chromium / Gecko / WebKit 三家主流,所有现代特性在 caniuse 上有 baseline;
- 编辑器:VS Code、JetBrains 系列;
- 工具链:PostCSS、Tailwind / UnoCSS、Lightning CSS、Sass、stylelint、autoprefixer;
- 验证工具:W3C HTML/CSS validator、Lighthouse、axe-core / axe DevTools、Pa11y;
- 设计协作:Figma tokens → JSON → CSS 自定义属性。
9.6.5 Depth Tiers
| 层级 | 能力 | HTML/CSS 主题可观察标准 |
|---|---|---|
| L0 | 知道存在 | 知道有语义化 HTML、CSS 盒模型、Flexbox、Grid、Container Queries、WCAG |
| L1 | 看得懂示例 | 能读懂 MDN 示例与简单 cheatsheet |
| L2 | 能正确调用 | 能写语义化 HTML + 完整 Flexbox / Grid + 媒体查询 |
| L3 | 能解释与排错 | 能解释 cascade、container queries vs media queries、BFC、prefers-*;能在真机调试 |
| L4 | 能设计与扩展 | 能设计 token 体系、写现代 CSS 工具链、为大型站点做 CSS 性能与 a11y 优化 |
本父主题目标:L3。综合项目阶段可触及局部 L4(设计 token / 工具链选型 / WCAG 2.2 审计)。
9.6.6 Source
- MDN Web Docs:HTML / CSS / ARIA 权威参考。
- W3C CSS Working Group:CSS 模块状态。
- W3C WCAG 2.2:无障碍验收基准。
- caniuse:浏览器支持与 baseline。
- 引用快照日期:2026-07-30。
10. 常见误区
- 拿
<div>全局包一切,丢掉 landmark; <label>写成<label>用户名</label>,不绑for;- 用
<div onClick>取代<button>,丢键盘可访问性; - 把
outline: none当”美化”,失去焦点环; - 媒体查询全部写
max-width,结果 mobile-first 没贯彻; - 用
vw设字号,桌面下字号爆炸; auto-fit与auto-fill傻傻分不清;- 用 Grid 但忘了
display: grid,子元素不生效; - container queries 用在错地方(容器自身);
- 颜色用 hex 写死,不走 token;
- 动画全屏滚动 + 高频闪烁,没考虑
prefers-reduced-motion; - 暗色模式只在
body写一套,所有组件不响应; - 把 Tailwind 当唯一方案,看不懂原生 CSS;
- 把 Sass 当 ESM,写出无法维护的 mixin 嵌套;
position: sticky失效不查 overflow 祖先;content-visibility: auto没设contain-intrinsic-size,滚动卡顿;- print 样式完全没写;
:focus-visible与:focus混用,鼠标点击也带焦点环;- ARIA 当万灵药补 HTML 结构错误;
- 上线后跑 Lighthouse 才发现 a11y 60 分。
11. 所有知识点分类(统一规则)
- 编程语言
- 数据结构与算法
- 计算机基础
- 工程技术
- Web 与后端
- 前端与客户端
- 数据与人工智能
- 项目与职业能力
- 安全与可靠性
本计划归属:前端与客户端 主 + 无障碍与性能(工程技术) 辅。