-
ID:mQ.1rK さんの質問

【id名、class名はどの程度までつけていますか?】

ネーミングセンスがないということもあり、今作っているWebページは更新が入りそうな箇所以外はほとんどid、class名をつけずに、子孫・隣接セレクタのみで要素を特定する方法でCSSを書いています。
変更が入りそうな箇所や1ページ内で何回か使用されており他の親となりうる要素(例:section)には命名しているのですが、最低限、というところです。

他の方のソースを見ると、h1やpに至るまで細かくネーミングされているもの、デザイン目的でネーミングされているものなどがあり、どれがベストなのか少し悩んでしまったので、皆様の方法をお聞きしたいです。

みんなの回答 3 件

ID:wUjiWi さんの回答

他の人がいじる可能性がある場合は、細かく付けたほうがいいとは思います。しかし、そのでない場合、最低限でいいと思います。

例えば会社概要を表示する場合

<article class="article company-area">
<h1>会社概要</h1>
<section class="section">
<dl>
<dt>社名</dt>
<dd>W3Q株式会社
</dl>
</section>
</article>

みたいな。

ID:mQ.1rK

なるほど…。
確かにあまり長々と書かれているとわかりづらいですものね。
ご意見ありがとうございます。

ID:.NIXyk さんの回答

最近は基本的にBEMにしてる。
最初はめんどくさかったけど、やっといてよかったって思う事の方が多い。
なので、シンプルセレクタ、全称セレクタも使わないし、複雑なセレクタ
:not(:nth-of-type(An+B)):after:みたいなのも極力避ける。

後IDはスタイル用には使わない。JSとかページ内リンク用のみに限定してる。

上のコメで他人が触らないならと言ってますが、1年後の自分はもはや他人だと思ってる。

ID:wUjiWi

俺もBEM採用しようとして仕事で使ってみたんだけど、かなり利便性が悪くて止めた。理由は

  • 命名だけで時間が掛かる
  • HTMLが長くなって複雑になる
  • 共通する箇所も命名し、コーディングしなくてはいけないのは不便
  • ↑はコピペならその分、コードが増える
  • Sassやlessを使う手もあるが、そもそもHTMLやCSSは「手軽さ」がウリであり、それを殺してガチガチに固めるのはかえって扱いづらくなる
  • 自分以外の他人の学習コストがかかる

との結論から、OOCSSの考え方に戻した。

1年後の自分は他人と言うけど、BEMでも一緒だよ。ソース見ないと思い出せないもん。単に

.block--element__modifier

.block .element .modifier
の違いなだけで。

ID:.NIXyk

1年後の自分が他人といったのは、シンプルセレクタとか使わない理由で、
ソースを読むのは前提で、読みやすいようにって事です。
あと、Sassは使いまくってる。
それにHTMLの歴史はSGMLとかそんなに知らないけど、CSSは「手軽さ」はウリにしてないよ。
CSSを良くするという事は、機能を追加するという事で方針は一致してるので、今のCSS Level3が全部勧告になったらかなり複雑ですよ。変数とか計算もそろそろ入るし、正規表現とかも議題にあがってたし。

共通の箇所(ボタンとか、フォームとか)そういうパーツに関しては、OOCSS使ってるので、基本BEMでOOCSSの方が明らかにいいとこはOOCSSって感じだね。

ID:wUjiWi

手軽さがウリって書いたのは歴史的背景じゃなくて、制作側の意見としてね。誰でも使いこなせるという意味で。

それに君の解釈を見ると、もうそれってプログラミングの世界だよね。(Sassやlessはそうとも言えるが)プログラミングになると、それこそHTML自体もモジュール化する必要があると思うし、色んな技術が入って余計に複雑化すると思うんだ。

もちろん自分一人でやるならプログラミング化しようがどう作ろうが勝手だと思うけど、仕事でやるなら最低限「他人が理解できる」コードを書くべきだと思うんだよ。

BEMとOOCSSが混在した状態でソースが読みやすいかどうかって聞かれたら、俺は難しいと思うな。もちろん、OOCSSにBootstrapなどのCSSフレームワークを使っているなら、知識がある人は分かるだろうけど。

ID:wUjiWi

でもまぁ、トピ主のような悩みは未だに持ち続けてるよ。「あとから見て分かりやすいコード」は永遠のテーマだと思う。だからBEMを否定しないし、もっと多角的に見た勉強が必要だと思ってる。

ID:mQ.1rK

BEM…私はちょっと苦手なタイプで(長い命名が個人的にわかりづらく感じてしまうので…)敬遠していたのですが、便利な面もあると思うので、これから少しずつ慣れてみます。
ベストなのは、わかりやすい命名でOOCSSとBEMを使い分ける、という感じでしょうか。
ご意見ありがとうございます。

ID:.NIXyk

