SCSS让CSS变的更像编程语言。于是,很自然的改变了CSS的传统组织方式。 
关于BEM争议最大的就是它的命名风格,这样: 
<ul class="block-name"> 
<li class="block-name--element-name">…</li> 
<li class="block-name--element-name">…</li> 
</ul> 
block + element + modifier,鼓励一级一级的写的非常具体,很长。 
问题: 
1. 这么长,影响书写效率吧。肯定会影响但这是个很大的问题吗(自动提示会缓解一些) 
2. html和css的size肯定会大一些。size大的顾虑是影响传输,在gzip面前可以忽略 
3. 不爽。的确很违背习惯,但任何个人喜好和习惯作借囗都不职业 
风格不重要。我更关心它的好处: 
1. SCSS嵌套过多。超过3层就很难阅读了。 
2. 嵌套多,选择器的层级就会多,性能不知不觉变差 
3. 复用。这么长的名,想冲突都难 
还有一个代码设计上的原则,不暴露抽象类。举例: 
以前: 
<ul class="list list-member"> 
<li>xxx</li> 
</ul> 
.list是抽象的列表类。层叠的.list-member类,定义少量样类就可以实现一个成员列表的样式。 
但是在其它编程语言里抽象类是不会被暴露出来的。借鉴BEM会是这样: 
<ul class="member-list"> 
<li class="member-list__item">xxx</li> 
</ul> 
不在html里层叠抽象类,而是在SCSS里继承: 
%list { ... } 
.member-list { 
@extend %list; 
} 
.member-list__item { 
// 不同的样式规则 
} 
这样更符合编程的特点。重要的是在维护上。假如变样了需要继承另一个抽象类,不需要改html,只要改css。这样SoC更彻底。 
风格无非是某种形式,可以约束人做到一致。背后的设计思想才值得应用。如果用BEM的风格,但没做到抽象类的封装,没做到选择器的扁平,那就是失败的应用。 
最后,我非常认同这种设计思想。但我还是不会照搬它的命名规则。太TM囧了!
最后我吐槽一句:我的这篇博文 排版 真tmd恶心啊!