CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

无障碍、性能与工具链:WCAG 2.2 / 字体加载 / CSS 性能 / 构建工具

分类:前端与客户端 · 路径:docs/topics/a11y-performance-and-tooling/README.md

#a11y#wcag#critical-css#font-loading#build

学会 WCAG 2.2 关键审计、critical CSS / content-visibility / 字体加载策略,用 PostCSS / Lightning CSS / Tailwind 把 CSS 落到生产

父主题

HTML 与 CSS 响应式布局:从语义化到现代布局与无障碍

子主题(0)

无障碍、性能与工具链:WCAG 2.2 / 字体加载 / CSS 性能 / 构建工具

0. 元信息

1. 学习路线

WCAG 2.2 POURE + 关键准则(Perceivable / Operable / Understandable / Robust)
  → 键盘可达 + 焦点管理 + skip link
  → 对比度与 forced colors
  → 屏幕阅读器 + landmark 跳区 + 表单 error live
  → CSS 性能:critical CSS、content-visibility、contain、aspect-ratio 占位
  → 字体加载:font-display、size-adjust、preload、unicode-range
  → 构建工具:PostCSS、Lightning CSS、Tailwind / UnoCSS、stylelint
  → CI 阻断:axe-core / Lighthouse CI / stylelint
  → 综合:上一阶段营销页 + 公司官网首页的全部 a11y / 性能 / 工具链升级

按”合规(WCAG) → 体验(键盘 / 屏幕阅读器) → 性能(critical CSS / 字体) → 工程(工具链 / CI)“的顺序学。

2. 阶段周数分配(1.5 周,每天 1.5~2 小时)

阶段建议周数每天时长概述
1. WCAG 2.2 速览0.251.5hPOURE / Level A / AA / 关键准则
2. 键盘与焦点0.251.5htab 顺序 / :focus-visible / skip link / roving tabindex
3. 对比度与色彩0.251.5h4.5:1 / 3:1 / forced colors / system colors
4. 屏幕阅读器流程0.251.5hVoiceOver / NVDA 跳 landmark / aria-live
5. CSS 性能0.51.5~2hcritical CSS / content-visibility / contain / aspect-ratio
6. 字体加载0.51.5~2hfont-display / size-adjust / preload / unicode-range
7. PostCSS / Lightning CSS0.251.5hautoprefixer / postcss-preset-env / nesting / browserslist
8. Tailwind / UnoCSS0.251.5h原子化 vs 语义化 token
9. CI 阻断0.51.5~2hstylelint a11y / axe-core CLI / Lighthouse CI

总计约 15~20 小时;1.5 周可含真机回归 + CI 配齐。

3. 九阶段表

阶段核心知识实践产出学会标准
1. WCAG 2.2 速览POURE、Level A / AA、关键准则 1.1 / 1.3 / 1.4 / 2.1 / 2.4 / 3.3 / 4.1一份 WCAG 2.2 AA 自评表能复述 8 条核心 success criteria
2. 键盘与焦点tab 顺序、:focus-visible、焦点回收、roving tabindex、skip link一段可纯键盘通行的 navbar能用 Tab + Enter 走完表单
3. 对比度与色彩4.5:1 / 3:1、forced colors、system colors同一按钮在 4 态对比度都过WCAG 1.4.3 / 1.4.11 / 1.4.12
4. 屏幕阅读器流程VoiceOver / NVDA 跳 landmark、表单错误朗读、aria-live一段录屏或文字记录能列出 5 个跳区命令
5. CSS 性能critical CSS、内联 vs 外链、content-visibilitycontaincontain-intrinsic-sizelighthouse 报告 + 优化点清单能解释 FCP / LCP 与 CSS 阻塞关系
6. 字体加载font-display、size-adjustunicode-range、FOUT / FOIT自托管可变字体 + size-adjust字体不阻塞首屏
7. PostCSS / Lightning CSSautoprefixer、postcss-preset-env、nesting、browserslistCI 跑 Lightning CSS 压缩现代语法降级 + 压缩
8. Tailwind / UnoCSS(选修)原子化 vs 语义化 token一份 design system 比较能解释取舍
9. CI 阻断stylelint a11y、axe-core CLI、Lighthouse CIPR 阻断:lint + a11y + perf 三件套红 PR 不能合并

陷阱:把 critical CSS 当”加 inline 就行”;font-display: swap 时字体全替换;axe 0 critical 误以为 a11y 过。

4. 第一周(每天 1.5~2 小时)

