用 AI 写前端,最常见的问题往往不是“页面跑不起来”,而是页面明明能用,看起来却总差一点。

弹窗出现得太慢,按钮点下去没有反馈,菜单动画像从屏幕中间凭空冒出来,所有地方都加了过渡效果,或者为了一个 Toast 又临时造了一套组件。这些问题单独看都不算严重,放在一起却很容易让界面显得生硬。

emilkowalski/skills 做的事情,正是把这类难以一句话说清楚的设计经验整理成 AI Agent 可以使用的 Skills。它不是新的 UI 框架,也不会提供一套现成组件,而是告诉 AI:面对具体界面问题时,应该怎样判断。

用 AI 做 UI 如何减少生硬动画?Emil Kowalski Skills 项目介绍

它不是组件库,而是一套判断规则

这个项目在 GitHub 上的名称是 Skills For Design Engineers,主要面向设计师、前端开发者以及使用 AI Agent 开发界面的用户。

现在的 AI 已经很擅长写 React、CSS 和动画代码,真正不稳定的是“为什么这样写”。同样一个弹出菜单,有的模型会使用较慢的 ease-in,有的会从 scale(0) 开始放大,还有的会为了视觉效果给高频操作加上明显动画。

这些写法未必有语法错误,却不一定符合实际使用体验。emilkowalski/skills 把作者积累的设计工程经验整理成规则,让 Agent 在生成和审查代码时多一层判断,而不是等页面完成后再用“优化得高级一点”这类模糊指令反复调整。

目前包含七个不同 Skills

仓库目前列出了 7 个主要 Skill,各自解决不同类型的问题。

Skill主要用途
emil-design-eng综合处理 UI 打磨、组件设计和动画判断
review-animations检查已有动画是否存在明显问题
improve-animations扫描整个项目并整理动画改进计划
find-animation-opportunities寻找真正有必要增加动效的位置
animation-vocabulary把模糊的动画描述转换成准确术语
apple-design整理 Apple 设计与流畅交互相关原则
pick-ui-library根据具体前端任务选择合适的第三方库

这种拆分比把所有规则塞进一个超长提示词更实用。检查一段已有动画,可以使用 review-animations;准备梳理整个项目,则更适合 improve-animations;想判断页面哪些地方值得加入动效,则可以使用 find-animation-opportunities。

对动画的态度其实很克制

从仓库内容来看,作者并不认为“动画多”就等于“设计好”。相反,一个反复出现的原则是:先判断这里到底需不需要动。

比如命令面板、键盘快捷操作、频繁切换的列表等高频交互,动画很容易从“精致”变成“拖慢操作”。而 Modal、Drawer、Toast 这类偶尔出现的界面,更适合通过适当动画帮助用户理解状态变化。

这套规则还会关注缓动方式、持续时间、动画起点、空间关系以及是否支持中断。例如 Popover 更适合从触发它的元素附近展开,而不是始终以自身中心缩放;进入动画通常也不建议直接从 scale(0) 开始,以免产生过于突兀的视觉效果。

这些并不是全新的动画理论,很多有经验的设计师和前端开发者平时也会做类似判断。这个项目的意义,是把这些经验写成 Agent 可以直接参考和执行的规则。

三个动画 Skill 分工清楚

仓库里最容易混淆的是 review-animations、improve-animations 和 find-animation-opportunities。三者都与动画有关,但使用场景并不相同。

review-animations

这个 Skill 更像一次针对动画的代码 Review。它检查已有实现中的缓动、时长、transform-origin、性能、Reduced Motion,以及动画本身是否有必要存在。

如果一个组件已经开发完成,希望 AI 找出其中“代码没错,但体验不对”的地方,这类任务更适合交给它。

improve-animations

improve-animations 面向整个代码库,而不是某一个组件。它会先了解项目使用的框架、动画库、CSS Token 和现有规范,再寻找重复出现的问题,并按优先级整理改进方案。

它有一个比较明确的工作边界:审计阶段主要负责分析和生成计划,而不是直接修改源代码。对于较大的项目,这种先体检、再实施的方式比边看边改更容易控制范围。

find-animation-opportunities

这个 Skill 虽然用于寻找动画机会,却并不鼓励到处增加动效。

它会寻找状态变化过于突兀、缺少操作反馈或空间关系不清楚的位置,同时排除高频操作和不适合动画的功能界面。换句话说,它不仅判断“哪里可以动”,也会判断“哪里最好不要动”。

动画术语也能减少沟通成本

animation-vocabulary 解决的是另一个常见问题:用户知道自己想要什么效果,却不知道准确名称。

例如“几个卡片依次出现”可能对应 Stagger,“拖到边界以后产生阻力再弹回来”对应 Rubber-banding,“元素从触发按钮的位置展开”可以用 Origin-aware Animation 来描述。

把模糊感觉转换成准确术语以后,不管是给 AI 下指令,还是设计师与开发者沟通,实现目标都会更明确。这个 Skill 本身不负责完成动画,更像是一份用于沟通的动画词典。

Apple Design 需要正确理解

仓库里的 apple-design 并不是 Apple 官方提供的 Skill。

根据项目说明,它主要整理 Apple 在 WWDC 等公开内容中体现的界面和交互设计思想,并将其中部分原则转换到 Web 开发场景。

内容涉及即时反馈、手势跟随、动画可中断、速度继承、Spring、Rubber-banding、空间连续性和 Reduced Motion 等。

这部分适合用来理解一些流畅交互背后的设计思路,但它属于作者基于公开资料进行的整理和转化,不能直接等同于 Apple 官方设计规范。

组件选型也被纳入 Skills

AI 写前端还有一个比较实际的问题:它可能在已有成熟方案的情况下重新造轮子,或者随意选择一个并不适合当前项目的依赖。

pick-ui-library 因此整理了一份作者偏好的前端工具清单。例如 Base UI 用于基础交互组件,Sonner 用于 Toast,Motion 用于复杂动画,Recharts 用于一般图表,dnd kit 用于拖拽,Virtuoso 用于长列表虚拟化,Zustand 用于状态管理。

这份列表带有明显的个人技术偏好,但 Skill 同时要求先检查项目已经使用的依赖。如果现有项目已经稳定采用其他成熟方案,不应该只为了符合推荐清单而更换技术栈。

安装方式比较简单

项目 README 给出的安装命令为:

npx skills@latest add emilkowalski/skills

需要注意的是,这并不是安装一款可以单独打开的软件。仓库的核心内容是 Skill 定义和规则文件,具体如何调用,要看所使用的 AI 编程工具是否支持相应的 Skills 工作流。

即使不安装,也可以直接阅读仓库中的 SKILL.md。里面不少关于动画频率、交互反馈和 UI 审查的规则,本身就具有一定参考价值。

参考资料

  1. Skills For Design Engineers GitHub 项目

  2. emilkowalski/skills 项目说明

  3. 项目 Skills 目录

  4. emilkowalski/skills MIT License