复用CSS组件库样式的核心是建立可预测、可收敛、可维护的样式契约。设计系统定义语义化Token与原子类,CSS Modules通过composes实现隔离式接入,Wrapper组件或主题注入替代全局覆盖,构建时自动化打通Token到CSS模块链路。
复用 CSS 组件库样式,关键不在“拷代码”,而在于建立可预测、可收敛、可维护的样式契约。CSS Modules 解决局部作用域冲突,设计系统提供语义化约束,二者结合不是简单叠加,而是分层协作:设计系统定义“长什么样、叫什么名、什么时候用”,CSS Modules 负责“只影响自己、不污染别人、能被正确继承”。
不要直接复用组件库的 .btn-primary 这类实现类名。设计系统应输出稳定、语义化的样式 Token 和基础原子类,例如:
--color-primary: #3b82f6(而非写死 #3b82f6)--space-2: 0.5rem、--space-4: 1rem
--text-sm: 0.875rem/1.25
text-primary、bg-surface、p-4 —— 这些需通过 CSS-in-JS 或 PostCSS 插件生成,且严格对齐 Token团队所有项目引入同一份 design-tokens.css(或通过 JS 导出),确保视觉一致性源头可控。
CSS Modules 不是用来重写按钮样式的,而是让自定义组件安全地“对接”设计系统。例如:
// Button.module.css
.root {
composes: text-primary bg-surface rounded-md px-4 py-2 from 'design-system.css';
/* 只在此处覆盖必要行为,如禁用态 */
&:disabled {
composes: opacity-50 cursor-not-allowed from 'design-system.css';
}
}注意:composes 是关键,它把设计系统原子类“编译时合并”进本地 class,既复用了样式逻辑,又保留了 Module 的哈希后缀隔离性。避免在 .module.css 里重复写 color: var(--color-primary) —— 那是退回到手动维护。
若使用 Ant Design、Element Plus 等第三方库,不建议用 :global 强行覆盖样式。推荐两种轻量接入方式:
theme 配置对象、Chakra UI 的 extendTheme),将设计系统 Token 直接喂给主题引擎,由其生成对应 CSS 变量和规则。这样既保持组件库功能完整,又让视觉表现服从设计系统,无需写一行全局样式。
进阶做法是自动化打通链路:设计系统源文件(如 JSON/YAML Token)→ 构建脚本生成 tokens.css 和 tokens.d.ts → 所有 .module.css 自动 import 并 composes。配合 VS Code 插件还能实现 Token 名自动补全和校验。这种“一次定义、处处生效”的模式,才是可持续复用的核心。
不复杂但容易忽略:复用的前提是“有人负责维护那套 Token”,而不是每个项
目各搞一套颜色变量。CSS Modules 是工具,设计系统才是协议。