该技能用于指导界面打磨、组件设计与动画决策,核心来源是 Emil Kowalski 的设计工程理念。首次调用且无具体问题时,按要求仅回复一段就绪说明,不提供其他信息,直到用户提问。
用途与理念:强调品味可通过训练获得;关注用户不会注意到的隐形细节,它们叠加起来形成整体质感;把美感当作差异化手段。
主要能力:
- 动画决策框架:先判断是否该动画(高频操作如快捷键、命令面板切换永不加动画;每日数十次的操作删减或大幅简化;偶发操作如弹窗、抽屉、提示用标准动画;罕见/首次场景可加惊喜)。再明确目的(空间一致性、状态指示、解释、反馈、避免突兀变化)。再选缓动(进入/退出用 ease-out;屏内移动用 ease-in-out;悬停/变色用 ease;匀速运动用 linear;默认 ease-out;避免 ease-in),建议使用自定义曲线如 --ease-out: cubic-bezier(0.23, 1, 0.32, 1)、--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1)、--ease-drawer: cubic-bezier(0.32, 0.72, 0, 1),曲线可借 easing.dev 或 easings.co 选取。最后定速度:按钮反馈 100-160ms,工具提示与小浮层 125-200ms,下拉/选择 150-250ms,弹窗与抽屉 200-500ms,营销/解释可更长;UI 动画通常控制在 300ms 内。
- 审查格式:审查 UI 代码时必须用含 Before/After/Why 三列的 Markdown 表格,逐条列出问题,禁止用分行列表形式。
- 组件原则:按钮在 :active 加 transform: scale(0.97) 提供按压反馈;不要从 scale(0) 起步,应从 scale(0.9) 以上配合 opacity;浮层用 transform-origin: var(--transform-origin) 从触发点展开,弹窗例外保持居中;后续工具提示可跳过延迟与动画(data-instant);可打断的 UI 优先用 CSS transition 而非 keyframes;跨状态过渡不自然时可临时加 filter: blur(2px) 弥合,模糊控制在 20px 以内。
- 动画实现细节:弹入可用 @starting-style,不支持时退回 data-mounted 模式;translate 用百分比相对自身尺寸,优于硬编码像素;scale 会同时缩放子元素;可用 rotateX/rotateY、preserve-3d 做 3D;clip-path 的 inset 可做遮罩、标签颜色过渡、长按删除、滚动图片揭示、对比滑块等。
- 手势与拖拽:按速度判定关闭(速度约超 0.11 即关闭,不必拖过阈值);越界时加阻尼。
- 弹簧动画:适合拖拽带惯性、要"有生命感"的元素、可中途打断的手势、装饰性鼠标跟随;用 Motion(原 Framer Motion)的 useSpring 插值;配置可用 duration 0.5/bounce 0.2,或用 mass/stiffness/damping;弹跳保持 0.1-0.3,多数 UI 场景避免弹跳。弹簧在被中断时保留速度,CSS keyframes 会从零重启。
适用场景:构建或审查按钮、下拉、弹窗、抽屉、提示、Toast、标签页、手势交互等前端界面。
限制:该技能偏理念与规范,未提供具体项目安装命令、依赖版本、支持平台、收费或价格信息,这些暂未提供。