Day 1 约定:编辑器 = VS Code + axe DevTools 扩展;浏览器 = Chrome + Firefox + Lighthouse;本计划结合上一阶段营销页迭代 a11y / 性能 / 工具链。所有截图、axe / Lighthouse 报告、CI 截图记录到 notes/week1/dayN/,便于复盘。

任务当天交付自检
Day 1WCAG 2.2 自评:对照 8 条核心 success criteria 写 1 份自评表(Perceivable / Operable / Understandable / Robust 各 ≥ 1 条)自评表(Markdown)能复述 8 条准则;能说出每条”通过 / 待修 / 不适用”
Day 2键盘 + 焦点:写 1 段可纯键盘通行的 navbar(含 skip link + :focus-visible + roving tabindex);故意用 tabindex="1" 显式排序复现”natural order 错乱”截图 + 笔记Tab 顺序符合视觉顺序;skip link 是页面第一个可聚焦元素;能用 Tab + Enter 走完表单
Day 3对比度 + forced colors:把同一按钮在 4 态(浅 / 深 / 高对比 / 打印)各跑 1 次对比度检查;用 CanvasText / LinkText 等 system colors截图(4 态)+ 对比度报告4.5:1(正文)/ 3:1(大字号)全过;高对比模式下作者颜色被系统色覆盖
Day 4屏幕阅读器流程:VoiceOver / NVDA 跳 5 个 landmark + 1 次表单错误朗读 + 1 次 aria-live 提交反馈;记录为文字笔记文字记录 + 截图能列出 5 个跳区命令;错误信息被 AT 朗读
Day 5CSS 性能:在上一阶段营销页上跑 1 次 Lighthouse,看 LCP / CLS / INP;用 content-visibility: auto + contain-intrinsic-size 优化卡片网格Lighthouse 报告(修改前/后)修改后 LCP 改善 ≥ 10%;content-visibility: auto 不引起跳屏(给了 intrinsic size)
Day 6字体加载:自托管 1 个可变字体;用 font-display: swap + size-adjust + ascent-override 减少 CLS;用 unicode-range 分阶段加载截图 + Lighthouse 报告字体不阻塞首屏;字体切换位移 ≤ 0.05 CLS
Day 7项目:把上一阶段营销页全量升级 a11y / 性能 / 工具链。步骤 A:axe 0 critical;步骤 B:Lighthouse Performance ≥ 90 / a11y ≥ 95;步骤 C:CI 跑 stylelint + axe-core CLI 阻断axe 报告 + Lighthouse 报告 + CI 截图axe 0 critical;Lighthouse a11y ≥ 95;CI 阻断命中示例 1 个

Day 7 步骤 C 是验收关键——CI 阻断要在 PR 上看到 1 次”红→修→绿”完整闭环,不是空配置。

5. 阶段通用验收

  1. 不看答案重写该阶段的最小 demo(skip link / critical CSS / 自托管字体 / stylelint 配置 各 1 个);
  2. 解释”axe 0 critical ≠ WCAG 全过”、“critical CSS 为何不全等于内联”、“font-display swap 为何要 size-adjust”、“Lighthouse preset desktop 与 mobile 差异”;
  3. 截图 3 种宽度(360 / 768 / 1440)+ 暗色 + 高对比 + reduce-motion + forced colors 至少 5 态;
  4. 跑 1 次 Lighthouse(修改前)+ 1 次(修改后),对比 LCP / CLS / INP 改善;
  5. 至少 1 张图标记”axe 0 critical 后仍需手测的项目”(键盘 / 屏幕阅读器 / 对比度边界);
  6. 列出至少 3 类边界:forced colors 下自定义颜色失效 / font-display 缺 fallback / critical CSS 漏提取首屏关键样式;
  7. CI 至少跑通 1 次 stylelint + axe-core CLI 阻断。

6. 最终验收

7. 综合项目

首选:把父主题前一阶段的营销页 + 公司官网首页(同品牌两套页)做”a11y / 性能 / 工具链”全量升级,跑通 CI 阻断。

必做:

备选:把一套遗留的”无 a11y / 无性能优化”营销页升级为达标水平,附”原 vs 新”Lighthouse + axe 对比。

notes/ 与 README 存放规范

所有截图、Lighthouse / axe 报告原文、CI 截图、字体度量对比统一存放在项目根目录的 notes/ 子目录或 README 的对应章节。综合项目的 notes/ 至少包含:

