CSS模块(.module.css)和普通CSS的区别

1. 作用域差异

普通CSS:

  • 全局作用域,所有样式都是全局的
  • 容易出现样式冲突和覆盖问题
/* styles.css */
.button {
    background-color: blue;
}
// 使用普通CSS
import './styles.css';
<button className="button">按钮</button>

CSS模块:

  • 局部作用域,样式只在当前组件内生效
  • 自动生成唯一的类名,避免冲突
/* Button.module.css */
.button {
    background-color: blue;
}
// 使用CSS模块
import styles from './Button.module.css';
<button className={styles.button}>按钮</button>

2. 类名生成机制

普通CSS:

  • 类名保持原样:.buttonbutton

CSS模块:

  • 自动生成哈希类名:.buttonButton_button__2x3kl
  • 确保每个组件的样式独立

3. 使用方式

普通CSS:

// 直接使用字符串
<div className="container header active">

CSS模块:

// 通过styles对象引用
<div className={styles.container}>
<div className={`${styles.header} ${styles.active}`}>

4. 优缺点对比

特性普通CSSCSS模块
学习成本中等
样式冲突容易发生几乎不会
代码维护困难(大项目)容易
性能一般更好(按需加载)
调试容易稍复杂(类名被哈希)

5. 适用场景

普通CSS适合:

  • 小型项目
  • 全局样式(重置样式、主题等)
  • 第三方库的样式覆盖

CSS模块适合:

  • 中大型项目
  • 组件化开发
  • 需要样式隔离的场景
添加新评论