https://qiita.com/mrd-takahashi/items/07dc3b4bad027daa2884
シェアしました。
なにがベストに思わせないのかと言えば冗長的な命名方法。これだけ。
アンスコやらスラッシュが2連続くところが嫌すぎて困る。
BEMの基本設計
BEMとは
BEMのお約束
.item {…}
.item-nav {…}
.item-nav__item {…}
.item-nav__item--state_active {…}
.item__body {…}
.item__body--state_active {…}
<section class="item">
<nav class="item-nav">
<a class="item-nav__item item-nav__item--state_active" href="#">タブA</a>
<a class="item-nav__item" href="#">タブB</a>
<a class="item-nav__item" href="#">タブC</a>
</nav>
<div class="item__body item-box__body--state_active">
…
</div>
<div class="item__body">
…
</div>
</section>
下記のように変更してみる。
BEMの命名規則をカスタマイズしてみる
.item {…}
.itemNav {…}
.itemNav_item {…}
.itemNav_item-stateActive {…}
.item_body {…}
.item_body-stateActive {…}
<section class="item">
<nav class="itemNav">
<a class="itemNav_item itemNav_item-stateActive" href="#">タブA</a>
<a class="itemNav_item" href="#">タブB</a>
<a class="itemNav_item" href="#">タブC</a>
</nav>
<div class="item_body item_body-stateActive">
…
</div>
<div class="item_body">
…
</div>
</section>
カスタマイズした結果、3年くらい前と書き方がものすごく似ている。
違うとすれば<a>
にいちいちクラス付与しているところくらい。アンスコの意味合いも非常に似ている。
更新履歴
2014.09.26追記
理由としては、CSS内に記述された場合は.itemNav_item.stateActive {…}
みたいな書き方になるので、.itemNav_item
と一緒に記述された時のみ有効になるのでわかりやすい。.stateActive
というCLASS名はあちこちに出てくる可能性が高い。よく使う名前だと思う。だが『Active』と一口に言っても色々な『Active』が存在する訳で、それを一緒くたに.stateActive
で表わすのは乱暴すぎると思う。.itemNav_item-stateActive
というCLASS名の方が、どの要素に使えるか判断しやすい。
が、HTMLコーディングが完了した後、プログラマーの作業が発生するサイトの場合、プログラマーに対しての配慮が必要になる。
また、運用フェーズに入った時に、この書き方の方が膨大なCSSから検索がしやすく、対応時間を短縮する事も可能だ。
命名方法については、ソースコードが長くなるので、冗長的な物はよくないと考える人も多いかもしれない。
だが、運用フェーズに入り、担当が変わった時の事を考えると、ある程度の察しがつく名称の方が引き継ぎがスムーズに行くと思う。
2019年11月24日日曜日
BEMを参考にしたCSS設計
16:17
No comments
現時点でBEMによるCSS設計はベターだと思う。でもベストではない。
というわけで。
BEMの命名方法をカスタマイズしてみる。
css
html
…アンスコやハイフンが2個続くのが嫌だ。分かりやすいけどクラス名も長い。
css
html
…あれ?
今はつなぎにハイフン使ってるけど、それはgoogleさんが推奨する書き方の一つだったからであって、さほどの意味は無い(というかハイフンって単語つなぎに使うから、違うように思っていたり)。
結局、自身が実務経験上編み出したCSS設計も「堅固で流用可能で短く書けるCSS設計」を目指していたわけで、突き詰めていくと似通ってくるのも当たり前と言えば当たり前。
とえいあえずはメモ書きなので、実装してみて内容を編集していこうと思う。
わかる人には「ここはclass付与しても、ここは省略していいよ」で済むのだが、その一言では伝わらない人々を想定して書くのも勉強なので、時間見てまとめる予定。
『Modifier』はマルチクラスで表わそうと考えていたが、こちらを変更する事にした。
しかし、HTML側から見た場合はどうなるか?
冗長的にはなるが、HTMLから見た時は
HTMLやCSSがデザイナーやコーダー内で完結できていればマルチクラスのままで良いと思う。
BEMの利点は、制作後の運用フェーズを考えた設計部分だと考えている。
0 コメント:
コメントを投稿