任何综合项目都必须包含:

  1. 需求与受众;
  2. 完整 a11y 决策表(每条 axe 报错 → 修复 → 验证);
  3. 完整性能预算(LCP / CLS / INP 目标值与实测值);
  4. 完整字体加载策略(自托管 / swap / size-adjust / unicode-range);
  5. 4 断点 × 4 态 × 1 打印 截图(共 17 张,编号清晰);
  6. CI 配置文件(lighthouserc / stylelint / axe-core CLI);
  7. README:项目介绍、运行步骤、目录结构、复盘;
  8. 复盘记录:用时、难点、收获、下一步。

本主题贡献(Loop 6-D · html-css-responsive / a11y-performance-and-tooling)

本主题把”WCAG 合规、键盘 / 屏幕阅读器体验、CSS 性能、构建工具链”四条独立工程线拧成一条验收闭环,输出可被父主题营销页与官网首页直接复用的升级模板。

3 项核心职责

4 项交付物

  1. WCAG 2.2 AA 自评表:8 条核心 success criteria × 4 态逐项”通过 / 待修 / 不适用”,含键盘路径与屏幕阅读器录屏。
  2. a11y 决策表:每条 axe 报错 → 修复代码 → 验证截图 / 录屏,覆盖 ARIA landmark、表单错误 aria-live、forced colors 下 CanvasText / LinkText 系统色。
  3. 性能与字体策略包:critical CSS 抽取配置(Critters / penthouse)+ 自托管可变字体 + size-adjust 同步度量 + unicode-range 分阶段加载,外加 LCP / CLS / INP 目标值与实测值表。
  4. CI 红绿阻断配置.lighthouserc.cjs + stylelint(含 a11y 规则)+ axe-core CLI + W3C Validator 的 GitHub Actions 工作流,附 1 次完整”红 PR → 修 → 绿”复盘。

3 个验收指标

8. 推荐开源资料

阶段角色资料链接用法
1验收基准W3C WCAG 2.2https://www.w3.org/TR/WCAG22/AA 全 50+ 条对照
1规范WAI-ARIA 1.2https://www.w3.org/TR/wai-aria-1.2/aria-* 补 gap
1~4速查The A11y Projecthttps://www.a11yproject.com/a11y checklist
1~4入门web.dev — Accessibilityhttps://web.dev/accessibility/Google 实践
4自动化axe-core ruleshttps://github.com/dequelabs/axe-core/tree/develop/docaxe 规则清单
4浏览器扩展axe DevToolshttps://www.deque.com/axe/devtools/浏览器内扫描
5规范CSS Containment L1https://www.w3.org/TR/css-contain-1/contain / content-visibility
5入门web.dev — Optimize LCPhttps://web.dev/articles/optimize-lcp/LCP 案例
5入门web.dev — Optimize CLShttps://web.dev/articles/optimize-cls/CLS 案例
5入门web.dev — Optimize INPhttps://web.dev/articles/optimize-inp/INP 案例
6字体web.dev — CSS web fontshttps://web.dev/articles/css-web-fonts/font-display 指南
6字体源Fontsourcehttps://fontsource.org/自托管 Google Fonts
7工具Lightning CSShttps://lightningcss.dev/压缩 + 降级
7工具PostCSShttps://postcss.org/插件化工具链
7工具stylelinthttps://stylelint.io/CSS lint
7工具Tailwind CSShttps://tailwindcss.com/原子化方案
7工具Sasshttps://sass-lang.com/嵌套 / 变量 / mixin
9CILighthouse CIhttps://github.com/GoogleChrome/lighthouse-ci性能 / a11y CI
9CIaxe-core CLIhttps://github.com/dequelabs/axe-coreaxe 命令行
9工具Crittershttps://github.com/GoogleChromeLabs/critterscritical CSS 提取
1~9入门web.dev — Learn CSShttps://web.dev/learn/css/Google 主线
1~9规范HTML Living Standardhttps://html.spec.whatwg.org/multipage/HTML 唯一权威

许可证提示:WCAG / WAI-ARIA / W3C 规范文本由 W3C 公开;MDN / web.dev 内容采用 CC BY 4.0;axe-core 是 MPL-2.0;Lighthouse 是 Apache-2.0;PostCSS / stylelint / Tailwind 是 MIT;Lightning CSS 是 MPL-2.0;Fontsource 各字体许可证见其仓库。复制代码或长段引用前先看 LICENSE;默认做法是读思路后自己重写,而不是复制粘贴

