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

响应式策略与现代 CSS:断点、流体排版、容器查询、颜色与动画

分类:前端与客户端 · 路径:docs/topics/responsive-and-modern-css/README.md

#responsive#container-queries#clamp#oklch#view-transitions

学会 mobile-first 断点策略、clamp() 流体排版、container queries、OKLCH 颜色、prefers-* 与 View Transitions API

父主题

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

子主题(0)

响应式策略与现代 CSS:断点、流体排版、容器查询、颜色与动画

0. 元信息

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. viewport0.251.5hmeta viewport / color-scheme / theme-color
2. 断点策略0.251.5hmobile-first / min-width / 命名(sm/md/lg/xl)
3. 流体排版0.251.5hclamp() / min() / max() / vw + rem + 根字号
4. Container Queries0.51.5~2hcontainer-type / container-name / @container / cqw / cqh
5. 现代颜色0.251.5hOKLCH / color-mix() / light-dark() / system colors
6. 暗色与高对比0.251.5hprefers-color-scheme / color-scheme / forced colors
7. 动画0.251.5htransition / @keyframes / will-change / transform
8. 减动画0.251.5hprefers-reduced-motion: reduce
9. View Transitions0.51.5~2h@view-transition / document.startViewTransition

总计约 12~18 小时;1 周紧凑,1.5 周可含真机回归与断点对照。

3. 九阶段表

阶段核心知识实践产出学会标准
1. viewportmeta 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 Queriescontainer-typecontainer-name@containercqw / cqh / cqi / cqb一个 card 组件适配父容器宽度能区分媒体查询(视口)vs 容器查询(容器)
5. 现代颜色OKLCH、color-mix()、color()、system colors、accent-color一套 OKLCH 调色板能解释 OKLCH 亮度均匀 vs HSL 亮度不均
6. 暗色与高对比prefers-color-schemecolor-scheme、forced colors、light-dark()同一组件 4 态(浅 / 深 / 高对比 / 打印)能写完 token 体系,4 态切换零硬编码
7. 动画transition@keyframesanimationwill-changetransform一个 hover 按钮 + 一个进入动画能用 DevTools Animation 面板调速度曲线
8. 减动画prefers-reduced-motion: reduce、焦点与对比给动画加 reduce 分支能解释为何”动画”是 a11y 范畴
9. View Transitions@view-transitiondocument.startViewTransitionSPA 路由切换动画能区分同文档与跨文档视图过渡

陷阱:把 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 1viewport 基线:写 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 4Container Queries:写 1 个 card 组件,父容器声明 container-type: inline-size,card 内根据容器宽度切换 2 列 / 3 列;故意”忘写 container-type”复现不触发截图 + 笔记父容器宽度变 → card 内部布局变;不写 container-type 时 @container 不生效
Day 5OKLCH + 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. 阶段通用验收

  1. 不看答案重写该阶段的最小 demo(流体排版 / 容器查询 / 暗色 / 减动画 各 1 个);
  2. 解释”mobile-first vs desktop-first”、“clamp 公式”、“@media vs @container”、“prefers-reduced-motion 不是关动画”、“OKLCH 比 HSL 均匀在哪”;
  3. 截图 3 种宽度(360 / 768 / 1440)+ 暗色 + 浅色 + reduce-motion + 高对比 至少 4 态;
  4. 至少 1 个组件同时使用 @media 与 @container,能讲清”为什么这两处不能合并”;
  5. 列出至少 3 类边界:流体字号在极小 / 极大屏不爆 / 暗色下 UA 表单不刺眼 / reduce-motion 下功能仍完整;
  6. DevTools 截图能标出”这条 clamp 取了哪一段”;
  7. 能修改现有页面(换主题、加断点、调动画)而不是只能照抄。

6. 最终验收

7. 综合项目

首选:用 mobile-first + 流体排版 + 容器查询 + OKLCH + 减动画 重做一份完整响应式营销页(同组件在 4 断点 + 4 态全部测试)。

必做:

备选:重构一套遗留”全媒体查询 max-width”的桌面端页面为 mobile-first + 容器查询,并加 OKLCH token 体系,附”原 vs 新”截图与 axe 报告。

notes/ 与 README 存放规范

所有截图、4 断点 × 4 态对照表、token 定义、clamp 计算表统一存放在项目根目录的 notes/ 子目录或 README 的对应章节。综合项目的 notes/ 至少包含:

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

  1. 需求与受众;
  2. 完整 token 体系(OKLCH 调色板 + clamp type scale + 间距 / 圆角 / 阴影);
  3. 完整源码(HTML + CSS,可含少量 JS 用于 menu 开关);
  4. 4 断点 × 4 态截图(共 16 张,编号清晰);
  5. clamp 计算表(每级字号在 320 / 768 / 1200 的实际像素);
  6. README:项目介绍、运行步骤、目录结构、复盘;
  7. axe + Lighthouse 报告(HTML / JSON 原文);
  8. 复盘记录:用时、难点、收获、下一步。

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

