mcpField
F
fluid-design

fluid-design

github.com/kemiljk设计与 UI6170 次安装1 周前更新
代码仓库

关于 fluid-design

fluid-design 是一套让界面交互呈现连续运动感的设计方法,面向构建交互体验的设计与开发人员。它强调可中断的动效、手势中的速度延续、输入方式适配和减少动态效果的替代方案。

主要功能

  1. 01交互位移优先采用弹簧效果
  2. 02确保动画可中断
  3. 03在手势边界延续速度
  4. 04按输入方式调整交互
  5. 05用布局动画保持空间连续
  6. 06提供减少动态效果的替代方案

适用场景

  1. 01设计可拖动并可反向的交互
  2. 02让界面转换保留对象连续性
  3. 03为触控、鼠标和键盘调整交互
  4. 04为减少动态效果模式保留操作能力

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kemiljk/skills --skill fluid-design

安装后在 Claude Code 中输入/fluid-design确认已加载。

附带文件references/motion-recipes.mdreferences/principles.md

详细介绍

流体设计

让界面呈现连续物理系统般的感受,而不是离散的状态切换。

与其他技能的配合

  • 此技能负责交互应带来的感受。
  • modern-css-html 负责在能实现这种感受的前提下,采用最原生的实现方式。
  • CSS/HTML 能表达所需行为时,优先使用它们。
  • 需要中断、速度继承、手势连续性,或 CSS 无法流畅表达的弹簧物理效果时,使用 JavaScript/Motion/SwiftUI。

默认原则

  1. 交互式位移和缩放优先使用弹簧,而非固定时长的缓动。
  2. 用户可触发的动画都必须可中断。
  3. 对象可被抓取时,优先使用直接操控,而非只能通过按钮间接操作。
  4. 在手势边界(松开 → 稳定/关闭)之间保留速度。
  5. 状态/路由变化时,只要同一对象仍然存在,就保留其共享身份。
  6. 根据输入方式(鼠标、触控板、触控、键盘)调整交互模型。
  7. 空间连续性优先使用 FLIP、布局动画或 View Transitions。只有当组件适合且已评估渲染成本时,才直接为布局属性添加动画。
  8. 在边缘添加渐进阻力,在边界添加橡皮筋效果。
  9. 安排动画编排顺序:被操作的对象先动,周围元素让位,随后稳定下来。
  10. 提供减少动态效果模式,在使用更安全的替代方案时仍保留相应功能。

优先采用 / 避免采用

优先采用避免采用
交互动作使用 type: "spring"transition: all
颜色/透明度使用 CSS transition没有充分理由或性能检查就进行开销大的布局动画
提供其他减少动态效果布局将 animation: none !important 作为唯一的无障碍方案
在密集区域基于速度控制悬停触发让人感觉迟钝的防抖悬停,或未加门控的频闪效果
Transform + opacity用户必须等待播放完毕的冗长锁定关键帧序列

起始调优参数

  • UI 弹簧:刚度 200–400,阻尼 20–30,质量 0.8–1.2
  • 布局重排:约 200–350ms,或使用阻尼良好的弹簧
  • 手势关闭:结合偏移阈值 + 速度阈值
  • 密集悬停区域:使用 EMA 平滑速度,并设置不同的触发/取消触发阈值

输入与无障碍

  • 桌面端 + 动态效果:按设计使用弹簧、偏转和速度门控。
  • 桌面端 + 减少动态效果:保留层级结构和控件;以更柔和的透明度/颜色/吸附模型替代空间物理效果。
  • 触控:优先采用拖动/滚动的交互方式,而非依赖悬停来发现功能。
  • 键盘:无需精确使用指针,也能操作每个交互区域。

审查清单

  • 用户能否在动画进行中反向操作或改变方向?
  • 移动距离/速度是否会改变动画响应?
  • 交互动画是否只作用于适合合成器处理的属性?
  • 减少动态效果后,用户是否仍能完成相同任务?
  • 列表/网格重排是否保留空间记忆?
  • 悬停密集区域是否针对指针快速扫过进行了门控?
  • 是否因为 CSS 无法表达所需行为,才使用 JS?

参考资料

  • 阅读 Motion recipes,查找相应手势或过渡效果的实现方法。
  • 决定连续性应如何表现时,阅读 Principle notes。 仅加载任务所需的参考资料。

评论

支持 Markdown