默认使用顺序:WCAG 2.2 查验收 → web.dev a11y / Web Vitals 走主线 → axe DevTools 浏览器扫 → MDN / spec 排错 → web.dev font-display 配字体 → Lightning CSS / PostCSS / stylelint 配工具链 → Lighthouse CI + axe-core CLI 配 CI 阻断 → PR 红绿复盘。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

WCAG 1.0(1999)定义 a11y 起点;WCAG 2.0(2008)引入 POURE;WCAG 2.1(2018)增加移动与认知;WCAG 2.2(2023)扩展焦点外观、目标尺寸、拖拽等细则。今天合规底线是 2.2 AA。

性能侧,Google 自 2010 年起持续发布 RAIL、Web Vitals,CSS 成为关键路径:head 中的大样式表会阻塞渲染。“关键 CSS 内联、字体分阶段、可视区懒加载”是从 RAIL/INP 角度的硬约束。

工具链侧,PostCSS 与 Sass 自 2013 年起改变 CSS 写法的可编程性;Tailwind v1(2017)让原子化成为选项之一;Lightning CSS(2023)把”压缩 + 现代语法降级”放进单一 Rust 工具。

9.2 概念地图

flowchart LR
  WCAG[WCAG 2.2]
  WCAG --> Perceivable[Perceivable: alt text / contrast]
  WCAG --> Operable[Operable: keyboard / focus / target size]
  WCAG --> Understandable[Understandable: language / consistency]
  WCAG --> Robust[Robust: name role value]

  A11y[无障碍实践]
  A11y --> Keyboard[键盘可达 + :focus-visible]
  A11y --> Contrast[对比度 4.5:1 / 3:1]
  A11y --> Forced[forced-colors 高对比模式]
  A11y --> SR[屏幕阅读器 + aria-live]
  A11y --> SkipLink[skip link + landmark 顺序]

  Perf[性能]
  Perf --> Critical[Critical CSS]
  Perf --> Contain[contain / content-visibility]
  Perf --> Font[字体: font-display / size-adjust]
  Perf --> WebVitals[LCP / INP / CLS]

  Tool[工具链]
  Tool --> PostCSS[PostCSS + autoprefixer / nesting]
  Tool --> LC[Lightning CSS]
  Tool --> Sass[Sass]
  Tool --> Tailwind[Tailwind / UnoCSS]
  Tool --> Stylelint[stylelint]

  CI[CI 阻断]
  CI --> Axe[axe-core CLI]
  CI --> LighthouseCI[Lighthouse CI]
  CI --> Validator[W3C validator]

9.3 基础知识讲解

9.3.1 规范 / 提案

资料影响建议读法
WCAG 2.2 (W3C, 2023)a11y 验收基准对照 AA 全 50+ 条
WAI-ARIA 1.2aria-*补 semantic 缺口
CSS Containment L1contain / content-visibility性能工具
Web Vitals(Google)性能指标LCP / INP / CLS 阈值
HTML Living Standard<meta>color-scheme影响暗色

9.3.2 经典书籍 / 资源

书 / 资源作者用法
Accessibility for EveryoneLaura Kalbaga11y 通识
Inclusive ComponentsHeydon Pickering组件 a11y
A Web for EveryoneSarah Horton / Whitney Quesenbery设计视角
Designing with Web StandardsJeffrey Zeldman历史背景

9.3.3 优秀博客 / 文档

资料特点用法
W3C WCAG 2.2验收主线
The A11y Project速查入门
web.dev — AccessibilityGoogle 实践主线
axe-core rules自动化清单写测试
web.dev — Optimize CLS性能CLS 案例
web.dev — Optimize LCP性能LCP 案例
web.dev — Optimize INP性能INP 案例
Lightning CSS文档工具链
PostCSS文档插件
Tailwind文档选修
stylelint文档lint
Lighthouse CI文档CI
font-display 指南字体字体加载

9.3.4 核心人物

人物影响
Tim Berners-Lee / Wendy ChisholmW3C WAI
Léonie Watson屏幕阅读器实操
Steve FaulknerHTML + ARIA
Heydon Pickering包容性组件
Eric Baileya11y + 性能
Google Chrome teamWeb Vitals

9.3.5 开发方法

方法具体动作何时用
A11y checklist first上线前跑 axe + 屏幕阅读器手测每个版本
Lighthouse budget设 PR perf 预算下限CI
Critical CSS in CI用 critical / penthouse 抽取并内联性能门槛
Font fallback metric overridesize-adjust + ascent-override 减少 CLS字体
stylelint a11y rulesstylelint-plugin-no-unsupported-browser-features + a11ylint
Forced-colors respect@media (forced-colors: active) 写系统色a11y