本主题给父主题与所有前端子主题交付”任意屏宽都能稳”的现代 CSS 模板,把 media query、container query、clamp()、fluid typography 四件套绑成 token 体系。

3 项核心职责

4 项交付物

  1. 断点 + 容器查询双轨模板:媒体查询的全局骨架 + 卡片组件的 @container 局部自适应,4 断点(360 / 768 / 1024 / 1440)截图齐全。
  2. token 体系源码:OKLCH 调色板(含 dark)+ clamp type scale(5 级字号)+ 间距 / 圆角 / 阴影 token,配 clamp 计算表(每级字号在 320 / 768 / 1200 的实际像素)。
  3. 流体排版 demo:标题 / 正文 / 辅助文字各 1 段,跨 4 断点字体像素逐点截图,覆盖 print 样式。
  4. modern CSS 特性清单@property 注册自定义属性动画、color-mix() 派生色、light-dark() 暗色自适应、:has() 父选择器、subgrid 卡片内对齐的实战 demo。

3 个验收指标

8. 推荐开源资料

阶段角色资料链接用法
1~9规范CSS Media Queries L4 / L5https://www.w3.org/TR/mediaqueries-4/媒体查询最新语法
4规范CSS Containment L1https://www.w3.org/TR/css-contain-1/容器查询与 contain
3规范CSS Values L4https://www.w3.org/TR/css-values-4/clamp / min / max
5规范CSS Color L4https://www.w3.org/TR/css-color-4/OKLCH / color-mix
9规范CSS View Transitions L1 / L2https://www.w3.org/TR/css-view-transitions-1/视图过渡
1~9入门web.dev — Responsive designhttps://web.dev/responsive-web-design-basics/Google 主线
3入门web.dev — Clamphttps://web.dev/articles/clamp/流体排版深度
4入门web.dev — Container querieshttps://web.dev/articles/cq-stable/容器查询实战
5工具OKLCH Color Pickerhttps://oklch.com/OKLCH 调色板
3工具Utopia.fyihttps://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 Transitionshttps://www.bram.us/视图过渡
1~9兼容caniusehttps://caniuse.com/浏览器支持
6案例Smashing Magazine — Modern CSShttps://www.smashingmagazine.com/category/css/长文 + 现代方案
1~9入门web.dev — Learn CSShttps://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 L1container queries 与 containcontainer-type / contain 关系
CSS Values L4clamp()min()max()流体函数
CSS Color L4OKLCH、color-mix、color()颜色模型
CSS View Transitions L1 / L2视图过渡用法与状态
W3C WCAG 2.2动画与对比a11y 验收
Ethan Marcotte, Responsive Web Design (2010)RWD 起源历史

9.3.2 经典书籍 / 长文

资料作者用法
CSS SecretsLea Verou现代案例
Fluid TypeSmashing 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 designGoogle 主线入门
web.dev — Clampclamp 函数深度流体排版
web.dev — Container queriesCQ 上线看代码
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 MarcotteRWD 提出
Miriam SuzanneContainer Queries / Cascade Layers
Una KravetsContainer Queries 联合编辑
Bramus Van DammeView Transitions API
Lea Verou现代 CSS 一手
Sara Soueidana11y + 现代 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 条)

  1. web.dev — Responsive web design basics
  2. web.dev — Container queries
  3. web.dev — clamp() / min() / max()
  4. Rachel Andrew — CSS Container Queries
  5. Lea Verou — OKLCH in CSS
  6. Bramus — View Transitions

9.4 经典问题与经典案例

#问题为什么重要最简答案
1移动端水平滚动内容宽度超过 100vw给图片 max-width:100%;排查固定宽度
2vw 字号在桌面过大线性放大过头clamp() 限上限 + 限下限
3container queries 不触发容器没声明 container-type必须 container-type: inline-size
4子元素用 cqw,父容器宽度变化慢单位是基于容器cqw 的元素处于需响应容器内
5oklch 在 Safari 显示异常旧版未支持加上 sRGB 回退:oklch(60% 0.2 240 / #36c)
6暗色时表单元素刺眼UA 默认 vs 作者 token 不一致<meta name="color-scheme" content="light dark">
7reduce-motion 不生效动画用 !important 锁了把动画放进 media (prefers-reduced-motion: no-preference)
8视图过渡闪烁transform-origin 错设置 view-transition-name;动画内 transform-origin: center
9暗色下 SVG 颜色反转失败SVG 内嵌 fill 写死currentColor + CSS 控制
10min() 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 WGRecommendation / WD
CSS Containment L1持续W3C CSS WGRecommendation
CSS Values L4持续W3C CSS WGWD(含 clamp)
CSS Color L4 / L5持续W3C CSS WGRecommendation
CSS View Transitions L1 / L2L1 CR / L2 WDW3C CSS WGCR / WD
prefers-color-schemeMQL5W3C CSS WGRecommendation
prefers-reduced-motionMQL5W3C CSS WGRecommendation
Container Queries Units(cqw / cqh / cqi / cqb)L3W3C CSS WGCR

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

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

10. 常见误区

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

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

直接依赖(0)

查看知识图谱