高级前端
css
【Q485】写 CSS 时如何避免命名样式冲突

写 CSS 时如何避免命名样式冲突

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 493 (opens in a new tab)

Author 回答者: shfshanyue (opens in a new tab)

1. BEM 式: .home-page .home-page-btn

.home-page {
  .home-page-btn {
  }
}

BEM 有一个缺点,就是有些太长,可适当简化,只包裹该页面组件的根类名,但有可能增加样式冲突的风险

.home-page {
  .btn {
  }
}

2. CSS Scoped

scoped css 会对当前组件(scope)下所有元素生成唯一的属性或类名,对所有 CSS 规则将携带唯一属性实现作用域的命名保护

// 手动写
.btn {
}
 
// 编译后
.btn .jsx-1287234 {
}

css scoped demo

3. CSS Module

module css 会对类名进行 hash 化

css modules demo