9.3.6 必读资源子集(≥5 条)

  1. WCAG 2.2
  2. The A11y Project checklist
  3. axe-core rules
  4. web.dev — Accessibility
  5. web.dev — Web Vitals / Optimize LCP
  6. Lightning CSS docs
  7. font-display / size-adjust 指南

9.4 经典问题与经典案例

#问题为什么重要最简答案
1axe 0 critical 但 a11y 仍差axe 不覆盖所有 WCAG手动测键盘 + 屏幕阅读器
2skip link 看不见但能聚焦不要 display:none用 clip-path inset(50%) 保留可聚焦
3自定义焦点环被 outline:none 干掉鼠标点击也触发改用 :focus-visible
4高对比模式颜色被覆盖forced-colorsCanvasText / LinkText 等系统色
5critical CSS 不全首屏闪用 critical / Critters 自动提取
6content-visibility: auto 跳屏缺 intrinsic sizecontain-intrinsic-size: 0 100px
7font-display: swap 导致 CLS字体切换位移size-adjust 同步度量
8暗色下自定义 SVG 图标看不到fill 写死currentColor
9Lighthouse Performance 90 但 INP 差任务太长拆 chunk、用 content-visibility
10文档 doctype 漏了quirks 模式严格 <!DOCTYPE html>
11tabindex="1" 显式排序natural order 错乱0 或 -1
12表单错误用 alert() 通报抢焦点aria-live="polite" 段落
13pointer-events: none 阻挡键盘鼠标用户与键盘冲突仅对装饰加;交互控件别加
14a11y 审计通过,但 reduce-motion 用户不适动画触发给所有动画包 no-preference 媒体
15Lighthouse CI 与本地结果不一致网络 / 节流差异lighthouserc.json 配 preset desktop

9.5 学习难点

概念难点

难点为什么卡突破路径
WCAG POURE 四类抽象把每类对应一个 demo 例子
对比度 4.5 / 3大字号 / 小字号阈值不同用 Stark / Colour Contrast Analyser
forced-colors名字陌生Windows High Contrast 上跑一遍
contain 与 content-visibility 区别名字接近contain: layout 管布局;content-visibility: auto 加 size 跳过渲染

思维难点

难点为什么卡突破路径
axe ≠ WCAG误判合规axe 0 critical 是 necessary,不是 sufficient
性能调优优先级不知先动哪LCP > CLS > INP;按 P75 算
a11y 是工程文化当一次性任务改成 PR 阻断 + 设计 token 默认 a11y

工程难点

难点为什么卡突破路径
critical CSS 自动化不熟工具用 Critters(Webpack / Vite 插件)
Lighthouse CI 配置preset / assert@lhci/cli + lighthouserc.cjs
多语言 a11ylang 不对<html lang> 与各 section lang
font-display 与版权自托管麻烦用 Fontsource / self-host Google Fonts clone
团队推进 a11y当”法务部事”起 1 个 a11y 元帅;把每条 axe 转 PR

9.6 技术标准与接口

9.6.1 Entity

名称版本发布组织状态许可证
WCAG2.2W3CRecommendation公开
WAI-ARIA1.2W3C WAIRecommendation公开
CSS Containment L1持续W3C CSS WGRecommendation公开
Web Vitals (LCP/INP/CLS)持续Google / web.dev行业事实标准公开
axe-core持续Deque活跃MPL-2.0
Lighthouse持续Google活跃Apache-2.0
PostCSS持续PostCSS org活跃MIT
Lightning CSS持续Parcel 团队活跃MPL-2.0
stylelint持续stylelint org活跃MIT
Tailwind CSS持续Tailwind Labs活跃MIT

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力本子主题可观察标准
L0知道存在知道 WCAG 2.2、Web Vitals、PostCSS、stylelint
L1看得懂示例能看懂 axe 报告与 Lighthouse 报告
L2能正确调用能写 skip link、focus-visible,配置 PostCSS 编译
L3能解释与排错能修 axe 报错;能调 LCP / CLS;能在 CI 阻断
L4能设计与扩展能设计 a11y 体系 + 字体加载策略 + 构建流水线

本子主题目标:L3。综合项目阶段可触及 L4。

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

本子主题归属:前端与客户端 主 + 无障碍 + 工程技术 辅。

直接依赖(0)

查看知识图谱