|
|
@@ -10,6 +10,7 @@
|
|
|
- **React 18** - 前端框架
|
|
|
- **Tailwind CSS v4** - 原子化CSS框架
|
|
|
- **@egoist/tailwindcss-icons** - 图标库集成
|
|
|
+- **@weapp-tailwindcss/merge** - Tailwind类名合并工具(小程序版tailwind-merge)
|
|
|
- **clsx** - 条件样式类名管理
|
|
|
|
|
|
## 目录结构
|
|
|
@@ -47,6 +48,32 @@ mini/
|
|
|
</View>
|
|
|
```
|
|
|
|
|
|
+#### 1.2 类名合并规范
|
|
|
+```typescript
|
|
|
+// ✅ 使用twMerge处理动态类名冲突
|
|
|
+import { twMerge } from '@weapp-tailwindcss/merge'
|
|
|
+
|
|
|
+// 处理静态和动态类名的冲突
|
|
|
+<View className={twMerge('px-4 py-2', isActive ? 'bg-blue-500' : 'bg-gray-200')}>
|
|
|
+ <Text>按钮</Text>
|
|
|
+</View>
|
|
|
+
|
|
|
+// 处理多个条件类名的合并
|
|
|
+<View className={twMerge(
|
|
|
+ 'flex items-center',
|
|
|
+ isActive && 'bg-blue-500 text-white',
|
|
|
+ isDisabled && 'opacity-50 cursor-not-allowed',
|
|
|
+ customClassName
|
|
|
+)}>
|
|
|
+ <Text>复杂组件</Text>
|
|
|
+</View>
|
|
|
+
|
|
|
+// ❌ 避免手动拼接类名导致冲突
|
|
|
+<View className={`px-4 py-2 ${isActive ? 'bg-blue-500' : 'bg-gray-200'} ${customClassName}`}>
|
|
|
+ <Text>按钮</Text>
|
|
|
+</View>
|
|
|
+```
|
|
|
+
|
|
|
#### 1.2 响应式设计
|
|
|
```typescript
|
|
|
// 使用Tailwind的响应式前缀
|
|
|
@@ -297,13 +324,46 @@ module.exports = {
|
|
|
```typescript
|
|
|
// mini/src/utils/cn.ts
|
|
|
import { clsx, type ClassValue } from 'clsx'
|
|
|
-import { twMerge } from 'tailwind-merge'
|
|
|
+import { twMerge } from '@weapp-tailwindcss/merge'
|
|
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
|
return twMerge(clsx(inputs))
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+#### 6.2 小程序专用类名处理
|
|
|
+```typescript
|
|
|
+// 小程序环境下的类名合并
|
|
|
+import { twMerge } from '@weapp-tailwindcss/merge'
|
|
|
+
|
|
|
+// 标准用法(自动处理小程序转义)
|
|
|
+const classes = twMerge('px-2 py-1 bg-red hover:bg-dark-red', 'p-3 bg-[#B91C1C]')
|
|
|
+// → 'hovercbg-dark-red p-3 bg-_hB91C1C_'
|
|
|
+
|
|
|
+// 手动指定版本(如果需要)
|
|
|
+import { twMerge as twMergeV4 } from '@weapp-tailwindcss/merge/v4'
|
|
|
+import { twMerge as twMergeV3 } from '@weapp-tailwindcss/merge/v3'
|
|
|
+
|
|
|
+// 使用cva进行组件变体管理
|
|
|
+import { cva } from 'class-variance-authority'
|
|
|
+
|
|
|
+const buttonVariants = cva(
|
|
|
+ 'inline-flex items-center justify-center rounded-md text-sm font-medium',
|
|
|
+ {
|
|
|
+ variants: {
|
|
|
+ variant: {
|
|
|
+ default: 'bg-blue-500 text-white hover:bg-blue-600',
|
|
|
+ destructive: 'bg-red-500 text-white hover:bg-red-600',
|
|
|
+ },
|
|
|
+ size: {
|
|
|
+ sm: 'h-8 px-3 text-xs',
|
|
|
+ lg: 'h-12 px-6 text-base',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+)
|
|
|
+```
|
|
|
+
|
|
|
### 7. 最佳实践
|
|
|
|
|
|
#### 7.1 状态管理
|
|
|
@@ -362,9 +422,63 @@ const [data, setData] = useState<User[]>([])
|
|
|
// <View className="outline outline-1 outline-red-500" />
|
|
|
```
|
|
|
|
|
|
+### 10. tailwind-merge使用规范
|
|
|
+
|
|
|
+#### 10.1 基本用法
|
|
|
+```typescript
|
|
|
+// 单类名合并
|
|
|
+const result = twMerge('px-2 py-1 bg-red hover:bg-dark-red', 'p-3 bg-[#B91C1C]')
|
|
|
+// → 'hovercbg-dark-red p-3 bg-_hB91C1C_'
|
|
|
+
|
|
|
+// 处理冲突类名
|
|
|
+twMerge('px-4', 'px-2') // → 'px-2'
|
|
|
+twMerge('text-red-500', 'text-blue-500') // → 'text-blue-500'
|
|
|
+```
|
|
|
+
|
|
|
+#### 10.2 条件类名处理
|
|
|
+```typescript
|
|
|
+// 使用cn工具函数处理条件类名
|
|
|
+import { cn } from '@/utils/cn'
|
|
|
+
|
|
|
+const Button = ({ variant, size, disabled, className }) => {
|
|
|
+ return (
|
|
|
+ <Button
|
|
|
+ className={cn(
|
|
|
+ 'inline-flex items-center justify-center rounded-md',
|
|
|
+ variant === 'primary' && 'bg-blue-500 text-white',
|
|
|
+ variant === 'secondary' && 'bg-gray-200 text-gray-800',
|
|
|
+ size === 'sm' && 'px-3 py-1 text-sm',
|
|
|
+ size === 'lg' && 'px-6 py-3 text-lg',
|
|
|
+ disabled && 'opacity-50 cursor-not-allowed',
|
|
|
+ className // 允许外部覆盖
|
|
|
+ )}
|
|
|
+ >
|
|
|
+ 按钮
|
|
|
+ </Button>
|
|
|
+ )
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 10.3 小程序特殊处理
|
|
|
+```typescript
|
|
|
+// 跨端使用
|
|
|
+import { create } from '@weapp-tailwindcss/merge'
|
|
|
+
|
|
|
+const { twMerge } = create({
|
|
|
+ // 在当前环境为小程序时启用转义
|
|
|
+ disableEscape: true
|
|
|
+})
|
|
|
+
|
|
|
+// 版本选择
|
|
|
+import { twMerge as twMergeV4 } from '@weapp-tailwindcss/merge/v4' // Tailwind v4
|
|
|
+import { twMerge as twMergeV3 } from '@weapp-tailwindcss/merge/v3' // Tailwind v3
|
|
|
+```
|
|
|
+
|
|
|
## 注意事项
|
|
|
|
|
|
1. **兼容性**:确保所有类名在小程序环境中有效
|
|
|
2. **性能**:避免过度嵌套和复杂选择器
|
|
|
3. **可维护性**:保持组件结构清晰,样式统一
|
|
|
-4. **可读性**:合理使用空格和换行,提高代码可读性
|
|
|
+4. **可读性**:合理使用空格和换行,提高代码可读性
|
|
|
+5. **tailwind-merge**:始终使用twMerge或cn工具函数处理动态类名,避免类名冲突
|
|
|
+6. **版本兼容**:根据Tailwind CSS版本选择正确的tailwind-merge版本
|