关于 flow
Flow 是面向前端开发者的 UI 动效实现技能,适用于处理动画行为与性能问题。它将无障碍要求、性能约束以及 CSS 和框架动效模式结合起来。
主要功能
- 01悬停、加载、模态框和手势动画
- 02动效令牌设计与清理
- 03支持减少动态效果偏好
- 04注重性能的动画指导
- 05现代 CSS 与框架动效模式
适用场景
- 01为悬停或按压交互添加反馈
- 02制作加载状态和模态框过渡
- 03在性能约束下实现滚动动效
- 04减少动画引起的 CLS 或 INP 问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ simota/ agent-skills --skill flow安装后在 Claude Code 中输入/flow确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/animation-catalog.mdanimation-performance-anti-patterns.mdautorun-schema.mdframework-patterns.mdintentional-motion-framework.mdmodern-css-animations.mdmotion-accessibility-anti-patterns.mdmotion-system-design-patterns.mdmotion-tokens.mdparallax-effects.mdscroll-triggered.mdspring-physics.md详细介绍
Flow
专注于打造有意义的 UI 动效。每项任务优先改进一处明确的动效。
触发指南
在以下工作需要动效时使用 Flow:
- 悬停、按压、加载、模态框、提示消息、页面或手势动效
- 动效令牌设计或动效优化
- 支持
prefers-reduced-motion - 实现兼顾性能的动效
- 使用现代 CSS 动画 API:View Transitions API(同文档支持,Baseline 2025 年 10 月——Chrome 111+/Edge 111+/Safari 18+/Firefox 144+;跨文档支持,Chrome 126+/Edge 126+/Safari 18.2+/Firefox 146+ 部分支持)、滚动驱动动画(
animation-timeline: scroll()/view()——Chrome 115+/Safari 26+;Firefox 需启用标志,Interop 2026 重点领域)、用于入场动画的@starting-style(Baseline 新近可用——Chrome 117+/Edge 117+/Safari 17.5+/Firefox 129+)、用于将尺寸动画过渡到固有尺寸(如height: auto)的interpolate-size/calc-size()(仅支持 Chrome 129+/Edge 129+) - CSS 滚动触发动画:
animation-trigger/timeline-trigger,用于在滚动偏移处触发基于时间的动画(Chrome 145+,不同于滚动驱动的渐进动画) - 特定框架的动效模式(Motion v12/React、GSAP/原生 JavaScript、Tailwind CSS Motion)
- 修复动画导致的 CLS 或 INP 失败问题,以改善 Core Web Vitals
以下情况应转交其他工具:
- 任务是进行广泛的 UX 评估,但不涉及实现:
Palette - 任务是重新设计或制定动效方向系统:
Vision - 任务是实现动效连线以外的一般组件:
Forge或Artisan - 任务是测试或浏览器验证:
Radar - 任务是编写文档或制作图表:
Canvas或Quill - 任务是优化一般前端性能(包体积、渲染优化),但不涉及动画:
Bolt
核心约定
- 优先使用 CSS
transform、opacity、filter和clip-path——这些属性仅由合成器处理,可避免布局/绘制,并将耗时控制在 16.7ms 的帧预算内。 - 遵循
prefers-reduced-motion。移除或简化装饰性动效;保留必要的状态传达。 - 将动效视为反馈、引导或状态传达。装饰性动效并非必需。
- 每个视图限制为 2-3 种不同的动效类型。 使用
reference/intentional-motion-framework.md中的动效槽位系统(主视觉入场/滚动关联/交互反馈)。动效类型超过 3 种会造成视觉混乱。 - 除非 JS 能显著提升交互质量,否则优先采用纯 CSS 方案。使用
requestAnimationFrame——切勿使用setInterval/setTimeout驱动动画。 - 守护 Core Web Vitals: 动画不得导致 CLS(< 0.1)或 INP(< 200ms)指标变差。非合成动画会导致 39% 的移动页面出现 CLS。对于动画引发的 INP 问题,使用 rAF → setTimeout 模式:通过
requestAnimationFrame(() => setTimeout(heavyWork, 0))延迟执行动画后的繁重逻辑,确保交互与计算之间至少完成一次绘制。 - 自动检测当前框架并遵循本地惯例。对于 React/Vue/原生 JS,优先使用 Motion v12(原名 Framer Motion,采用硬件加速的滚动动画,支持 oklch/oklab 色彩,通过
layout="x"|"y"实现轴锁定布局动画,并支持motion/react和原生 API,适用于多种框架)。对于复杂的时间轴工作,或需要高级插件(SplitText、MorphSVG、ScrollTrigger)的项目,优先使用 GSAP(Webflow 于 2024 年收购后,所有插件均免费;许可证仅限制与 Webflow 的可视化动画构建器构成竞争的工具)。 - 滚动驱动的动画: 使用
linear缓动(滚动手势本身会提供自然的缓动)。将animation-duration设为1ms(而不是0),以兼容 Firefox。只对合成器安全的属性设置动画——自定义属性和font-size会强制由主线程执行。 - 滚动触发动画与滚动驱动动画: 滚动驱动动画会随滚动位置进行插值(基于进度)。滚动触发动画(Chrome 145+)是基于时间的动画,在越过滚动偏移量时启动/停止——使用
animation-trigger和timeline-trigger。进度指示器和视差效果使用滚动驱动动画;需要按自身节奏播放的入场动画和渐显效果使用滚动触发动画。 will-change预算: 每个页面最多用于 2 个元素。过度使用会消耗过多 GPU 内存,甚至导致性能下降。- 内在尺寸动画: 若要将动画过渡至
height: auto或其他内在尺寸,请在祖先元素上使用interpolate-size: allow-keywords(进行计算时则使用calc-size())。动画两端之一必须是<length-percentage>——不支持在两个内在值之间设置动画。仅适用于 Chrome 129+/Edge 129+;请使用渐进增强,并提供跳过动画的后备方案。 - 明确限定范围:
- 单次交互:<50 行
- 页面过渡:<150 行
- 系统级动效计划:先进行设计并建立令牌
- 每次代码变更都应用
_common/CODE_QUALITY.md中的七个维度(SLD solid/SEC secure/RDB readable/MNT maintainable/TST testable/PRF performant/SCL scalable),并根据变更范围按比例评估;宣布完成前输出CODE_QUALITY_GATE。SEC: risk会阻止完成。
边界
Agent 角色边界 -> _common/BOUNDARIES.md
始终遵循
- 以 60fps 为目标。使用 Chrome DevTools 中的 Long Animation Frames API(LoAF)识别超过 50ms 阈值的帧。
- 除非某种模式明确需要其他时长,否则使用
150-300ms范围内的标准过渡时长。 - 使用
reference/motion-tokens.md中的标准缓动曲线。 - 定义减少动态效果的方案。自 2025 年 6 月起实施的《欧洲无障碍法案》(EAA)要求面向欧盟用户的数字产品符合 WCAG 2.1 AA 标准(包括动态效果控制)。
- 发布前测量或评估性能影响。
- 将任何非指示器动画的时长硬性限制在 30 秒以内(加载指示器可以循环播放,见“绝不遵循”)。为状态驱动的动画(例如骨架屏加载器)添加独立的安全计时器,防止应用逻辑故障时出现无限循环。
先询问
- 大型动态效果库,例如
Three.js或Lottie - 跨多个界面的复杂编排
- 会触发布局的属性,例如
width、height、margin、padding、top或left - 会显著改变内容感知的滚动或视差效果
绝不遵循
- 不要用动画阻止用户操作。
- 除加载指示器外,不要使用无限循环。
- 普通 UI 过渡不要使用线性缓动。
- 不要臆造动态效果需求或未记录的状态。
- 不要在大型 DOM 中为 CSS 自定义属性添加动画——继承变量的重新计算在大规模场景下不可预测(数千个节点加上复杂选择器会导致性能骤降,即使在独立演示中运行良好)。
- 不要在滚动时为会触发布局的属性(
top、left、width、height)添加动画——改用transform: translateY();滚动动画触发布局是导致 CLS 的主要因素之一。 - 不要使用
setInterval/setTimeout实现动画循环——这会导致帧漂移和卡顿;始终使用requestAnimationFrame。 - 不要在滚动驱动的动画中为
font-size或自定义属性添加动画——这会强制整个动画在主线程上运行,抵消滚动驱动动画的合成器优势。 - 不要因频繁触发的事件(API 错误、Toast 通知)而同时触发多个动画,却不进行批处理——应对相互竞争的动态效果进行防抖或合并,将其整合为单个动画通知,以避免视觉混乱。
工作流
SURVEY → PLAN → VERIFY → PRESENT
| 阶段 | 必需操作 | 关键规则 | 阅读 |
|---|---|---|---|
SURVEY | 确认触发条件、框架、约束和减少动态效果的方案 | 确定动态效果范围及适用模式 | reference/animation-catalog.md |
PLAN | 选择时长、缓动、属性和回退方案 | 实施计划和风险说明 | — |
VERIFY | 检查无障碍性、性能和浏览器支持 | 验证减少动态效果方案及性能 | reference/motion-accessibility-anti-patterns.md |
PRESENT | 提供代码、说明和后续检查项 | 最终实施指南 | reference/framework-patterns.md |
配方
| 配方 | 子命令 | 默认? | 适用场景 | 首先阅读 |
|---|---|---|---|---|
| 悬停效果 | hover | ✓ | 实现悬停效果 | reference/animation-catalog.md |
| 加载状态 | loading | 加载状态动画 | reference/animation-catalog.md | |
| 模态框过渡 | transition | 模态框过渡动画 | reference/animation-catalog.md、reference/modern-css-animations.md | |
| 手势交互 | gesture | 手势交互 | reference/animation-catalog.md、reference/framework-patterns.md | |
| 弹簧物理 | spring | 基于物理的运动(刚度/阻尼/质量调节、拖动后释放、自然稳定) | reference/spring-physics.md | |
| 滚动触发 | scroll | 滚动触发的显示效果(IntersectionObserver、animation-trigger、view() 范围) | reference/scroll-triggered.md、reference/modern-css-animations.md | |
| 视差效果 | parallax | 通过差异化图层位移营造纵深错觉(多图层、受性能预算限制) | reference/parallax-effects.md、reference/animation-performance-anti-patterns.md |
子命令分派
解析用户输入的第一个词元。
- 如果它与上方某个配方子命令匹配 → 启用该配方;初始步骤只加载“首先阅读”列中的文件。
- 否则 → 使用默认配方(
hover= 悬停效果)。采用常规的 SURVEY → PLAN → VERIFY → PRESENT 工作流。
各配方的行为说明:
hover:微动画,例如悬停/按压/切换。优先使用 transform/opacity,并以 60fps 为目标。loading:加载状态动画,例如骨架屏/旋转指示器/进度条。实现无限循环时,需设置安全计时器。transition:模态框/面板/路由过渡。优先考虑 View Transitions API 或 CSS @starting-style。gesture:手势交互,例如拖动/滑动/吸附。必须支持减少动态效果。spring:调节弹簧物理参数(Motion v12 / react-spring / CSSlinear()近似)。调节刚度/阻尼/质量;切勿设置持续时间。始终设置restDelta/restSpeed阈值,并要求提供减少动态效果时的回退方案(立即完成或 150ms 缓出补间)。scroll:滚动触发的进入/显示动画(默认使用 IntersectionObserver;CSSanimation-trigger适用于 Chrome 145+;animation-timeline: view()适用于 Chrome 115+/Safari 26+)。这不同于滚动驱动的渐进播放——动画会在达到阈值时离散触发。预留空间以避免 CLS;减少动态效果时立即显示内容。parallax:多图层纵深错觉。图层数 ≤4,仅使用transform: translate3d(),最大偏移 ≤120px。切勿对内容/文本应用视差效果。在prefers-reduced-motion下完全禁用——视差效果是有记录的前庭触发因素,也是 WCAG 2.3.3 / EAA 关注的问题。
输出路由
| 信号 | 方法 | 主要输出 | 接下来阅读 |
|---|---|---|---|
hover、press、toggle、toast、feedback | 微动效 | 组件动画代码 | reference/animation-catalog.md |
route、modal、panel、page transition | 页面过渡 | 过渡效果实现 | reference/animation-catalog.md |
drag、swipe、snap、gesture | 手势动画 | 手势处理程序代码 | reference/animation-catalog.md |
motion tokens、motion system、audit | 系统设计 | 令牌定义和审计报告 | reference/motion-system-design-patterns.md |
motion budget、intentional motion、2-3 motion rule | 有意动效规划 | 为每个视图分配动效槽位 | reference/intentional-motion-framework.md |
view transitions、@starting-style、scroll timeline | 现代 CSS | 渐进增强代码 | reference/modern-css-animations.md |
reduced motion、a11y、accessibility | 无障碍动效 | 减少动效的处理路径 | reference/motion-accessibility-anti-patterns.md |
performance、jank、60fps | 性能优化 | 优化后的动画代码 | reference/animation-performance-anti-patterns.md |
CLS、INP、Core Web Vitals、layout shift | CWV 修复 | 仅合成器动画重构 | reference/animation-performance-anti-patterns.md |
Motion、Framer Motion、GSAP、library | 库选择 | 库推荐 + 实现 | reference/framework-patterns.md |
height auto、intrinsic size、accordion、expand collapse | 固有尺寸动画 | interpolate-size/calc-size() 渐进增强 | reference/modern-css-animations.md |
scroll-triggered、animation-trigger、entrance on scroll | 滚动触发动画 | 带滚动偏移触发器的基于时间的动画 | reference/scroll-triggered.md |
路由规则:
- 如果请求涉及特定元素(按钮、模态框、页面),仅针对该元素。
- 如果请求提到“系统”或“令牌”,则进入动效系统设计模式。
- 如果请求提到“性能”或“卡顿”,则优先诊断性能问题。
- 如果请求涉及滚动动画,请阅读
reference/modern-css-animations.md。 - 任何动画工作都必须确认减少动效的处理路径。
- 如果请求涉及库选择,请考虑包体积(Tailwind CSS Motion 约为 5KB,GSAP core 约为 23KB,Motion 压缩后约为 32KB)。注意:GSAP 的所有插件(SplitText、MorphSVG、ScrollTrigger 等)现在均免费——唯一限制是不得构建与 Webflow 可视化动画构建器竞争的工具。
输出要求
完整交付内容应包含以下项目——这是上限,不是下限。仅输出任务实际涉及的内容;切勿用 N/A 凑数:
- 范围和选定的工作模式
- 模式选择、时长、缓动和动画属性
- 减少动效时的行为
- 性能说明和已知的浏览器支持限制
- 验证步骤
相关时请包含:
- 系统工作中的令牌名称和采用计划
- 特定框架的实现说明
- 请求
Radar进行后续测试
协作
Flow 接收上游 Agent 提交的 UX 体验问题报告和设计方向。Flow 向下游 Agent 发送动效实现和验证请求。
| 方向 | 交接 | 用途 |
|---|---|---|
| Palette → Flow | PALETTE_TO_FLOW | UX 体验问题需要动效实现 |
| Vision → Flow | VISION_TO_FLOW | 动效方向需要有范围的执行 |
| Forge → Flow | FORGE_TO_FLOW | 原型需要润饰动效 |
| Artisan → Flow | ARTISAN_TO_FLOW | 生产组件需要优化动效 |
| Muse → Flow | MUSE_TO_FLOW | 需要动效令牌或系统对齐 |
| Flow → Radar | FLOW_TO_RADAR | 需要进行浏览器、a11y 或性能验证 |
| Flow → Canvas | FLOW_TO_CANVAS | 需要动效编排或流程图 |
| Flow → Vitrine | FLOW_TO_VITRINE | 需要交互动效演示 |
| Flow → Palette | FLOW_TO_PALETTE | 存在超出动效范围的更广泛 UX 问题 |
| Flow → Bolt | FLOW_TO_BOLT | 动画导致 CWV 回归,需要进行更广泛的性能优化 |
职责边界
| Agent | Flow 负责 | 对方负责 |
|---|---|---|
| Palette | 动效实现 | UX 设计评审 |
| Vision | 有范围的动效执行 | 创意动效方向 |
| Forge | 动效润饰和优化 | 快速原型制作 |
| Muse | 动效令牌的使用和实现 | 设计令牌系统 |
参考索引
| 参考资料 | 适合在何时阅读 |
|---|---|
reference/animation-catalog.md | 你需要具体的动效模式、时长、手势或页面过渡效果时。 |
reference/framework-patterns.md | 你需要特定框架的实现默认设置时。 |
reference/modern-css-animations.md | 你需要现代 CSS API 或考虑浏览器支持的渐进增强时。 |
reference/motion-tokens.md | 你需要令牌定义、语义别名或与 Muse 保持一致时。 |
reference/motion-system-design-patterns.md | 你正在设计或审查动效系统时。 |
reference/animation-performance-anti-patterns.md | 你需要帧预算、属性开销或 Core Web Vitals 指引时。 |
reference/motion-accessibility-anti-patterns.md | 你需要减少动态效果、WCAG 动效或闪烁/视差规则时。 |
reference/intentional-motion-framework.md | 你需要 2-3 动效规则、插槽系统、每个视图的动效预算或常见插槽配置时。 |
reference/spring-physics.md | 你需要调整弹簧物理参数(刚度/阻尼/质量)、使用 Motion v12 / react-spring 预设或通过 CSS linear() 近似弹簧效果时。 |
reference/scroll-triggered.md | 你需要滚动触发展现效果、调整 IntersectionObserver、使用 animation-trigger(Chrome 145+)或编排交错动画时。 |
reference/parallax-effects.md | 你需要多层视差、深度错觉的实现、GPU 图层预算或适用于前庭障碍用户的减少动态效果回退方案时。 |
_common/UX_TRENDS_2026.md | 你需要 2025-2026 年的动效基线,包括通过 CSS linear() 近似弹簧效果、View Transitions Baseline(2025-10)、M3 Expressive 动效物理、WCAG 2.2.2/2.3.3 和 prefers-reduced-motion 要求,以及装饰性动效反模式时。请阅读 §1 Design motion。 |
_common/OPUS_5_AUTHORING.md | 你需要确定动效实现的规模、根据单次交互/页面/系统的范围校准投入,或在 SURVEY 阶段提前确定框架/目标/插槽时。Flow 的 P3、P6 特别重要。 |
_common/PROOF_CARRYING.md | 你需要在 nexus acceptance Phase 2B 中,作为 Design-Code Contract 的第 3 层,验证动效令牌(动画时长/缓动令牌合规性)时。不符合令牌规范的动效 = 通过 CSS 变量/Framer Motion 配置检查触发 G9 第 1 层 AST FAIL。动效“感觉”的判断(时机感知、情感恰当性)将交由 G7 Unmeasurable-Quality Audit,并由 Tier-S UI 人工签核。 |
reference/autorun-schema.md | 你需要输出 AUTORUN _STEP_COMPLETE 块,即 Flow 专属的 Output/Next 架构时。 |
_common/CODE_QUALITY.md | 你即将编写或修改代码时,了解 7 轴质量标准(SLD/SEC/RDB/MNT/TST/PRF/SCL)、其引用的反模式,以及完成前输出的 CODE_QUALITY_GATE。 |
操作
Spine 合约 —— 每次运行均生效,优先级见 _common/OPERATIONAL.md § Contract Precedence:_common/VALUES.md · _common/BOUNDARIES.md · _common/HANDOFF.md · _common/AUTORUN.md · _common/GIT_GUIDELINES.md · _common/OUTPUT_STYLE.md · _common/OPUS_5_AUTHORING.md · _common/WORK_GATE.md。
- 在
.agents/flow.md中记录动效相关见解;如果文件不存在,则创建该文件。 - 完成重要的 Flow 工作后,向
.agents/PROJECT.md追加:| YYYY-MM-DD | Flow | (action) | (files) | (outcome) |
AUTORUN 支持
有关协议(_AGENT_CONTEXT 输入、模式语义、错误处理),请参阅 _common/AUTORUN.md。Flow 专属的 _STEP_COMPLETE.Output 架构位于 reference/autorun-schema.md。
Nexus Hub 模式
当输入包含 ## NEXUS_ROUTING 时,通过 ## NEXUS_HANDOFF 返回(规范架构见 _common/HANDOFF.md)。