UI 技能
当被调用时,应用这些固定的约束规则来构建更好的界面。
如果使用文件路径参数调用(例如:/ui-skills src/components/Button.tsx):
- •读取指定的文件
- •根据下面的所有约束规则进行审查
- •针对违规内容提供具体的、可操作的反馈
- •建议具体的改进方案
如果不带参数调用:
- •将这些约束规则应用于本次对话中的任何 UI 工作
- •在编写或审查界面代码时记住这些规则
技术栈
- •必须在使用自定义值之前优先使用 Tailwind CSS 默认值(间距、圆角、阴影)
- •当需要 JavaScript 动画时,必须使用
motion/react(以前称为framer-motion) - •应该在 Tailwind CSS 中使用
tw-animate-css来实现入场和微动画 - •必须使用
cn工具(clsx+tailwind-merge)来处理类名逻辑
组件
- •对于任何涉及键盘或焦点行为的内容,必须使用无障碍组件原语(
Base UI、React Aria) - •必须优先使用项目现有的组件原语
- •绝不在同一交互界面中混用不同的原语系统
- •如果与技术栈兼容,应该优先选择
Base UI作为新的原语 - •必须为纯图标按钮添加
aria-label - •除非明确要求,否则绝不手动重建键盘或焦点行为
交互
- •对于破坏性或不可逆操作,必须使用
AlertDialog - •应该为加载状态使用结构化骨架屏
- •对于纯图标内容或工具属性内容,试用
ToolTip组件包裹并进行描述 - •绝不使用
h-screen,应使用h-dvh - •对于固定元素,必须遵守
safe-area-inset - •必须在操作发生的位置旁边显示错误信息
- •绝不阻止在
input或textarea元素中粘贴
动画
- •除非明确要求,否则绝不添加动画
- •必须仅对合成器属性(
transform、opacity)进行动画 - •绝不对布局属性(
width、height、top、left、margin、padding)进行动画 - •应该避免对绘制属性(
background、color)进行动画,除非是小型局部 UI(文本、图标) - •入场动画应该使用
ease-out - •交互反馈绝不超过
200ms - •必须在屏幕外时暂停循环动画
- •必须遵守
prefers-reduced-motion - •除非明确要求,否则绝不引入自定义缓动曲线
- •应该避免对大图像或全屏界面进行动画
排版
- •必须对标题使用
text-balance,对正文/段落使用text-pretty - •必须对数据使用
tabular-nums - •应该在密集 UI 中使用
truncate或line-clamp - •除非明确要求,否则绝不修改
letter-spacing(tracking-)
布局
- •必须使用固定的
z-index刻度(不使用任意的z-*) - •应该对正方形元素使用
size-*,而不是w-*+h-*
性能
- •绝不对大型
blur()或backdrop-filter界面进行动画 - •绝不在活动动画之外应用
will-change - •对于任何可以表达为渲染逻辑的内容,绝不使用
useEffect
设计
- •除非明确要求,否则绝不使用渐变
- •绝不使用紫色或多色渐变
- •绝不将发光效果作为主要视觉提示
- •除非明确要求,否则应该使用 Tailwind CSS 默认阴影刻度
- •必须为空状态提供一个明确的下一步操作
- •应该将每个视图的强调色使用限制为一种
- •应该在引入新颜色之前优先使用现有主题或 Tailwind CSS 颜色标记