跳转到使用指南
emil-design-eng作者 Emil Kowalski

Emil Design Eng Skill.

Claude Code 和 Codex 的 UX 研究 skill:emil Kowalski 关于 UI 打磨、组件设计和动画决策的理念。

  • UX & Research
emilkowalski/skills · skills/emil-design-eng/SKILL.mdSKILL.md
--- name: emil-design-eng description: This skill encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great. --- ## Initial Response ## Core Philosophy ## Review Format (Required) ## The Animation Decision Framework ## Spring Animations ## Component Building Principles
从 2026-09-14 的上游文件读取的前言和章节标题 · 完整 27,130 字符

01 功能说明

emil-design-eng Skill 在 Claude Code 和 Codex 中的作用

摘要、工作流与产物,均读自该 skill 的 SKILL.md。

来自 SKILL.md读取于 2026-09-14 · 非实际运行记录

以 skill 自身的术语

这个 skill 为编程 Agent 赋予 Emil Kowalski 在设计工程方面的判断力,用于界面工作:如何决定某个元素是否应该动起来,使用哪种缓动和时长,以及如何构建有响应感的组件。它设定了硬性默认值——UI 动画时长应低于 300ms,使用自定义 cubic-bezier 曲线而非内置 CSS 缓动,永远不用 ease-in,永远不用 scale(0) 的入场效果,弹出层应从其触发元素处缩放出现。

它还涉及弹簧效果、clip-path 技巧、拖拽与手势处理、GPU 性能规则、减少动态效果,以及代码评审时要求的 Before/After markdown 表格。它适合那些希望获得基于品味判断的界面决策、而非泛泛动画建议的设计师与开发者。

它产出什么

  • 一份包含 Before、After 和 Why 三列的 markdown 评审表格,每发现一个问题占一行
  • 可直接粘贴使用的 CSS 变量,其中保存着推荐的自定义缓动曲线
  • 弹簧配置对象,可以是 Apple 风格或传统物理参数
  • 根据评审清单(Review Checklist)各类别整理出的优先修复列表
查看示例提示词 ↗

工作方式

  1. 01
    根据频率来决定是否使用动画

    在编写任何动画代码之前,先判断用户触发该交互的频率有多高。

  2. 02
    明确目的

    每个动画都必须能回答“为什么要动”,答案应来自以下有效列表:空间一致性、状态指示、解释说明、反馈,或防止突兀的变化。

  3. 03
    选择自定义曲线

    根据元素是进入、退出、移动,还是仅改变颜色来选择缓动方式,然后用更强的自定义 cubic-bezier 曲线替换内置曲线。

  4. 04
    设置持续时间

    根据表格中的元素类型匹配持续时间——按钮按下 100-160ms,下拉菜单 150-250ms,模态框 200-500ms——并保持 UI 动画在 300ms 上限以下。

  5. 05
    应用组件默认值

    按钮在 :active 时缩放到 0.97,入场动画从 0.95 配合 opacity 开始而非 scale(0),弹出层从其触发元素处缩放展开,而模态框保持居中。

  6. 06
    在值得使用的地方使用弹簧动画

    弹簧动画适用于带动量的拖拽、可被中断的手势,以及刻意追求装饰效果的交互。

02 找到适合场景

何时使用 emil-design-eng Skill

在 Claude Code 或 Codex 中进行此类 UX 研究工作时使用 emil-design-eng skill。适用范围和限制见该 skill 自己的文件。

适合场景

  • 审查现有 UI 代码并获得具体的修复表格,而不是模糊的反馈
  • 构建组件时,细微的细节会累积成一个感觉恰到好处的界面
  • 拖拽和滑动操作中,关闭动作应响应快速滑动的速度,而不仅仅是拖动的距离
  • 在性能敏感的界面中,当主线程繁忙时 JS 动画会掉帧

了解边界

  • 到处使用弹跳式弹簧动画:大多数 UI 场景应避免弹跳效果,仅保留给拖拽关闭和趣味交互使用
  • 在功能性数据可视化上使用装饰性动画,此时没有动画反而更好
  • 任何想要 opacity 加 height 组合公式的人;该文件说这需要反复试验
  • 把“减少动态效果”当作零动画处理,这一点该文件明确反对

需要提供的信息

  • 你即将编写的动画该框架要求在编写任何动画代码之前,依次回答这四个问题:是否需要动画、为什么需要、使用哪种缓动、速度多快。
  • 用户会多频繁看到它频率是第一个问题,决定了整体判断——从永不使用动画到可以适度增添趣味。
  • 你的浏览器支持目标入场动画在支持的情况下使用 @starting-style,否则回退到 data-mounted 属性模式。

03 Skill 内部

emil-design-eng Skill 为 Claude Code 和 Codex 设定的规则

