CSS
概述
本指南解释了 Raaghu 设计系统中用于构建可维护和可扩展 UI 组件的 CSS/SCSS 架构、文件组织、命名约定、设计令牌和最佳实践。
文件组织结构
组件级样式
每个 RDS 组件都遵循严格的结构:
raaghu-elements/
├── rds-{component-name}/
│ ├── rds-{component-name}.tsx # React 组件
│ ├── rds-{component-name}.stories.tsx # Storybook 故事
│ └── rds-{component-name}.scss # 组件特定样式
布局级样式
raaghu-layouts/
├── rds-comp-{layout-name}/
│ ├── rds-comp-{layout-name}.tsx
│ ├── rds-comp-{layout-name}.stories.tsx
│ └── rds-comp-{layout-name}.css # 布局特定样式
主题样式
raaghu-react-themes/
├── src/
│ └── styles/
│ ├── index.scss # 主主题入口
│ ├── variables/
│ │ └── color-variables.scss # 颜色令牌
│ └── themes/
│ ├── light.scss # 浅色主题
│ ├── dark.scss # 深色主题
命名约定
带 RDS 前缀的 BEM(块元素修饰符)
.rds-{component-name} { }
.rds-{component-name}__element { }
.rds-{component-name}--modifier { }
.rds-{component-name}__element--modifier { }
示例
.rds-button { }
.rds-button__icon { }
.rds-button--primary { }
.rds-button--large { }
.rds-card { }
.rds-card__header { }
.rds-card--elevation-2 { }
SCSS 结构标准
组件 SCSS 模板
.rds-{component-name} {
// 基础样式
display: block;
// 元素
&__element {
// 元素样式
}
// 修饰符
&--variant {
// 变体样式
}
// 状态
&:hover { }
&:focus { }
&:disabled { }
}
设计令牌使用
使用 CSS 自定义属性来处理颜色、间距、排版和阴影:
background-color: var(--rds-color-primary);
padding: var(--rds-spacing-md);
border-radius: var(--rds-border-radius);
box-shadow: var(--rds-elevation-2);
实施清单
- 组件有对应的
.scss文件 - SCSS 使用带
rds-前缀的 BEM 命名 - 样式包含所有必要的变体和状态
- 颜色和间距使用设计令牌
- 无障碍状态已设置样式
- 组件在包的 index.ts 中导出
无障碍性和性能
- 为交互元素包含焦点状态
- 确保足够的颜色对比度
- 使用
.sr-only类支持屏幕阅读器 - 最小化 CSS 特异性冲突
- 避免深度嵌套(最多 3 层)
- 使用高效选择器
最佳实践
- 隔离: 保持每个组件的样式自包含
- 一致性: 使用已建立的命名和间距模式
- 可维护性: 记录复杂样式,使用有意义的名称
- 性能: 清除未使用的 CSS,使用 tree-shaking,生产环境压缩
- 无障碍性: 测试键盘导航、颜色对比度和焦点状态
开发工具
- SCSS IntelliSense
- Live Sass Compiler
- CSS Peek
- Prettier - 代码格式化工具
代码检查配置
{
"extends": ["stylelint-config-standard-scss"],
"rules": {
"selector-class-pattern": "^rds-[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+)?$"
}
}