---
alwaysApply: true
---
# CSS样式与UnoCSS使用规范
## 样式选择原则
### UnoCSS原子类使用规则
- **≤5个原子类**: 直接使用UnoCSS原子类
- **>5个原子类**: 必须提取为语义化CSS类,避免模板膨胀
```vue
```
### 优先使用UnoCSS预设shortcuts
参考 [unocss.config.ts](mdc:unocss.config.ts) 中定义的shortcuts:
```typescript
// 已定义的shortcuts,优先使用
"flex-center": "flex justify-center items-center"
"flex-start": "flex justify-start items-center"
"flex-between": "flex justify-between items-center"
"flex-col-center": "flex flex-col items-center"
```
## CSS类命名规范
### BEM命名规范
严格遵循BEM (Block\_\_Element--Modifier) 命名规范:
```scss
// Block: 独立的功能组件
.user-profile {
}
// Element: Block的子元素
.user-profile__avatar {
}
.user-profile__action {
}
.user-profile__badge {
}
// Modifier: Block或Element的状态/变体
.user-profile--dark {
}
.user-profile__action--active {
}
```
### 命名要求
1. **使用简短、易理解的英文单词**
2. **符合业务场景语义**
3. **避免缩写,除非是通用缩写**
```scss
// ✅ 好的命名
.user-profile__action
.stats-card
.service-icon
.tool-item
// ❌ 坏的命名
.up-act
.sc
.si
.ti
```
## 样式组织原则
### 1. 复用性判断
- 同一组合在项目中出现 >3次 → 提取为语义化类
- 具备明确语义的区域 → 提取为语义化类
- 需要主题适配的样式 → 提取为语义化类
### 2. 常用组合添加到shortcuts
当发现重复的原子类组合时,添加到 [unocss.config.ts](mdc:unocss.config.ts):
```typescript
shortcuts: [
{
// 现有shortcuts...
// 新增常用组合
"card-container": "mx-30rpx my-20rpx bg-white rounded-16rpx shadow-sm",
"action-button": "flex-center w-70rpx h-70rpx bg-white bg-opacity-90 rounded-full",
},
];
```
### 3. 主题适配
使用wot-design-uni的CSS变量或自定义变量:
```scss
// ✅ 使用主题变量
.service-icon {
background-color: var(--wot-color-bg-light, #f3f4f6);
}
// ✅ 响应式主题色
:color="themeStore.isDark ? '#fff' : '#333'";
```
### 4. 暗黑模式适配规则
#### 优先级顺序
1. **优先使用wot-design-uni内置变量** - 自动适配暗黑模式
2. **使用项目 [theme.scss](mdc:src/styles/theme.scss) 定义的变量** - 统一管理主题色
3. **最后考虑组件内部定义** - 仅用于特殊场景
#### 自定义主题变量定义
当需要自定义颜色时,必须在 [theme.scss](mdc:src/styles/theme.scss) 中定义:
```scss
/* 在 theme.scss 中添加自定义变量 */
:root,
page {
--custom-text-color: #333333;
--custom-bg-color: #ffffff;
--custom-border-color: #e5e7eb;
}
.wot-theme-dark {
--custom-text-color: #ffffff;
--custom-bg-color: #1a1a1a;
--custom-border-color: #374151;
}
```
#### 组件中使用主题变量
```scss
// ✅ 推荐:使用wot内置变量
.my-component {
background-color: var(--wot-color-bg);
color: var(--wot-color-text);
}
// ✅ 推荐:使用theme.scss定义的变量
.my-component {
background-color: var(--custom-bg-color);
border-color: var(--custom-border-color);
}
// ❌ 避免:组件内部硬编码暗黑模式
.my-component {
background-color: #ffffff;
}
.wot-theme-dark .my-component {
background-color: #1a1a1a;
}
```
#### 图标和文字颜色适配
```vue
文本
```
## 实践示例
### 数据统计卡片
```vue
0.00
我的余额
```
### 用户操作按钮
```vue
```
## 禁止项
❌ **不要在SCSS中重复定义UnoCSS已提供的工具类**
❌ **不要使用 `@apply` 指令**
❌ **不要把一次性样式放到全局**
❌ **不要使用非语义化的类名**
❌ **不要在模板中堆叠超过5个原子类**
❌ **不要混用UnoCSS原子类和自定义CSS类** - 一个元素应该只使用原子类或只使用自定义类,避免样式管理混乱
### 混用问题示例
```vue
内容
内容
内容
内容
内容
```
### 解决方案
当需要混用时,选择以下方案之一:
1. **原子类数量≤5个**:移除自定义类,只使用原子类
2. **原子类数量>5个**:将所有样式合并到自定义类中
3. **语义明确的区域**:优先使用自定义类,将原子类样式合并进去
## 组件库样式覆盖
使用wot-design-uni组件时:
- 使用 `custom-class` 传入类名
- 使用 `:deep()` 进行样式穿透
- 添加 `!important` 提升优先级
```vue
退出登录
```