CSSセレクターでクラスとIDを組み合わせる方法は?


221

次のdivがある場合:

<div class="sectionA" id="content">
    Lorem Ipsum...
</div>

id='content'ANDを使用したdiv」というアイデアを表現するスタイルを定義する方法はありclass='myClass'ますか?

または、次のように単にどちらか一方の方法で行っていますか

<div class="content-sectionA">
    Lorem Ipsum...
</div>

または

<div id="content-sectionA">
    Lorem Ipsum...
</div>

2
IDで選択する場合は、IDが一意であるため、1つの要素のみが一致するため、クラスで選択する必要もありません。したがって、クラスを同じセレクターに追加することは、追加のタイピングです
TStamper

20
@TStamper:必ずしもそうではありません。あなたは静的ドキュメントの観点からのみ考えています。例img#Inboxとして、ページにアイコンがあり、通常は不透明度が50%に設定されている場合があります。ただし、ユーザーにメッセージがある場合は、メッセージを100%の不透明度に設定する必要があり、バックエンドはactive要素にクラスを追加することでこれを示します。このようなシナリオでは、IDとクラス名の両方を組み合わせるセレクターを使用することは理にかなっています。
Lèseはmajesté

@TStamper:また、より具体的なid + classコンボセレクターがないと、idバージョンのみの場合よりも重みと優先順位が高くなりますか?私の知る限り、そうすべきです。(IOW、id + classコンボセレクターのルールは、idコンボセレクターのルールをオーバーライドします。(これが、このスレッドを今すぐ見つけるための私の理由/必要でした。)
govinda

だから、私は同じような状況にあります。たとえば、説明があり、個々の製品を個別に制御したい製品がたくさんあるので、次のようにできます: code<p id = Product_1 class = Product> Product 1 </ p> <p id = Product_2 class = Product> Product 2 </ p> code これは、すべての製品の一般的なスタイリングを可能にするだけでなく、特定の製品の個別のスタイリングも可能にしますか?
Tamer Ziady 2015年

回答:


327

スタイルシートで:

div#content.myClass

編集:これらも役立つかもしれません:

div#content.myClass.aSecondClass.aThirdClass /* Won't work in IE6, but valid */
div.firstClass.secondClass /* ditto */

そして、あなたの例ごとに:

div#content.sectionA

編集、4年後:これは非常に古く、人々はそれを見つけ続けているので、セレクターでtagNamesを使用しないでください。tagNameが不要なフィルタリング手順を追加するため、#content.myClassより高速div#content.myClassです。tagNamesは、必要な場合にのみセレクタで使用してください。


31
IDがdivに属していることを指定しても、IDは既に一意であるため、レンダリングパフォーマンスに悪影響を与えるだけで(ほとんど無視できます)、メリットはありません。きれいにするために、代わりに#content.myClassを使用します。
mystrdat

3
div.class#idあまり推奨されませんが同等である必要があります。最初にセレクタのよりユニークな部分を使用します。
SF。

1
数年後も、あなたの努力に感謝します:) まだ私のような人を助けています。私のプロジェクトで使用しました。確かに賛成です。
C4d 2015年

76

css #header .callout#header.calloutには違いがあります。

ここに「平易な英語」があります #header .callout
クラス名を持つすべての要素を選択calloutのIDを持つ要素の子孫でありますheader

そして #header.callout意味:
のID headerとクラス名を持つ要素を選択しますcallout

あなたはここでCSSトリックをもっと読むことができます


私は空白文字でこの間違いをしました:#id .class vs#id.class
ERJAN '29

5

1つの要素でIDとクラスを組み合わせることに何の問題もありませんが、1つのルールで両方で識別する必要はありません。あなたが本当にしたいなら、次のことができます:

#content.sectionA{some rules}

div他の人が提案したように、IDの前には必要ありません。

一般に、その要素に固有のCSSルールはIDを使用して設定する必要があり、それらはクラスだけのルールよりも大きな重みを持ちます。クラスで指定されるルールは、調整が必要なときにいつでも複数の場所で変更したくない複数のアイテムに適用されるプロパティです。

つまり、これは次のようになります。

 .sectionA{some general rules here}
 #content{specific rules, and overrides for things in .sectionA}

理にかなっていますか?


4

ええと、idは常に一意であるため、一般的に、idで指定された要素を分類する必要はありませんが、本当に必要な場合は、次のように機能します。

div#content.sectionA {
    /* ... */
}

1

CSSでIDとクラス組み合わせることができます、IDは一意であることが意図されているため、CSSセレクターにクラスを追加すると過剰修飾されます。


それは良い点です。多分あなたが非常に一般的なクラスのセット(浮動小数点数、高さ/幅、多分フォントのようなものを設定する)を持っていて、このユニークな例外でそれらの何かをオーバーライドしたいのではないでしょうか?
ajm 2009年

5
異なるページで同じスタイルシートを使用しない限り。:-)
Patrick McElhaney、2009年

5
別の例:クラスがJavaScript(#optionalFields.enabled)を使用して動的に追加される場合
Patrick McElhaney

異なるページで同じスタイルシートを使用する場合でも、本文にクラスを配置するか、IDに1つのスタイルを設定してから、適切なオーバーライドスタイルを使用してクラスのクラス定義を分離することをお勧めします。
エリックウェンデリン

ええ、私はこれを行うことはかなり一般的だと思います。例:li#SomeTab.state-selected
Yablargo 2013


0

IDはドキュメント全体で一意であることが想定されているため、両方に基づいて選択する必要はありません。要素を複数のクラスに割り当てることができますclass="class1 class2"


1
クラスは変更できます。たとえば、div#id.activeとdiv#id.inactiveを持つことができます。
ダニエル・モウラ

結局のところ、考えてみると、この機能を使用しましたが、目的の動作が何であるかを誤解しました。
ベン・ヒューズ、

0

私はあなたがすべて間違っていると思います。IDとクラスは特定性の問題ではありません。彼らは完全に異なる論理的用途を持っています。

IDは、ページの特定の部分(ヘッダー、ナビゲーションバー、メイン記事、著者の帰属、フッター)を識別するために使用する必要があります。

ページにスタイルを適用するには、クラスを使用する必要があります。一般的な雑誌サイトがあるとしましょう。サイトのすべてのページには同じ要素(ヘッダー、ナビゲーション、メイン記事、サイドバー、フッター)が含まれます。しかし、あなたの雑誌には、経済学、スポーツ、娯楽など、さまざまなセクションがあります。あなたは、3つのセクションに異なる外観を持たせたいと考えています。

そのためにクラスを使用します。複数のID(#economics-article、#sports-article、#entertainment-article)を作成する必要はありません。それは意味がありません。むしろ、.economics、sports、.entertainmentの3つのクラスを定義してから、それぞれに#nav、#article、#footer IDを定義します。


言及するほとんどの要素には、IDではなくセマンティックHTMLタグを実際に使用できます。ヘッダー、フッター、ナビゲーション、セクションなどのタグが存在するのには理由があります。
Walter Schwarz、

しかし、実際には、一意のシングルトンであるはずの要素にのみIDを使用する必要があります。ただし、それでも、JavaScriptを介してその要素にアクセスする必要がある場合にのみ非常に役立ちます。IDを使用すると、CSSが特定されすぎて、後で他のCSSやHTMLとマージすることが困難になるためです。IDの方がクラスより速いという主張もありますが、その違いはごくわずかです。
Walter Schwarz

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.