软件开发领域所有的工程问题,归根结底衍生自一个问题:代码量大了怎么办?
对于CSS而言,因代码量增大导致的核心问题是命名冲突。
解决命名冲突的方法论是模块化,围绕此方法论,演化出种种模块化方案。
一、命名的模块化
基本思路是确保全局空间下一级域名不冲突,那么子域名就被限定在了独立的局部作用域中,从而保证命名的唯一性。
根据域名的划分方式,出现了不同的命名方案:
BEM:Block-Element-Modifier,比较笼统,没有过多限制规定
SUIT CSS:
1、将命名对象划分为组件(component)和功能(Utility)。组件直接命名,功能额外加前缀,比如专门给js调用的类名可加上js前缀:js-button
2、规定了连字符的用法。普通隔断用单个连字符,描述性词汇用两个连字符:
.nav-button { }
.nav-button--primary { }
沿着这个思路,其实还可以把下划线引进来,用来设置其它规则。