SKILL.md 为 Agent 设定的 6 条具体指令、默认值与边界——文件中真正改变结果的那部分。

  1. 永远不要使用 ease-in

    ease-in 会延迟初始移动,而这恰恰是用户最专注观察的时刻,因此 300ms 的 ease-in 下拉菜单会比相同时长的 ease-out 感觉更慢。

  2. 永远不要从 Scale(0) 开始入场

    现实世界中没有任何东西会完全消失后再重新出现。入场动画应从 scale(0.9) 或更高值配合 opacity 开始,按下缩放效果应保持在 0.95-0.98 之间的细微范围。

  3. 模态框保持居中原点

    弹出层应将 transform-origin 设置为其触发元素,使用 Base UI 的 var(--transform-origin),但模态框是明确的例外,因为它们并非锚定于某个触发元素。

  4. 评审要使用真正的表格

    UI 评审必须输出一个真正的 markdown 表格,包含 Before、After 和 Why 三列,每个问题一行。用单独的 Before: 和 After: 分行列出的形式是错误的格式。

  5. 将悬停行为限制在媒体查询之内

    悬停动画应写在 @media (hover: hover) and (pointer: fine) 内,因为触屏设备会在点击时触发悬停,导致误判。

  6. 保持错位动画短促且不阻塞

    错位延迟应在各项之间保持 30-80ms,延迟过长会让界面显得迟缓,而错位动画属于装饰性效果,播放期间绝不能阻塞交互。

04 投入使用

在 Claude Code 或 Codex 中安装 emil-design-eng

一条 npx skills add 命令,然后在你的 Agent 中执行第一个任务和对结果的清单检查。

将 emil-design-eng 添加到 Claude Code、Codex 或您的 Agent

在你的项目中运行;安装程序会询问要把它添加到哪个 Agent。

Terminal
npx skills add https://github.com/emilkowalski/skills --skill emil-design-eng

针对 skills/emil-design-eng/SKILL.md 的通用 skills CLI 形式;仓库可能会记录自己的路径。

给 Skill 第一个 UX 研究任务

按 skill 自身的术语撰写;把括号中的部分换成你的内容。

Starter prompt
Review the code for [the dropdown and the popover] in [component file]. The dropdown opens with ease-in over 300ms, the popover scales from center, and the entering panel animates from scale(0). Use the Before/After format and tell me what to change and why.

来源:依据 SKILL.md,按 skill 自身的术语撰写。

检查首次结果

SKILL.md 本身如何描述正确的结果:

  • 第二天以全新的眼光重新审视这份工作,因为离开一晚后瑕疵更容易被发现
  • 临时将时长放慢至正常的 2-5 倍,或使用浏览器动画检查器,以捕捉时序问题
  • 在 Chrome DevTools 中逐帧查看动画,以发现全速播放时看不出的协调问题
  • 在真机上测试抽屉和滑动手势,通过 USB 将手机连接到本地开发服务器
  • 在慢动作下确认动画属性保持同步,且起点和缓动效果看起来正确

在 OpenDesign 中emil-design-eng 已内置:Plugins → Skills,在顶部栏中选择它。

05 开源、可追溯

来源、许可与验证

本页面事实的来源,以及最后检查时间。

Repository
github.com/emilkowalski/skills 分支 main
Skill 文件
skills/emil-design-eng/SKILL.md 验证时记录的内容校验和;提交 d23d7f8
License
MIT 来自 LICENSE。
仓库星标数
37,516 GitHub 快照拍摄于 2026-09-14,针对整个 emilkowalski/skills 仓库,该仓库在此目录中包含 9 个 skills。不是 emil-design-eng 的评级或使用计数。
已由 OpenDesign 验证
2026-09-14 已检查源文件、路径、许可证文本和星标数。已捆绑在 OpenDesign 主版本中(检查于 2026-08-28);此页面尚未记录实际运行。

SKILL.md 内部

  1. 核心理念审美是可以训练的,不易察觉的细节会不断累积,而美感是真正的差异化因素。
  2. 评审格式(必需)要求使用 Before/After/Why 的 markdown 表格,并展示了被禁止使用的列表格式。
  3. 动画决策框架四个有序问题:频率、目的、缓动、时长,以及感知性能。
  4. Spring 动画何时适合使用 spring,用 useSpring 实现鼠标追踪,以及两种配置方式。
  5. 组件构建原则按压反馈、避免 scale(0)、popover 起点、tooltip 延迟、用 transition 代替 keyframes、模糊效果。
  6. CSS Transform 精通百分比位移、子元素缩放、3D 深度,以及 transform-origin 锚点。
  7. 用于动画的 clip-path叠层内嵌显现、标签页、长按删除、滚动显现、对比滑块。
  8. 手势与拖拽交互速度触发的关闭、边界阻尼、指针捕获、多点触控防护、摩擦力。
  9. 性能规则只对 transform 和 opacity 做动画,避免 CSS 变量重算,负载较高时优先使用 CSS。
  10. 无障碍减弱动效时保留 opacity 和颜色变化,去除位移;悬停通过媒体查询限制。
  11. Sonner 原则(打造受欢迎的组件)来自 Sonner 的六条原则,涉及开发体验、默认值、命名、边界情况、过渡效果、文档。
  12. 审查清单常见问题及其规定修复方式的表格,从 transition-all 到缺失的 stagger。
Skill 自身的描述
「该 skill 编码了 Emil Kowalski 关于 UI 打磨、组件设计、动画决策以及让软件感觉出色的隐形细节的理念。」

来自 SKILL.md 的前置描述。完整文件约 27,130 个字符。在 GitHub 上阅读完整文件。

Emil Design Eng

在真实的 UX 研究任务上运行 emil-design-eng。

emil-design-eng skill 内置于 OpenDesign。下载应用,在 Plugins → Skills 中选择该 skill,粘贴上述提示词,并在结果之前阅读计划。

终端
npx skills add https://github.com/emilkowalski/skills --skill emil-design-eng