2つのクラスが存在する場合にのみ、CSSで要素をターゲットにできますか?


85

おそらくすでにご存知のように、スペースで区切られた要素に複数のクラスがある場合があります。

<div class="content main"></div>

そしてCSSを使用するdivと、.contentまたはのいずれかでそれをターゲットにできます.main。両方のクラスが存在する場合にのみ、それをターゲットにする方法はありますか?

<div class="content main">I want this div</div>
<div class="content">I don't care about this one</div>
<div class="main">I don't want this</div>

最初のものdivだけを取得するためにどのCSSセレクターを使用しますか(使用できないなどと仮定し.content:first-childます)?

回答:


135

はい、それらを連結するだけです:.content.mainCSSクラスセレクターを参照してください。

ただし、バージョン6までのInternet Explorerは複数のクラスセレクターをサポートしておらず、最後のクラス名のみを尊重することに注意してください。


それが「最大」であり、「IE6を含まない」限り:)
alex

いいえ、IE6は連鎖CSSセレクターを正しく理解していません。このルールは、class = "content"であるかどうかに関係なく、class = "main"を持つすべての要素に適用されます
Gareth

:気に誰のために他のブラウザ対IE6用イラストstackoverflow.com/questions/3772290/...を
BoltClock

11

それのためだけに(私はあなたがこれをすることを本当にお勧めしません)、それをする別の方法があります:

.content[class~="main"] {}

または:

.main[class~="content"] {}

参照:http//www.w3.org/TR/CSS2/selector.html

E [foo〜 = "warning"]「foo」属性値がスペースで区切られた値のリストであるE要素に一致します。そのうちの1つは「warning」とまったく同じです。

デモ:http//jsfiddle.net/eXrSg/

これが実際に役立つ理由(少なくともIE6の場合):

IE6は複数のクラスをサポートしていないので、我々は使用することはできません.content.mainしかし、のようないくつかのJavaScriptライブラリがあるIE-7.js属性セレクタを有効にするが、それは複数のクラスに来るとき、まだ失敗しているようです。私は、属性セレクターを有効にするjavascriptを使用してIE6でこの回避策をテストしましたが、見苦しいですが、機能します。

IE6で複数のクラスセレクターをサポートするスクリプトはまだ見つかりませんが、属性セレクターを有効にするスクリプトはたくさんあります。誰かがうまくいくもの知っているなら、私がこの回避策を取り除くことができるようにコメントで私に叫んでください。

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