BEM 化されたブログをのぞかせてもらう
@o_ti さんのブログの、 http://dskd.jp/archives/36.html をみてみた。
以下のようになっていた:
.contents .header h1.header__logo .article article.article__item header.article-header h1.article-header__item footer.article-footer time.article-footer__pubtime dl.article-footer__categories dt.article-footer__categories-title dd.article-footer__categories-item p h2 ul ... nav.neighbor .neighbor-header h2.neighbor-header__item a.neighbor__item section.archives header.archives-header h2.archives-header__item nav.archives-year h2.archives-year__title ul.archives-year__monthly li.archives-year__item ... section.neighbor .neighbor-header h2.neighbor-header__item ol.neighbor-pager li.neighbor-pager__item a.button ... footer.credit .credit-header h2.credit-header__item p.credit__item small
思ったこと
CSSの命名規則にBEMを取り入れてみる | dskd から引用:
前述した通り、BEM で難しいのは Element の取り方です。すんなり書けるのは2階層までで、3階層になると迷いが出ます。Block を入れ子にしていくのか、Element をつないでいくのか、やるなら統一しなければ BEM 道ではない(部分的にルールが変わると厳格さが失われ、メンテナブルとは言えない)ですね。 Element-block というような「内包ブロック」なものをつないで、結果 .Block__Element-block2__Element2-block3__Element3--Modifier のようなセレクタを受け入れるのか......。
ブログを初めて BEM 化した時の流れ | dskd から引用:
<header> と <footer> を .article-header, .article-footer としました。Block__Element__Element をやめ、Block > Block__Element のように Element の上は必ず Block とするようにしました。
.article__item
の子の header
も Block の構成要素にあたる Element として article__item__header
という Element_Element_Element と位置づけるか、 article__item-header
という Block__Element-Block というような「内包ブロック」として位置づけるか、それか article-header
として Element-Block とするか... ナニコレ難しい。
僕が書いてたら article__item-header
ってして、内包ブロックの型を選んだろうと思う。ただ、 内包ブロックって Block__Element-Block みたいな型だとハイフンが単なる単語の連結か Block の連結かわかりにくいな 。
.article__item
Block の子の要素は Element に当たると思うけど、 p
や ul
にはクラスを振っておらず、 .article__item p
とか .article__item ul
って形でスタイルを当てている 。
ここも僕が書くならって考えてみると、 .article__item-sentence
とか .article__item-lists
とかにしてたかも。
「自分で書いてたらこうしてたかも」という箇所は上記のようにあるにはあるんだけど、実際にブログなどのページ・サイト作成を行ってみないとわからないところが多そう。
上記にも出てきているけど、このブログには「ブログを BEM 化した時の流れ」が書かれている記事が幾つか投稿されているので、これらも参考になりそう:
最後に
CSSの命名規則にBEMを取り入れてみる | dskd から引用:
ブログのリニューアルに合わせて BEM な CSS を書きました。書いたけど、難しかったです。構造が深くなった時、Block はどこまで保持するのか、Element にするのかしないのか、マルチクラスはどこまで許容するのか......。
このブログを初めて見た時、この文章の意味がつかめなかったんだけど、今ならちょっとわかる。
僕は基本的にどのプロジェクトもマルチクラスで CSS を書いていて、BEM を使い出すとそれができなくなるわけじゃないけど、今まで普通にマルチクラスを使っていた所でシングルクラスとどっちを取るか悩む所はありそう。
http://dskd.jp/ も今度参考に見させてもらおう。