CSS token 和 CSS 变量(CSS variables)是相关但不完全相同的概念。让我来详细解释一下:
CSS Token
CSS token 是一种设计系统中的概念,代表的是 UI 设计中的基本单元,比如颜色、间距、字体大小等。这些基本单元被命名和组织成一个集合,以保证设计的一致性。
CSS token 通常被实现为 CSS 变量,但它们更多的是一种设计概念和架构方法,而不仅仅是技术实现。
CSS 变量(CSS variables)
CSS 变量是 CSS 的一个特性,允许你在 CSS 中声明变量,然后在整个样式表中重复使用这些变量。
它们的语法是:
:root {
--primary-color: #007bff;
}
.button {
background-color: var(--primary-color);
}
使用场景和方法
CSS Token 的使用场景
- 设计系统:构建一个统一的设计语言,确保整个产品的视觉一致性
- 主题切换:定义不同主题的颜色、间距等属性
- 响应式设计:为不同设备定义不同的尺寸规则
CSS 变量的使用场景
- 减少重复代码:避免在多处重复编写相同的值
- 简化维护:只需更改一处即可影响所有使用该变量的地方
- 实现动态效果:通过 JavaScript 修改 CSS 变量来实现动态样式
实际应用方法
一个常见的实践是基于 token 创建 CSS 变量层级:
/* 设计 token */
:root {
/* 颜色 */
--color-brand-primary: #007bff;
--color-brand-secondary: #6c757d;
--color-neutral-100: #ffffff;
--color-neutral-900: #212529;
/* 间距 */
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
--spacing-md: 1rem;
--spacing-lg: 1.5rem;
--spacing-xl: 2rem;
/* 字体大小 */
--font-size-xs: 0.75rem;
--font-size-sm: 0.875rem;
--font-size-md: 1rem;
--font-size-lg: 1.25rem;
--font-size-xl: 1.5rem;
/* 圆角 */
--border-radius-sm: 0.25rem;
--border-radius-md: 0.5rem;
--border-radius-lg: 1rem;
}
/* 使用 token 创建组件样式 */
.button {
padding: var(--spacing-sm) var(--spacing-md);
background-color: var(--color-brand-primary);
color: var(--color-neutral-100);
border-radius: var(--border-radius-sm);
font-size: var(--font-size-md);
}
.card {
padding: var(--spacing-md);
border-radius: var(--border-radius-md);
box-shadow: 0 var(--spacing-xs) var(--spacing-md) rgba(0, 0, 0, 0.1);
}
这种方法的优势是:
- 可维护性:只需修改 token 值即可更新整个应用的外观
- 一致性:确保整个应用使用相同的设计值
- 主题切换:通过更改根级别的变量来实现主题切换
在大型前端项目中,这些 token 通常存储在配置文件中(如 JSON),然后通过构建工具(如 Sass、PostCSS)生成 CSS 变量或者直接通过 JavaScript 注入。
简单来说,CSS token 是设计系统中的命名设计元素(如颜色、间距、字体大小等),通常通过 CSS 变量来实现,用于保持设计一致性并简化维护。