用途:CSS Modules 通过在构建时为每个类名生成唯一标识,实现 CSS 的局部作用域,避免样式冲突。文件需以 .module.css 结尾,未采用该命名的文件仍视为全局 CSS。
主要能力:支持同一文件内的 composes 组合,也支持跨文件 composes: heading from './typography.module.css';可用 :global 与 :local 显式控制作用域;支持与 PostCSS 或原生 CSS 嵌套结合;支持 CSS 变量主题。
使用方式:在 Vite、Next.js、Create React App 中开箱即用。导入后通过 styles.button、styles['primary-button'] 或 styles[variant] 访问类名;可配合 clsx 等库处理多类名与条件类名。Vite 可配置 css.modules.generateScopedName 与 localsConvention;Webpack 需为 /.module.css$/ 配置 css-loader 的 modules.localIdentName。
TypeScript 支持:可添加 css-modules.d.ts 声明 declare module '*.module.css';也可用 typed-css-modules 生成类型:npm install -D typed-css-modules,npx tcm src,支持 --watch、--camelCase、--namedExports、--allowArbitraryExtensions;或使用 typescript-plugin-css-modules 获得 IDE 支持。
适用场景:React 等组件化项目的组件级样式隔离、变体样式(如 Alert 的 info/success/warning/error)、响应式与主题化样式。
限制与注意:类名需为合法 JavaScript 标识符,.123start 或含空格的类名不可用;composes 必须出现在规则顶部,避免循环组合;建议避免过深嵌套与按元素选择器。