标准答案

  1. 普通 CSS 或 Sass 适合简单项目和全局样式,但要靠命名规范避免污染。
  2. CSS Modules 提供文件级类名隔离,适合大多数组件化业务项目。
  3. CSS-in-JS 适合强动态样式、主题和组件库封装,但要关注运行时成本、SSR 提取和缓存。
  4. 原子化 CSS 适合快速组合和设计约束明确的团队,但模板类名可能较长,需要统一规范。
  5. 组件库项目还要设计 design token,让颜色、间距、圆角、阴影和主题切换有统一来源。

题目解析

这道题要避免变成工具喜好。方案选型应该围绕隔离、动态能力、构建运行成本、SSR 和团队协作。

React 本身不内置 scoped 样式,组件样式隔离需要依赖约定或工具。

如果项目已经有成熟组件库和主题 token,业务侧 CSS 方案要和组件库变量体系兼容。

代码示例

下面是 CSS Modules 在 React 组件里的基本使用方式。

TSX
import styles from './UserCard.module.css'

function UserCard({ name }: { name: string }) {
  return (
    <article className={styles.card}>
      <h2 className={styles.title}>{name}</h2>
    </article>
  )
}

常见误区

  • 只按个人偏好选择 CSS 方案,不看 SSR、主题、团队规范和运行时成本。
  • 全局 CSS 命名没有约束,组件之间样式互相污染。
  • 为了少写 CSS 过度依赖内联 style,导致伪类、媒体查询和主题能力受限。

作者信息