1. 程式人生 > >問答:如何規劃CSS 中 的命名方式 如何看待 CSS 中 BEM 的命名方式?

問答:如何規劃CSS 中 的命名方式 如何看待 CSS 中 BEM 的命名方式?

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囧了!