idを使うときも同じだけど、話をわかりやすくするためにclassに統一するということで。 個人的にはセレクタにidは使わない派です。
先日、@cssradarさんが「自分の仕事はclass名を決めた時点で8割終了している」みたいなことを言ってて、僕も概ね同意している。 それほどにCSSでは命名が大切だと思う。 そこで僕が普段どう考えてCSSセレクタに名前をつけ、ルールセットを定義しているのか書いてみた。
1. class名は意味を表すようにする(見た目の情報をのせない)
例えば、以下のようなもので
.red { color: #f52; } .rounded { border-radius: .25rem; } .left-arrow { ... }
赤色だとか角丸だとか、見た目を表したclass名は付けないようにしている。 というのも、class名はHTMLのclass属性に書くもので、HTMLには論理構造だけを書きたいからだ。
HTMLの要素を視覚的に強調させる意味で.red
という名前になっているなら、.emphasis
とかにするし、もしエラーの意味があるなら.error
等にする。
Twitter Bootstrapの色も、赤は.danger
だったり、緑は.success
だったりする。
.rounded
もコンテンツが入るボックスを角丸にしたいのなら.content-box
の中にborder-radius
を書くべきだと思し、.left-arrow
についても、戻るボタンを意味しているなら.back-btn
等にする。
また、.rounded
はSassで言うところの@extend
のような、ルールセットを継承する機能を持つプリプロセッサーを使っているなら、
.rounded { border-radius: .25rem; } .content-box { @extend .rounded; }
このようにしても(した方が)いいと思う。 HTMLのclass属性に書かれないセレクタには見た目の情報が入っていてもいいし、こうすることでSassファイル内での再利用性が高まる。
2. 全く同じスタイルでも意味、用途が違うなら違う名前にする
例えば、Twitter Bootstrapを使ってたりすると、赤いボタンは全て.btn-danger
にしがちだと思う。
同じ赤色のボタンでも、強調させたいから赤色にしているボタンには.btn-emphasis
、削除ボタンには.btn-danger
とすべきだと思う。
たまたま、見た目(この場合は色)が同じであっても、意味や用途が異なるなら別に名前を付け、セレクタをわけるべきだと思う。
.btn-danger, .btn-emphasis { background-color: #f52; }
これはHTMLに正しく意味を記述するということでもそうだし、もし後で「強調させているところの色はオレンジにしよう」となったとき等にデザインの修正に耐えやすい。
最後に
かなり細かいことを書いたが、真にHTMLとCSSを疎結合にし保守性を保つためには大切なことだと思っている。HTMLとCSSをただ別ファイルに書くだけで構造と体裁を分離することはできない。
あと、僕は主にWebサイトのHTMLとCSSを書くことが多いので上記のことを気をつけているが、アプリケーション(WebViewのスマホアプリとか)を作ってたりするとこのようにしない方がいいかもしれない。
時と場合によるCSS記述の良し悪しを評価できるようなものを作りたい。