name: css-development-validate description: 此技能应用于审查或审计现有CSS代码是否符合既定模式。触发词包括“review CSS”、“audit styles”、“check CSS”、“validate stylesheet”、“CSS review”。检查语义命名、深色模式覆盖、Tailwind使用情况和测试覆盖率。
CSS开发:验证
概述
根据既定模式审查现有CSS代码,并提供具体、可操作的反馈:
- 语义命名规范
- Tailwind
@apply组合 - 深色模式变体覆盖
- 测试覆盖率(静态 + 渲染)
- 文档质量
- 组合优化机会
这是 css-development 的子技能 - 通常通过主技能自动调用。
适用场景
在以下情况使用:
- 审查现有CSS代码
- 审计组件样式一致性
- 检查模式遵循情况
- 合并CSS更改之前
- 重构准备(先识别问题)
模式参考
此技能根据主 css-development 技能中记录的模式进行验证:
语义命名: .button-primary 而非 .btn-blue
Tailwind组合: 使用 @apply 组合工具类
深色模式: 包含 dark: 变体
测试覆盖率: 静态CSS + 组件渲染测试
文档: 类上方的使用注释
工作流程
调用此技能时,创建TodoWrite清单并系统性地进行验证。
宣布使用
“我正在使用css-development:validate技能,根据既定模式审查此CSS。”
创建TodoWrite清单
使用TodoWrite工具:
验证CSS:
- [ ] 读取CSS文件(加载components.css及相关样式)
- [ ] 检查语义命名(验证描述性类名)
- [ ] 验证@apply使用(确保Tailwind组合)
- [ ] 检查深色模式覆盖(确认存在dark:变体)
- [ ] 寻找组合优化机会(识别可重用模式)
- [ ] 验证测试覆盖率(检查是否存在静态和渲染测试)
- [ ] 检查文档(确保存在使用注释)
- [ ] 报告发现(提供文件:行号引用和建议)
验证清单详情
步骤1:读取CSS文件
操作: 使用Read工具加载要审查的CSS文件
要检查的文件:
styles/components.css(主要语义组件)- 任何提到的组件特定CSS文件
- 组件文件中的内联样式(如适用)
要捕获的内容:
- 所有类定义
@apply与内联工具类的使用情况- 深色模式变体的存在
- 文档注释
标记为完成当文件加载并理解后。
步骤2:检查语义命名
操作: 审查所有类名的语义、描述性命名
良好模式:
.button-primary、.card-header、.form-field、.empty-state- 上下文 + 组件:
.session-card、.marketing-hero - 基础 + 变体:
.badge-success、.button-danger
不良模式(报告这些):
- 工具类名称:
.btn-blue、.card-sm、.text-big - 缩写:
.btn、.hdr、.desc - 通用:
.component、.item、.thing - 随机:
.style1、.custom、.special
对于每个问题:
- 记录文件和行号
- 显示有问题的类名
- 根据使用上下文建议语义替代方案
标记为完成当所有类名审查完毕。
步骤3:验证@apply使用
操作: 检查Tailwind工具类是否通过 @apply 组合,而不是分散在标记中
良好模式:
.button-primary {
@apply bg-indigo-500 hover:bg-indigo-700 px-6 py-3 rounded-lg;
}
不良模式(报告这些):
<!-- 标记中的工具类而非语义类 -->
<button class="bg-indigo-500 hover:bg-indigo-700 px-6 py-3 rounded-lg">
点击我
</button>
检查:
- 工具类是否通过
@apply组合成语义类? - 标记中是否存在应提取的重复工具类组合?
- 语义类是否实际在组件中使用?
对于每个问题:
- 显示有问题的标记或CSS
- 解释为何应使用
@apply - 建议提取到语义类
标记为完成当@apply使用情况审查完毕。
步骤4:检查深色模式覆盖
操作: 验证彩色和交互元素具有 dark: 变体
需要深色模式的内容:
- 背景颜色(bg-*)
- 文本颜色(text-*)
- 边框颜色(border-*)
- 交互状态(hover, focus)
- 影响可见性的阴影
通常不需要深色模式的内容:
- 间距工具类(p-, m-, gap-*)
- 布局工具类(flex, grid等)
- 纯结构样式
要检查的模式:
/* 良好 - 有深色模式 */
.card {
@apply bg-white dark:bg-gray-800 text-gray-900 dark:text-white;
}
/* 不良 - 缺少深色模式 */
.card {
@apply bg-white text-gray-900;
}
对于每个问题:
- 记录缺少深色模式变体的类
- 显示当前CSS
- 建议添加特定的
dark:工具类
标记为完成当深色模式覆盖检查完毕。
步骤5:寻找组合优化机会
操作: 识别可重用现有类或应提取的重复模式
寻找:
- 在多个类中重复的相同工具类组合
- 可共享基础类的相似模式
- 可引用语义类的内联工具类
问题示例:
/* 重复模式 */
.card-primary {
@apply bg-white dark:bg-gray-800 rounded-lg shadow-md p-6;
}
.card-secondary {
@apply bg-white dark:bg-gray-800 rounded-lg shadow-md p-6;
@apply border-2 border-gray-200;
}
/* 建议:提取基础 .card 类,添加变体 */
.card {
@apply bg-white dark:bg-gray-800 rounded-lg shadow-md p-6;
}
.card-secondary {
@apply border-2 border-gray-200;
}
对于每个机会:
- 显示重复模式
- 建议基础类 + 组合
- 估算影响(多少地方受益)
标记为完成当组合优化机会识别完毕。
步骤6:验证测试覆盖率
操作: 检查CSS类是否具有测试覆盖
静态CSS测试 - 检查 styles/__tests__/components.test.ts:
it('should have button-primary class', () => {
expect(content).toContain('.button-primary');
});
组件渲染测试 - 检查组件测试文件:
it('applies button-primary class', () => {
render(<Button variant="primary">Click</Button>);
expect(screen.getByRole('button')).toHaveClass('button-primary');
});
对于没有测试的类:
- 列出类名
- 记录缺少哪种测试(静态、渲染或两者)
- 提供要添加的测试模板
标记为完成当测试覆盖率检查完毕。
步骤7:检查文档
操作: 验证组件具有使用文档
必需文档:
- CSS类上方的解释用途的注释
- 注释中的使用示例
示例:
/* 按钮组件 - 具有悬停提升效果的主要操作按钮
用法:<button className="button-primary">点击我</button> */
.button-primary {
...
}
对于没有文档的类:
- 列出类名和位置
- 根据类用途建议添加的文档
标记为完成当文档检查完毕。
步骤8:报告发现
操作: 将所有发现编译成结构化报告
报告格式:
## CSS验证报告
### ✅ 发现的良好模式
- `.button-primary` 遵循语义命名(components.css:15)
- 交互元素存在深色模式变体(components.css:17-19)
- 测试覆盖className应用(Button.test.tsx:23)
- 存在文档注释(components.css:14)
### ⚠️ 发现的问题
#### 语义命名问题
**components.css:45** - `.btn-blue` 使用工具类命名
- 当前:`.btn-blue`
- 建议:重命名为 `.button-secondary` 以与 `.button-primary` 保持一致
- 影响:更新3个组件文件
**components.css:67** - `.card-sm` 在名称中使用尺寸
- 当前:`.card-sm`
- 建议:将尺寸提取为工具类或重命名为 `.card-compact` 以获得语义含义
- 影响:更新5个使用处
#### 缺少深色模式变体
**components.css:78** - `.card-header` 缺少深色模式
- 当前:`@apply bg-gray-100 text-gray-900`
- 建议:添加 `dark:bg-gray-800 dark:text-white`
- 影响:深色模式下的视觉错误
**components.css:92** - `.badge` 缺少深色模式
- 当前:`@apply bg-indigo-100 text-indigo-800`
- 建议:添加 `dark:bg-indigo-900 dark:text-indigo-200`
- 影响:深色模式下对比度低
#### 缺少测试覆盖率
**components.css:102** - `.empty-state` 没有测试
- 缺少:静态CSS测试和组件渲染测试
- 建议:添加测试以验证类存在并正确渲染
#### 缺少文档
**components.css:115** - `.session-card` 缺少使用注释
- 建议:添加解释用途和使用示例的注释
### 📊 总结
- **审查的总类数:** 12
- **发现的问题:** 7
- **优先级:** 2个高(深色模式错误),3个中(命名),2个低(文档)
### 🎯 推荐操作
1. **高优先级:** 为 `.card-header` 和 `.badge` 添加深色模式变体(视觉错误)
2. **中优先级:** 将 `.btn-blue` 重命名为 `.button-secondary` 以保持一致性
3. **中优先级:** 为 `.empty-state` 添加测试覆盖率
4. **低优先级:** 为未文档化的类添加文档注释
您希望我自动修复这些问题,还是更愿意手动处理?
标记为完成当报告生成并呈现后。
完成
生成验证报告后:
-
询问用户下一步想做什么:
- 自动修复问题?
- 仅修复特定问题?
- 只需要报告?
-
如果存在需要重构的结构性问题,提供调用重构技能
-
建议提交任何已做的修复