>手軽さがウリって書いたのは歴史的背景じゃなくて、制作側の意見としてね。誰でも使いこなせるという意味で。
これは個人的な解釈じゃなく、CSSの仕様がそうなってる。
個人的には、誰でも使いこなせなくていいと思ってる。プロが使いこなせればそれでいいんじゃないかな。簡単に使う分には簡単なの使ってればいいと思う。フォトショだって誰でも使えるけど、デザイナーが作ったものを他の人が触んなって思うんじゃない?

> HTML自体もモジュール化する必要があると思うし
Web Componentsが結構前から話題ですよね。

>最低限「他人が理解できる」コードを書くべき
ここが難しいところですね。他人をどのレベルに合わせるのかって所で、レベルの低い人に合わせてたら、その人はいつまでもレベル上がらないし。

個人的にはOOCSSで一つの要素に対してクラスがいっぱいついてて、複数書き換えようと思ったら、コード検索しまくるみたいなのほうがだるいなって思ったのと変更したときの影響範囲が追いづらいのでBEMにしてる。あとBEM使うならブロック毎にファイル分けするのは必須かな。
どんなサイトでもこのクラスはいるよねみたいなのは、OOCSSの方が向いてると思うけどね。

ID:wUjiWi

>他人をどのレベルに合わせるのかって所で、レベルの低い人に合わせてたら、その人はいつまでもレベル上がらないし。

新しいコーディングを模索する最中、毎日何十とサイトのソース見てたんだけど、どこも酷いよ。BEMは皆無でOOCSSにすらなってないのばかり。大手もそう。大手だから個人でCSS管理してないだろうし、命名規則もあるはず。なのに、大抵”自己流”なところを見ると、規則や概念よりも制作スピードを優先している気がしてる。

>複数書き換えようと思ったら、コード検索しまくるみたいなのほうがだるいなって思ったのと変更したときの影響範囲が追いづらいのでBEMにしてる。

うん。だから俺が1コメント目に書いたようなソースでいいんじゃないかな。ブロック単位では固有のクラス名を付けて、共通の箇所は初期のクラスを付けるとか。BEMで1に書いたソースを再現すると以下のようになって、非常に見づらいとは思うよ。これでもまだシンプルな方だし。

<article class="company">
<h1 class="company--title">会社概要</h1>
<section class="company--section">
<dl class="company--item">
<dt class="company--item--title">社名</dt>
<dd class="company--item--value">W3Q株式会社</dd>
</dl>
</section>
</article>

ID:.NIXyk

正直もうMicrodataとかWAI-ARIAしっかり対応してたり、data属性つけまくってたりすると、HTMLを見やすくキープするなんて不可能なんで、HTMLの見やすさは気にしてない。

まぁ結局何人で書いても一人で書いたようにできるようなルールがしっかりできてればなんでもいいと思う。
出来上がった概念使ったらルール化が楽ってだけで。

ID:mQ.1rK

大手サイトでも、たしかにきちんと命名されていないようなものはありますね…。
参考にしようと思って様々なサイトを覗きにいきますが、正直参考になるようなサイトがあまり見つからない、というのが現状です…。

>何人で書いても一人で書いたようにできるようなルールがしっかりできてればなんでもいいと思う。

その通りだと思います。

ID:.NIXyk

あまり大規模だとそもそもルールが共有されてないって問題はあるでしょうね。制作会社に新規構築頼んで、その時はしっかりコーディングガイドラインあったとしても次の更新で、ちょっとした事だからってフリーの人にたのんで、コーディングガイドラインは特にないですってのはよくある問題だと思う。

ID:5E.lex

大手企業のWeb担当者なんてコロコロ変わるから、ルールなんてすぐ崩れるよ。現状、出ているいくつかのアプローチ手法で十分だと思うけど。

ID:dAtcHB さんの回答

大規模サイトだとどのモジュールも使いまわす可能性があるから、なるべく子孫・隣接・関節セレクタ使わずに細かくネーミングする必要があるし、滅多に更新しないような小規模サイトならそのへんどうでもいいし、案件によるんじゃないですかねぇ

ID:5E.lex

私も結局どうでもいいと思ってる。サクッと仕事として済ませる方を優先。ただ自己サイトや自社サービスサイトなら相当こだわる。

ID:mQ.1rK

たしかに、サイトの規模や更新頻度によっても変わりますね。

>私も結局どうでもいいと思ってる。サクッと仕事として済ませる方を優先。

お気持ちはとてもわかります。
スピードだけを見れば、いちいち悩んで手が止まるより、多少わかりづらくても独自で命名していった方が圧倒的に早いですよね。
ただ、後々のことを考えると、やはり完全にどうでもいい、というわけにはいかないかなと…。
自分が運用していくのであればまだしも、お客様に出来上がったものを丸っと渡して運用してもらうのであれば、他者が混乱しないレベルの命名は最低限必要かなと思っています。

ID:5E.lex

まあー悩みたい人だけ悩んでがんばってねって感じかな。で、効率の良い方法を教えてもらってケースバイケースで利用させてもらうよ。

最終更新日:2014-06-17 (5,282 views)

関連するトピックス

ページ上部に戻る