# 全局样式变量使用指南

**版本**: v3.0
**创建时间**: 2024-01-19
**项目**: jkec-xiaozhi-v2/jk-rag-platform

---

## 📁 文件位置

```
src/styles/
├── variables.scss    # SCSS/CSS 变量（统一文件）
└── global.scss       # 全局样式入口
```

---

## 🚀 快速开始

### 方式 1: SCSS 变量（推荐）

**在 SCSS 文件顶部导入**:
```scss
@import '@/styles/variables.scss';

// 使用变量
.my-component {
    color: $text-primary;
    padding: $spacing-4;
    border-radius: $radius-lg;
}
```

### 方式 2: CSS 变量

**在 SCSS/CSS 文件中使用**:
```scss
.my-component {
    color: var(--text-primary);
    padding: var(--spacing-4);
    border-radius: var(--radius-lg);
}
```

**在 JS/TS 中使用**:
```typescript
const primaryColor = getComputedStyle(
    document.documentElement
).getPropertyValue('--color-primary');
```

> **注意**: CSS 变量已定义在 `variables.scss` 的 `:root {}` 中，无需单独导入 CSS 文件。

---

## 📋 变量清单

### 色彩系统

```scss
// 主色调
$primary-color: #1D4ED8;
$primary-light: #3B82F6;
$primary-dark: #1E40AF;

// 辅助色
$success-color: #10B981;
$warning-color: #F59E0B;
$error-color: #EF4444;
$info-color: #3B82F6;

// 中性色
$text-primary: #1F2937;
$text-secondary: #6B7280;
$text-hint: #9CA3AF;
$bg-primary: #F9FAFB;
$bg-secondary: #FFFFFF;
$border-base: #E5E7EB;
```

### 间距系统

```scss
// 4px 基准
$spacing-1: 4px;
$spacing-2: 8px;
$spacing-3: 12px;
$spacing-4: 16px;
$spacing-6: 24px;
$spacing-8: 32px;
```

### 圆角系统

```scss
$radius-sm: 4px;
$radius-md: 6px;
$radius-lg: 8px;
$radius-xl: 12px;
$radius-full: 9999px;
```

### 阴影系统

```scss
$shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
$shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
$shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
$shadow-glow: 0 0 20px rgba(59, 130, 246, 0.3);
```

### 字体系统

```scss
// 字体大小
$font-xs: 9px;
$font-sm: 12px;
$font-base: 13px;
$font-lg: 15px;
$font-xl: 16px;

// 字重
$font-weight-medium: 500;
$font-weight-semibold: 600;
```

### 动画系统

```scss
// 时长
$animation-fast: 0.1s;
$animation-base: 0.2s;
$animation-slow: 0.3s;

// 缓动
$easing-default: cubic-bezier(0.4, 0, 0.2, 1);

// 快捷过渡
$transition-base: all $animation-base $easing-default;
```

---

## 🔧 旧代码迁移指南

### 步骤 1: 导入变量文件

**在文件顶部添加**:
```scss
@import '@/styles/variables.scss';
```

### 步骤 2: 替换硬编码值

#### 色彩替换

```scss
// ❌ 旧代码 (LESS)
color: @primary-color;

// ✅ 新代码 (SCSS)
color: $text-primary;
```

#### 间距替换

```scss
// ❌ 旧代码 (LESS)
padding: @spacing-4;

// ✅ 新代码 (SCSS)
padding: $spacing-4;
```

### 步骤 3: 使用 Mixins（可选）

```scss
// 文字截断
.my-text {
    @include text-truncate();
}

// 多行文字截断
.my-description {
    @include text-clamp(2);  // 最多 2 行
}

// 居中
.my-center {
    @include center-flex();
}

// 卡片阴影
.my-card {
    @include shadow-card();
}
```

---

## 📝 迁移示例

### 示例 1: 按钮组件

**迁移前 (LESS)**:
```less
.btn {
    padding: @spacing-2 @spacing-4;
    background: @primary-color;
    color: #FFFFFF;
    border-radius: @radius-md;
    font-size: @font-md;
    font-weight: @font-weight-medium;
    transition: @transition-base;

    &:hover {
        background: @primary-light;
        transform: translateY(-@spacing-1);
        box-shadow: @shadow-md;
    }
}
```

**迁移后 (SCSS)**:
```scss
@import '@/styles/variables.scss';

.btn {
    padding: $spacing-2 $spacing-4;
    background: $primary-color;
    color: #FFFFFF;
    border-radius: $radius-md;
    font-size: $font-md;
    font-weight: $font-weight-medium;
    transition: $transition-base;

    &:hover {
        background: $primary-light;
        transform: translateY(-$spacing-1);
        box-shadow: $shadow-md;
    }
}
```

### 示例 2: 卡片组件

**迁移前 (LESS)**:
```less
.card {
    padding: @spacing-5;
    background: @bg-secondary;
    border-radius: @radius-2xl;
    border: 1px solid @border-light;

    &:hover {
        box-shadow: @shadow-xl;
    }
}
```

**迁移后 (SCSS)**:
```scss
@import '@/styles/variables.scss';

.card {
    padding: $spacing-5;
    background: $bg-secondary;
    border-radius: $radius-2xl;
    border: 1px solid $border-light;

    &:hover {
        box-shadow: $shadow-xl;
    }
}
```

---

## 🎯 最佳实践

### 1. 始终使用变量

```scss
// ✅ 好
color: $text-primary;

// ❌ 不好
color: #1F2937;
```

### 2. 使用语义化命名

```scss
// ✅ 好
background: $bg-active;

// ❌ 不好
background: rgba(29, 78, 216, 0.1);
```

### 3. 使用间距系统

```scss
// ✅ 好
margin: $spacing-4;

// ❌ 不好
margin: 16px;
```

### 4. 使用快捷 Mixins

```scss
// ✅ 好
@include text-truncate();

// ❌ 不好
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
```

---

## 📊 迁移检查清单

### 文件级别

- [ ] 导入 `variables.scss`
- [ ] 移除硬编码颜色
- [ ] 移除硬编码间距
- [ ] 移除硬编码圆角
- [ ] 移除硬编码字体
- [ ] 移除硬编码阴影

### 组件级别

- [ ] 按钮使用 `$primary-color`
- [ ] 卡片使用 `$bg-secondary`
- [ ] 文字使用 `$text-primary` / `$text-secondary`
- [ ] 边框使用 `$border-base`
- [ ] 间距使用 `$spacing-*`
- [ ] 圆角使用 `$radius-*`

---

## 🔍 常见问题

### Q1: 变量不生效？

**检查**:
1. 是否正确导入文件
2. 导入路径是否正确
3. 是否在 SCSS 文件中使用

**解决**:
```scss
// 确保在文件顶部导入
@import '@/styles/variables.scss';
```

### Q2: 如何覆盖变量？

**方法**:
```scss
// 在导入后覆盖
@import '@/styles/variables.scss';
$primary-color: #FF0000;  // 覆盖主色
```

### Q3: CSS 变量和 SCSS 变量选哪个？

**推荐**:
- SCSS 变量：编译时优化，IDE 支持好 ✅
- CSS 变量：运行时动态修改，JS 可访问

**建议**: 优先使用 SCSS 变量，需要 JS 访问时使用 CSS 变量。

---

## 📄 相关文档

1. `建科小智设计规范_v3.md` - 完整设计规范
2. `variables.scss` - SCSS/CSS 变量文件
3. `global.scss` - 全局样式

---

**文档维护**: AI Assistant
**最后更新**: 2026-03-28
**版本**: v4.0 (SCSS)
