| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- ---
- description: LabelStudio 客户端应用的 Tailwind CSS 和 UI 组件最佳实践
- globs: **/*.css,tailwind.config.ts,tailwind.config.js,**/*.scss,**/*.tsx,**/*.jsx
- ---
- # Tailwind CSS 最佳实践
- ## 组件样式
- - 使用工具类而非自定义 CSS
- - 需要时使用 @apply 将相关工具类分组
- - 仅在必要时使用自定义组件样式作为 SCSS 模块,以提高组件的可读性和可维护性
- - 使用适当的响应式设计工具类
- - 使用适当的状态变体
- - 保持组件样式一致
- ## 令牌(Tokens)
- - 所有来自 Figma 的令牌都是程序化生成的,定义在 `web/libs/ui/src/tokens/tokens.scss` 文件中
- - 可以通过使用 `Figma Variable Exporter` 插件从 Figma 导出,替换 `web/design-tokens.json` 的内容,然后使用 `cd web/ && yarn design-tokens` 命令重新生成令牌
- - 重新生成令牌时,确保运行项目根目录的 `make fmt-all` 命令,以确保所有文件都经过检查和格式化
- - 不要使用未通过 Figma Variable Exporter 插件定义并在 `web/libs/ui/src/tokens/tokens.scss` 文件中建立的令牌
- - 不要使用任何默认的 tailwind css 类,只使用通过 `web/libs/ui/src/tokens/tokens.js` 文件定义的类
- ## 布局
- - 使用语义化间距工具类,例如 `p-tight` 而非 `p-200` 或 `--spacing-tight` 而非 `--spacing-200`
- - 有效使用 Flexbox 和 Grid 工具类
- - 需要时使用容器查询
- - 实现适当的响应式断点
- - 使用适当的 padding 和 margin 工具类
- - 实现适当的对齐工具类
- ## 排版
- - 使用语义化排版工具类,例如 `text-body-medium` 而非 `text-16` 或 `--font-size-body-medium` 而非 `--font-size-16`
- - 使用适当的字体大小工具类
- - 实现适当的行高
- - 使用适当的字重工具类
- - 正确配置自定义字体
- - 使用适当的文本对齐
- - 实现适当的文本装饰
- ## 颜色
- - 仅使用语义化颜色命名,确保深色模式兼容性,例如 `bg-primary-background` 而非 `bg-grape-000` 或 `--color-primary-background` 而非 `--color-grape-000`
- - 实现适当的颜色对比度
- - 有效使用不透明度工具类
- - 正确配置自定义颜色
- - 使用适当的渐变工具类
- - 实现适当的悬停状态
- ## 组件
- - 从 `web/libs/ui/src/shad` 使用可用的 shadcn/ui 组件
- - 仅使用从 `web/libs/ui` 重新导出的 shadcn/ui 组件,而非 `web/libs/ui/src/shad` 中定义的原始组件
- - 在其他 libs 和 apps 中导入这些组件时应使用 `@humansignal/ui`
- - 正确组合组件
- - 保持组件变体一致
- - 实现适当的动画
- - 使用适当的过渡工具类
- - 牢记无障碍性
- - UI 组件应在 `web/libs/ui` 中定义和导出,并遵循代码组织的最佳实践
- ## 响应式设计
- - 使用移动优先方法
- - 实现适当的断点
- - 有效使用容器查询
- - 正确处理不同屏幕尺寸
- - 实现适当的响应式排版
- - 使用适当的响应式间距
- ## 性能
- - 使用适当的清除配置
- - 最小化自定义 CSS
- - 使用适当的缓存策略
- - 实现适当的代码分割
- - 为生产环境优化
- - 监控打包大小
- ## 最佳实践
- - 遵循命名约定
- - 保持样式有序
- - 使用适当的文档
- - 实现适当的测试
- - 遵循无障碍性指南
- - 使用适当的版本控制
|