質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

6814閲覧

HTMLでclass名を細かく指定すべきかどうか

neotk

総合スコア7

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2016/10/06 06:13

HTMLでclass名を細かく指定するかどうかについて、ご指南をお願いします。

CSSの処理はセレクタを右から順に判別していくと聞きました。
例えば以下のようにすると、「全てのh3タグ」や「全てのliタグ」の中から判別することになり、CSSの処理速度は多少落ちると思います。
しかしコードはすっきりします。

HTML

1<div class="list"> 2 <h3>リスト</h3> 3 <ul> 4 <li>項目1</li> 5 <li>項目2</li> 6 <li>項目3</li> 7 </ul> 8</div>

CSS

1.list { 2 /* style 1 */ 3} 4.list h3 { 5 /* style 2 */ 6} 7.list ul>li { 8 /* style 3 */ 9}

以下のようにすると、CSSの処理速度は多少上がると思います。
しかしコードの文字数は増え、見づらく感じます。

HTML

1<div class="list"> 2 <h3 class="list-title">リスト</h3> 3 <ul> 4 <li class="list-item">項目1</li> 5 <li class="list-item">項目2</li> 6 <li class="list-item">項目3</li> 7 </ul> 8</div>

CSS

1.list { 2 /* style 1 */ 3} 4.list-title { 5 /* style 2 */ 6} 7.list-item { 8 /* style 3 */ 9}

コードを見やすくしたいという思いと、少しでも処理を高速化したいという思いがあっていつも迷ってしまいます。
皆さんはどうされているのでしょうか?
これと決まった答えでなくても構いませんので、ご意見いただけると嬉しいです。
ご回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

セレクタの処理速度の観点からすれば、多少の処理差はほとんど誤差のようなものなので、
よほどシビアな環境を要求されるのでもない限り、私の場合は処理速度の面は無視します。

それよりclassをつけるかつけないかは、CSSの管理・運用・設計方針としてどうするのがベターか
という観点から決めることが多いです。

よく言われるのが「流用・修正・保守のしやすさ」をどう担保するか、という点です。
作ったら作りっぱなしでほとんど修正・運用しないような場合はどうでもいいのですが、
そうでない場合にはHTML・CSSの「コンポーネント化」をして、流用・修正しやすいスタイル設計をしておかないとCSSは容易に破綻してしまいます。

OOCSS、SMACSS、BEMなどのオブジェクト指向のCSS設計では、上記の観点を非常に重視するため、
原則としてHTML要素に直接スタイル指定したり、idセレクタをスタイル指定に利用したりはしません。
スタイル指定は全てclassで管理し、そのclass名に厳格な命名規則を持たせて管理することを求めます。

ほぼ全ての要素にclassが付くことになるので当然HTMLソースコードは見づらくなりますが、
修正・更新などの作業で仮にHTML構造が変更になったとしても、CSSの修正はしなくても良いですし、
同じスタイルを持つパーツであれば異なるHTML構造であっても簡単に使いまわすことができます。
要はCSSの使い勝手、管理がしやすくなるんですね。

なので、要は「何を重視するか」によって、id・classをどのように使い分け、つけるのかの方針は変わってくるかと。

ちなみに私の場合はオブジェクト指向考え方は参考にしつつ、割と緩いルールでやってます。

・レイアウトの大枠部分にはidをつける。
・それ以外のコンポーネントには原則全てclass
・コンポーネント内の細かいパーツにも原則classをつける。ただし、ul>liなどのようにHTMLの仕様で構造が確実に限定されるようなケースではわざわざclass名は付けず、 .list liのような子孫セレクタは許容する

↑こんな感じで。

投稿2016/10/06 07:19

aKusano

総合スコア3763

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neotk

2016/10/06 08:05

ご回答ありがとうございます。 通常は処理速度の差はほとんどなく、設計・管理のしやすさやコードの再利用を考慮して決めるのですね。 目的に応じてルールを決めようと思います。 ありがとうございました。
guest

0

自分の場合は、以下のようにすることが多いですね。

html

1<div id="menu"> <!-- idにして、list のように広義の単語ではなく、役割として狭義の単語を使用 --> 2 <h3>リスト</h3> 3 <ul> 4 <li>項目1</li> 5 <li>項目2</li> 6 <li>項目3</li> 7 </ul> 8</div>

css

1#menu h3 { 2} 3#menu li { 4}

class でセレクタを指定した場合、要素の探索はドキュメントの末尾まで行われるのに対し、IDは見つかった時点で、探索を終了する。(JavaScriptの場合は)
ただし、CSSの場合、重複したIDを設定しても、CSSが適応される事実から見て、ドキュメントの最後まで探索しているようです。

ですので、自分の認識としては、

CSSの処理速度は多少上がる

というより、「さほど変わらない」という認識です。

ですので、HTMLには極力、不要なidやclassは使わない方法で書くようにしています。

投稿2016/10/06 06:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neotk

2016/10/06 08:05

ご回答ありがとうございます。 通常は処理速度の差が無視できるレベルということがわかって良かったです。 また、IDとClassの探索方法の違いは初めて知りました。だからIDのほうが高速と言われるのですね。 ありがとうございました。
guest

0

現実問題として、「CSSを当てるべきHTML要素を探すのにかかる時間」なんていうのはほぼ無視できる程度ですし、ましてや書き方を変えたことで節約できる時間は1ミリ秒あるかないかです(実験結果)。

「もうそこしか残っていない」ぐらいにチューニングした環境なら別ですが、そうでもないなら書きやすさを崩してまで「最適化」する必要はないと考えます。

投稿2016/10/06 06:23

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neotk

2016/10/06 08:05

ご回答ありがとうございます。 通常は処理速度の差が無視できるレベルということがわかって良かったです。 また、具体的な実験結果を示していただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問