問答:如何規劃CSS 中 的命名方式 如何看待 CSS 中 BEM 的命名方式?
阿新 • • 發佈:2018-12-26
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囧了!
關於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囧了!