响应式策略与现代 CSS:断点、流体排版、容器查询、颜色与动画
0. 元信息
- 主题路径:
docs/topics/html-css-responsive/subtopics/responsive-and-modern-css/ - 父主题:
html-css-responsive - 主分类:前端与客户端
- 辅助分类:工程技术
- 适合对象:会写 CSS 写死的字号与媒体查询(max-width)的开发者
- 建议周期:1
1.5 周(每周 812 小时) - 前置知识:
css-fundamentals-and-layout子主题;理解盒模型与 cascade - 最终目标:能用 mobile-first、clamp()、container queries 写出”任意宽度自然顺滑”的页面,并用 OKLCH + prefers-* 做出主题与减动画
1. 学习路线
viewport meta + 设计断点
→ mobile-first 与 min-width 媒体查询
→ clamp() 与流体排版(字号 / 间距)
→ Container Queries 与 container units(cqw / cqh / cqi / cqb)
→ 颜色:OKLCH、color-mix()、light-dark()、forced-colors
→ 暗色主题:prefers-color-scheme + class 双轨
→ 动画:transition、@keyframes、prefers-reduced-motion
→ View Transitions API(同文档与跨文档)
→ 综合:多断点同一组件 + 暗色 + 减动画
按”断点 → 流体 → 容器 → 颜色 → 动画”的顺序学。每一步都能在真机或 DevTools Device Mode 上看到效果。
2. 阶段周数分配(11.5 周,每天 1.52 小时)
| 阶段 | 建议周数 | 每天时长 | 概述 |
|---|---|---|---|
| 1. viewport | 0.25 | 1.5h | meta viewport / color-scheme / theme-color |
| 2. 断点策略 | 0.25 | 1.5h | mobile-first / min-width / 命名(sm/md/lg/xl) |
| 3. 流体排版 | 0.25 | 1.5h | clamp() / min() / max() / vw + rem + 根字号 |
| 4. Container Queries | 0.5 | 1.5~2h | container-type / container-name / @container / cqw / cqh |
| 5. 现代颜色 | 0.25 | 1.5h | OKLCH / color-mix() / light-dark() / system colors |
| 6. 暗色与高对比 | 0.25 | 1.5h | prefers-color-scheme / color-scheme / forced colors |
| 7. 动画 | 0.25 | 1.5h | transition / @keyframes / will-change / transform |
| 8. 减动画 | 0.25 | 1.5h | prefers-reduced-motion: reduce |
| 9. View Transitions | 0.5 | 1.5~2h | @view-transition / document.startViewTransition |
总计约 12~18 小时;1 周紧凑,1.5 周可含真机回归与断点对照。
3. 九阶段表
| 阶段 | 核心知识 | 实践产出 | 学会标准 |
|---|---|---|---|
| 1. viewport | meta viewport、<meta name="color-scheme">、<meta name="theme-color"> | 一份多设备 baseline 模板 | 能解释 initial-scale 与 user-scalable |
| 2. 断点策略 | mobile-first、min-width、命名(sm/md/lg/xl) | 三屏断点对照同一个卡片 | 能解释为何 mobile-first 写更多样式 |
| 3. 流体排版 | clamp()、min()、max()、vw 与 rem 配合、根字号 | 5 级流体 type scale | 能解释 clamp(1rem, 2.5vw, 1.5rem) 在 320/768/1200 的值 |
| 4. Container Queries | container-type、container-name、@container、cqw / cqh / cqi / cqb | 一个 card 组件适配父容器宽度 | 能区分媒体查询(视口)vs 容器查询(容器) |
| 5. 现代颜色 | OKLCH、color-mix()、color()、system colors、accent-color | 一套 OKLCH 调色板 | 能解释 OKLCH 亮度均匀 vs HSL 亮度不均 |
| 6. 暗色与高对比 | prefers-color-scheme、color-scheme、forced colors、light-dark() | 同一组件 4 态(浅 / 深 / 高对比 / 打印) | 能写完 token 体系,4 态切换零硬编码 |
| 7. 动画 | transition、@keyframes、animation、will-change、transform | 一个 hover 按钮 + 一个进入动画 | 能用 DevTools Animation 面板调速度曲线 |
| 8. 减动画 | prefers-reduced-motion: reduce、焦点与对比 | 给动画加 reduce 分支 | 能解释为何”动画”是 a11y 范畴 |
| 9. View Transitions | @view-transition、document.startViewTransition | SPA 路由切换动画 | 能区分同文档与跨文档视图过渡 |
陷阱:把 vw 当字号全靠它;container queries 写错容器名;动画全屏 + 高频闪烁忘了 reduce。
4. 第一周(每天 1.5~2 小时)
Day 1 约定:编辑器 = VS Code + 官方 CSS 扩展 + axe DevTools 扩展;浏览器 = Chrome + Firefox + Safari(如有 macOS/iOS);本计划全程静态 HTML + CSS,不引入框架。截图与 DevTools Device Mode 记录到
notes/week1/dayN/,便于断点对照与回溯。
| 日 | 任务 | 当天交付 | 自检 |
|---|---|---|---|
| Day 1 | viewport 基线:写 1 份多设备 baseline 模板,含 <meta name="color-scheme">、<meta name="theme-color">;在 Device Mode 切 360 / 768 / 1440 各拍 1 张 | 3 张截图 + 笔记 | 移动端不出现水平滚动;UA 表单元素在浅深模式颜色正确 |
| Day 2 | 断点策略:同一卡片用 mobile-first 写 3 段(默认小屏 + @media (min-width: 768px) + @media (min-width: 1024px));桌面规则只覆盖不同部分 | 截图(3 断点) + 笔记 | 默认小屏样式可见;只在大屏”加”规则而不是”覆盖”;能解释 mobile-first 为何更省 CSS |
| Day 3 | 流体排版:用 clamp() 写 5 级 type scale;在 DevTools 切 320 / 768 / 1200 看字号变化 | 截图(3 断点)+ 笔记 | 在 320 时取 MIN,在 1200 时不超过 MAX;能口算 clamp(1rem, 2.5vw, 1.5rem) 在 320/768/1200 的值 |
| Day 4 | Container Queries:写 1 个 card 组件,父容器声明 container-type: inline-size,card 内根据容器宽度切换 2 列 / 3 列;故意”忘写 container-type”复现不触发 | 截图 + 笔记 | 父容器宽度变 → card 内部布局变;不写 container-type 时 @container 不生效 |
| Day 5 | OKLCH + color-mix:用 OKLCH 写 1 套调色板,用 color-mix(in oklch, ...) 派生 hover / active;写 sRGB 回退避免旧浏览器无颜色 | 截图(OKLCH 调色板)+ 笔记 | OKLCH 在 Chrome / Firefox / Safari(最新版)显示一致;旧浏览器走 sRGB 回退 |
| Day 6 | 暗色 + 高对比:用 prefers-color-scheme: dark + prefers-contrast: more 写同一组件的 3 态;用 <meta name="color-scheme" content="light dark"> | 3 张截图(浅 / 深 / 高对比) | 切换 OS 主题后页面跟随;高对比模式不被作者 token 覆盖 |
| Day 7 | 项目:做 1 个”流体排版 + container queries + 暗色 + 减动画”的综合组件。步骤 A:默认浅色无动画;步骤 B:开 OS 暗色;步骤 C:开 reduce-motion(动画消失) | 3 张截图 + axe 报告 | axe 0 critical;reduce-motion 下动画不触发;DevTools Animation 面板可调速度曲线 |
Day 7 步骤 C 是验收关键——开 reduce-motion 后所有动画必须”等价地静”,不是”消失但内容不对”。
5. 阶段通用验收
- 不看答案重写该阶段的最小 demo(流体排版 / 容器查询 / 暗色 / 减动画 各 1 个);
- 解释”mobile-first vs desktop-first”、“clamp 公式”、“@media vs @container”、“prefers-reduced-motion 不是关动画”、“OKLCH 比 HSL 均匀在哪”;
- 截图 3 种宽度(360 / 768 / 1440)+ 暗色 + 浅色 + reduce-motion + 高对比 至少 4 态;
- 至少 1 个组件同时使用 @media 与 @container,能讲清”为什么这两处不能合并”;
- 列出至少 3 类边界:流体字号在极小 / 极大屏不爆 / 暗色下 UA 表单不刺眼 / reduce-motion 下功能仍完整;
- DevTools 截图能标出”这条 clamp 取了哪一段”;
- 能修改现有页面(换主题、加断点、调动画)而不是只能照抄。
6. 最终验收
- 独立完成:1 份完整响应式落地页(4 断点:360 / 768 / 1024 / 1440)+ 1 套 token 体系(颜色 / 字号 / 间距 / 圆角 / 阴影);
- 至少完成 9 个练习:2 个 viewport / 断点、2 个流体排版、2 个容器查询、2 个现代颜色 / 暗色、1 个减动画;
- 4 态切换:浅色 / 深色 / 高对比 / reduce-motion 全部覆盖;
- 至少 1 个组件同时使用 @media 与 @container;
- OKLCH + sRGB 回退双写;
- axe-core / axe DevTools 0 critical;
- 用 10 分钟讲清”viewport / 媒体查询 / 容器查询 / 流体排版 / OKLCH / 减动画”六者的关系与边界。
7. 综合项目
首选:用 mobile-first + 流体排版 + 容器查询 + OKLCH + 减动画 重做一份完整响应式营销页(同组件在 4 断点 + 4 态全部测试)。
必做:
- 4 断点:360 / 768 / 1024 / 1440 全部跑实机或 Chrome Device Mode 截图;
- 4 态:浅色 / 深色 / 高对比 / reduce-motion 全部切换零硬编码;
- 流体排版:5 级 type scale 全走
clamp(); - 容器查询:至少 1 个 card 组件用
@container自适应父容器; - 颜色:调色板用 OKLCH;
color-mix(in oklch, ...)派生 hover / active;写 sRGB 回退; - 动画:默认无动画,开启动作包在
@media (prefers-reduced-motion: no-preference)内; - View Transitions(可选):SPA 路由切换动画;
- 真机或模拟在 4 断点 × 4 态各拍 1 张(共 16 张)。
备选:重构一套遗留”全媒体查询 max-width”的桌面端页面为 mobile-first + 容器查询,并加 OKLCH token 体系,附”原 vs 新”截图与 axe 报告。
notes/ 与 README 存放规范
所有截图、4 断点 × 4 态对照表、token 定义、clamp 计算表统一存放在项目根目录的 notes/ 子目录或 README 的对应章节。综合项目的 notes/ 至少包含:
notes/design.md:断点 / 容器查询选型、token 表、clamp 计算、动画策略;notes/test.md:4 断点 × 4 态截图清单与编号、axe 报告;notes/retrospective.md:复盘(用时、难点、收获、未完成项)。
任何综合项目都必须包含:
- 需求与受众;
- 完整 token 体系(OKLCH 调色板 + clamp type scale + 间距 / 圆角 / 阴影);
- 完整源码(HTML + CSS,可含少量 JS 用于 menu 开关);
- 4 断点 × 4 态截图(共 16 张,编号清晰);
- clamp 计算表(每级字号在 320 / 768 / 1200 的实际像素);
- README:项目介绍、运行步骤、目录结构、复盘;
- axe + Lighthouse 报告(HTML / JSON 原文);
- 复盘记录:用时、难点、收获、下一步。
本主题贡献(Loop 6-D · html-css-responsive / responsive-and-modern-css)
本主题给父主题与所有前端子主题交付”任意屏宽都能稳”的现代 CSS 模板,把 media query、container query、clamp()、fluid typography 四件套绑成 token 体系。
3 项核心职责
- 断点 + 容器查询双轨:media query 控全局(360 / 768 / 1024 / 1440),container query(
@container+container-type)控组件级(卡片 / 侧栏按容器宽度自适应),两轨并行不互斥。 - 流体排版与 token:用
clamp(min, preferred, max)写 fluid typography,每级字号在 320 / 768 / 1200 各算一次实际像素;token 体系(OKLCH 调色板 + 间距 / 圆角 / 阴影)走 CSS 自定义属性 +:root,全站一致。 - 现代 CSS 收口:
color-mix()/light-dark()/@property/:has()/subgrid/view-transition等现代特性按”目标浏览器 + 渐进增强”原则落地,砍掉遗留 hack。
4 项交付物
- 断点 + 容器查询双轨模板:媒体查询的全局骨架 + 卡片组件的
@container局部自适应,4 断点(360 / 768 / 1024 / 1440)截图齐全。 - token 体系源码:OKLCH 调色板(含 dark)+ clamp type scale(5 级字号)+ 间距 / 圆角 / 阴影 token,配
clamp计算表(每级字号在 320 / 768 / 1200 的实际像素)。 - 流体排版 demo:标题 / 正文 / 辅助文字各 1 段,跨 4 断点字体像素逐点截图,覆盖 print 样式。
- modern CSS 特性清单:
@property注册自定义属性动画、color-mix()派生色、light-dark()暗色自适应、:has()父选择器、subgrid卡片内对齐的实战 demo。
3 个验收指标
- 4 断点 × 4 态(浅 / 深 / 高对比 / reduce-motion)截图共 16 张齐全,编号清晰。
clamp()字号在 320 / 768 / 1200 实测像素与计算值偏差 ≤ 1px。- axe + Lighthouse:a11y ≥ 95、Performance ≥ 90、最佳实践 ≥ 90。
8. 推荐开源资料
| 阶段 | 角色 | 资料 | 链接 | 用法 |
|---|---|---|---|---|
| 1~9 | 规范 | CSS Media Queries L4 / L5 | https://www.w3.org/TR/mediaqueries-4/ | 媒体查询最新语法 |
| 4 | 规范 | CSS Containment L1 | https://www.w3.org/TR/css-contain-1/ | 容器查询与 contain |
| 3 | 规范 | CSS Values L4 | https://www.w3.org/TR/css-values-4/ | clamp / min / max |
| 5 | 规范 | CSS Color L4 | https://www.w3.org/TR/css-color-4/ | OKLCH / color-mix |
| 9 | 规范 | CSS View Transitions L1 / L2 | https://www.w3.org/TR/css-view-transitions-1/ | 视图过渡 |
| 1~9 | 入门 | web.dev — Responsive design | https://web.dev/responsive-web-design-basics/ | Google 主线 |
| 3 | 入门 | web.dev — Clamp | https://web.dev/articles/clamp/ | 流体排版深度 |
| 4 | 入门 | web.dev — Container queries | https://web.dev/articles/cq-stable/ | 容器查询实战 |
| 5 | 工具 | OKLCH Color Picker | https://oklch.com/ | OKLCH 调色板 |
| 3 | 工具 | Utopia.fyi | https://utopia.fyi/ | 流体排版生成器 |
| 4 | 进阶 | Rachel Andrew 博客 | https://rachelandrew.co.uk/ | 容器查询一手 |
| 4 | 进阶 | Una Kravets 博客 | https://una.im/ | 容器查询联合编辑 |
| 5 | 进阶 | Lea Verou 博客 | https://lea.verou.me/blog/ | OKLCH / 提案解读 |
| 9 | 进阶 | Bramus — View Transitions | https://www.bram.us/ | 视图过渡 |
| 1~9 | 兼容 | caniuse | https://caniuse.com/ | 浏览器支持 |
| 6 | 案例 | Smashing Magazine — Modern CSS | https://www.smashingmagazine.com/category/css/ | 长文 + 现代方案 |
| 1~9 | 入门 | web.dev — Learn CSS | https://web.dev/learn/css/ | Google 主线 |
许可证提示:MDN / web.dev 内容采用 CC BY 4.0;W3C 规范文本由 W3C 公开;OKLCH Color Picker / Utopia.fyi 是开源工具;Rachel Andrew / Lea Verou / Bramus 博客为各作者所有。复制代码或长段引用前先看 LICENSE;默认做法是读思路后自己重写,而不是复制粘贴。
默认使用顺序:W3C 规范查文档 → web.dev 走主线 → caniuse 查兼容性 → OKLCH / Utopia 工具起骨架 → Rachel Andrew / Lea Verou 看一手 → 写 demo → axe 跑 a11y → DevTools Device Mode 4 断点 × 4 态对照。
9. 学习资料汇聚(v0.3 自包含)
9.1 背景与动机
2010 年 Ethan Marcotte 在 A List Apart 提出 Responsive Web Design:媒体查询 + 弹性图片 + 流式网格三件套。2014 年起 clamp() 被纳入 CSS Values 提案但一直未广泛使用。2020 年 Container Queries 提案进入 Chromium,2022 年底跨浏览器可用,2023 年定稿。
颜色领域,2021~2023 年 OKLCH、color-mix()、light-dark()、forced colors 陆续铺开。View Transitions API 在 2023 年跨浏览器可用,把”页面切换动画”做成声明式。
今天的”现代 CSS”意味着:少写硬编码断点(用 clamp 与 container queries),少写颜色样板(用 OKLCH 与 system colors),少写条件分支(用 prefers-* 媒介)。
9.2 概念地图
flowchart LR
Viewport[meta viewport]
Viewport --> Breakpoint[断点 min-width]
Breakpoint --> Fluid[流体排版]
Fluid --> Clamp[clamp / min / max]
Fluid --> TypeScale[fluid type scale]
Breakpoint --> CQ[Container Queries]
CQ --> ContainerType[container-type: inline-size]
CQ --> ContainerName[container-name]
CQ --> Units[cqw / cqh / cqi / cqb]
CSS[现代颜色]
CSS --> Oklch[oklch / oklab]
CSS --> ColorMix[color-mix]
CSS --> LightDark[light-dark]
CSS --> SystemColors[system colors]
CSS --> Theme[主题与媒介]
Theme --> Scheme[prefers-color-scheme]
Theme --> Forced[forced-colors]
Theme --> Token[token 体系]
CSS --> Motion[动画与过渡]
Motion --> Transition[transition]
Motion --> Keyframes[@keyframes / animation]
Motion --> ReducedMotion[prefers-reduced-motion]
Motion --> ViewTransitions[@view-transition]
9.3 基础知识讲解
9.3.1 规范 / 提案
| 资料 | 影响 | 建议读法 |
|---|---|---|
| CSS Media Queries L4 / L5 | 媒体查询最新语法 | 查 prefers-* 与范围语法 |
| CSS Containment L1 | container queries 与 contain | container-type / contain 关系 |
| CSS Values L4 | clamp()、min()、max() | 流体函数 |
| CSS Color L4 | OKLCH、color-mix、color() | 颜色模型 |
| CSS View Transitions L1 / L2 | 视图过渡 | 用法与状态 |
| W3C WCAG 2.2 | 动画与对比 | a11y 验收 |
| Ethan Marcotte, Responsive Web Design (2010) | RWD 起源 | 历史 |
9.3.2 经典书籍 / 长文
| 资料 | 作者 | 用法 |
|---|---|---|
| CSS Secrets | Lea Verou | 现代案例 |
| Fluid Type | Smashing Magazine | 流体字号原理 |
| Container Queries 提案 | Miriam Suzanne / Una Kravets | 提案原文 |
| Designing With the Mind in Motion (A List Apart) | 多作者 | 减动画设计 |
| View Transitions 文档 | Bramus Van Damme | 解释与 demo |
9.3.3 优秀博客 / 文档
| 资料 | 特点 | 用法 |
|---|---|---|
| web.dev — Responsive design | Google 主线 | 入门 |
| web.dev — Clamp | clamp 函数深度 | 流体排版 |
| web.dev — Container queries | CQ 上线 | 看代码 |
| Rachel Andrew — Container Queries | 一手 | 进阶 |
| Una Kravets — Container Queries | 联合编辑 | 进阶 |
| Lea Verou 博客 | OKLCH / 提案解读 | 现代 CSS |
| Smashing Magazine — Modern CSS | 长文 | 案例 |
| Bramus — View Transitions | 视图过渡 | 进阶 |
| Josh Comeau — Fluid Type Scale | 流体字号工具 | 拿来用 |
| caniuse | 浏览器支持 | 必查 |
| OKLCH Color Picker | 工具 | 调色板 |
9.3.4 核心人物
| 人物 | 影响 |
|---|---|
| Ethan Marcotte | RWD 提出 |
| Miriam Suzanne | Container Queries / Cascade Layers |
| Una Kravets | Container Queries 联合编辑 |
| Bramus Van Damme | View Transitions API |
| Lea Verou | 现代 CSS 一手 |
| Sara Soueidan | a11y + 现代 CSS |
9.3.5 开发方法
| 方法 | 具体动作 | 何时用 |
|---|---|---|
| Mobile-first | 默认写小屏,min-width 加大屏 | 所有响应式 |
| Token-driven | 颜色/字号/间距走 :root 自定义属性 | 主题与暗色 |
| Container > media when component-level | 组件宽 → container queries;页宽 → media | 选型 |
| prefers-reduced-motion first | 默认无动画,开启动画要包 no-preference | 动画 |
| Snapshot before fix | 在 4 屏 4 态各拍 1 张,再排错 | 排错 |
9.3.6 必读资源子集(≥5 条)
- web.dev — Responsive web design basics
- web.dev — Container queries
- web.dev — clamp() / min() / max()
- Rachel Andrew — CSS Container Queries
- Lea Verou — OKLCH in CSS
- Bramus — View Transitions
9.4 经典问题与经典案例
| # | 问题 | 为什么重要 | 最简答案 |
|---|---|---|---|
| 1 | 移动端水平滚动 | 内容宽度超过 100vw | 给图片 max-width:100%;排查固定宽度 |
| 2 | vw 字号在桌面过大 | 线性放大过头 | 用 clamp() 限上限 + 限下限 |
| 3 | container queries 不触发 | 容器没声明 container-type | 必须 container-type: inline-size |
| 4 | 子元素用 cqw,父容器宽度变化慢 | 单位是基于容器 | 给 cqw 的元素处于需响应容器内 |
| 5 | oklch 在 Safari 显示异常 | 旧版未支持 | 加上 sRGB 回退:oklch(60% 0.2 240 / #36c) |
| 6 | 暗色时表单元素刺眼 | UA 默认 vs 作者 token 不一致 | <meta name="color-scheme" content="light dark"> |
| 7 | reduce-motion 不生效 | 动画用 !important 锁了 | 把动画放进 media (prefers-reduced-motion: no-preference) 内 |
| 8 | 视图过渡闪烁 | transform-origin 错 | 设置 view-transition-name;动画内 transform-origin: center |
| 9 | 暗色下 SVG 颜色反转失败 | SVG 内嵌 fill 写死 | 用 currentColor + CSS 控制 |
| 10 | min() max() clamp() 混淆 | 函数组合 | clamp(MIN, PREF, MAX) = “最佳取中” |
| 11 | @container 与 @media 混用 | 优先级混淆 | 容器查询负责组件,媒体查询负责页级 |
| 12 | 多断点失败 | 断点过密 | 设计 3~4 个断点就够(sm/md/lg/xl) |
9.5 学习难点
概念难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| clamp(min, pref, max) 公式 | 三值是字面而非范围 | 写一个交互 demo 滑窗滑动看字号变化 |
| 容器单位 cqw / cqh | 与 vw/vh 混 | 单一组件用 cqw;跨页结构用 vw |
| OKLCH 亮度均匀 | 与 HSL 不一样 | 用 oklch.com 调色,对比同样 L 值的视觉 |
思维难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| 减动画不是”关动画” | 系统设置 | 用 prefers-reduced-motion: reduce 提供静的等价体验 |
| 暗色不是”反色” | 反色破坏对比 | 重写一套 token;保持品牌主色 |
工程难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| container queries 与组件库 | 旧组件库没设计 | 自己写 modern component 时用;旧组件继续 media |
| view transitions 与多框架 | 框架路由重写 DOM | 在路由层 document.startViewTransition 包一层 |
9.6 技术标准与接口
9.6.1 Entity
| 名称 | 版本 | 发布组织 | 状态 |
|---|---|---|---|
| CSS Media Queries L4 / L5 | 持续 | W3C CSS WG | Recommendation / WD |
| CSS Containment L1 | 持续 | W3C CSS WG | Recommendation |
| CSS Values L4 | 持续 | W3C CSS WG | WD(含 clamp) |
| CSS Color L4 / L5 | 持续 | W3C CSS WG | Recommendation |
| CSS View Transitions L1 / L2 | L1 CR / L2 WD | W3C CSS WG | CR / WD |
| prefers-color-scheme | MQL5 | W3C CSS WG | Recommendation |
| prefers-reduced-motion | MQL5 | W3C CSS WG | Recommendation |
| Container Queries Units(cqw / cqh / cqi / cqb) | L3 | W3C CSS WG | CR |
9.6.2 Scope
- 媒体查询:基于 UA / 用户偏好 / 视口特征。
- 容器查询:基于父容器尺寸与样式。
- 颜色:CSS Color 模块定义 oklch、color-mix、light-dark、system colors。
- 视图过渡:声明式 API,浏览器自动 capture / animate。
9.6.3 Structure
- 媒体查询语法:
(min-width: 768px)/(prefers-color-scheme: dark)/(forced-colors: active)/(prefers-reduced-motion: reduce)。 - 容器查询语法:
container-type: inline-size/container-name: card/@container (min-width: 600px) { ... }。 - 颜色函数:
oklch(60% 0.2 240)/color-mix(in oklch, red, blue)/light-dark(#111, #eee)。 - 动画:
transition: property duration timing/@keyframes/animation: name duration。 - 视图过渡:
::view-transition-*伪元素 /document.startViewTransition(() => update())。
9.6.4 Ecosystem
- 工具:Utopia.fyi(流体排版生成器)、Modern Font Stacks、Polypane、Polaris Figma Plugin、OKLCH Color Picker。
- 框架:astro-transitions、next-view-transitions、framer-motion(替代品)。
9.6.5 Depth Tiers
| 层级 | 能力 | 本子主题可观察标准 |
|---|---|---|
| L0 | 知道存在 | 知道 media queries / container queries / clamp() / oklch / view transitions |
| L1 | 看得懂示例 | 能读懂 web.dev 示例 |
| L2 | 能正确调用 | 能写 mobile-first 媒体查询 + 流体排版 + 暗色 |
| L3 | 能解释与排错 | 能解释媒体 vs 容器查询;能写 OKLCH token 体系;能加 reduce-motion 分支 |
| L4 | 能设计与扩展 | 能设计 prefers-* 全套策略 + view transitions 路由级封装 |
本子主题目标:L3。
9.6.6 Source
- W3C CSS WG
- web.dev — Container queries
- caniuse
- 引用快照日期:2026-07-30。
10. 常见误区
vw当 font-size 唯一尺度,没设上下限;clamp的 MIN、MAX 颠倒了;- container queries 写在错容器上;
cqw误以为会自动随视口变;- 暗色只是反色,没重写 token;
- 没设
color-scheme导致 UA 表单与作者样式冲突; - 动画写满全屏没给 reduce-motion 分支;
- view-transition-name 没设导致切换无效;
- 视图过渡跨域图片因 CORS 拿不到快照;
- reduce-motion 状态下仍触发 scroll-linked 动画;
- 容器单位与媒体查询混用导致级联混乱;
- 用
100vh在移动浏览器被地址栏遮挡; - oklch 不写 sRGB 回退导致低端浏览器无颜色;
- 高对比模式(forced-colors)下自定义颜色被系统覆盖而不知;
- 把流体排版当作”绝对值”复制粘贴,没调过 MIN/MAX。
11. 所有知识点分类(统一规则)
本子主题归属:前端与客户端 主 + 工程技术 辅。