--- description: 前端应用的 Tailwind CSS 和 UI 组件最佳实践 --- # 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` - 实现适当的颜色对比度 - 有效使用不透明度工具类 - 正确配置自定义颜色 - 使用适当的渐变工具类 - 实现适当的悬停状态 ## UI 组件 - 从 `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 - 使用适当的缓存策略 - 实现适当的代码分割 - 为生产环境优化 - 监控打包大小 ## 样式组织 - 按逻辑顺序排列工具类(布局 → 间距 → 排版 → 颜色 → 其他) - 使用一致的类名顺序 - 将复杂的样式组合提取为组件 - 使用 @layer 指令组织自定义样式 ## 无障碍性 - 确保足够的颜色对比度 - 使用语义化 HTML 元素 - 实现键盘导航支持 - 添加适当的 ARIA 属性 - 测试屏幕阅读器兼容性 ## 最佳实践 - 遵循命名约定 - 保持样式有序 - 使用适当的文档 - 实现适当的测试 - 遵循无障碍性指南 - 使用适当的版本控制 - 避免内联样式,优先使用工具类 - 保持样式的可维护性和可读性