组件样式封装

组件样式要做到「对外隔离、对内可控」,避免样式互相污染。

BEM

.card { }
.card__title { }
.card--highlight { }

优点:命名清晰、作用域靠约定;缺点:类名偏长。

Scoped CSS

框架(如 Vue)提供 scoped 样式,自动加属性选择器:

<style scoped>
.card { border: 1px solid var(--color-border); }
</style>

CSS Modules

通过编译把类名哈希化,避免冲突:

.title { font-weight: 600; }
import styles from './Card.module.css';
<div className={styles.title} />

避免冲突的经验

  • 不使用过于通用的类名:.box、.title
  • 组件根节点加前缀或哈希
  • 慎用 !important,它会破坏可维护性