CSSセレクターで特定のクラス名を除外する方法は?


137

ユーザー名がであるクラス名の要素にマウスを置いたときに、背景色を適用しようとしています"reMode_hover"

要素があればしかし、私は色を変更したくないあり"reMode_selected"

注:私はJavaScriptでなくCSSのみを使用できます。これは、ある種の限られた環境で作業しているためです。

明確にするために、私の目標は、ホバーの最初の要素に色を付けることですが、2番目の要素には色を付けません。

HTML

<a href="" title="Design" class="reMode_design  reMode_hover">
    <span>Design</span>
</a>

<a href="" title="Design" 
 class="reMode_design  reMode_hover reMode_selected">
    <span>Design</span>
</a>

最初の定義が機能することを期待して以下を試しましたが、機能しません。何が悪いのですか?

CSS

/* do not apply background-color so leave this empty */
.reMode_selected .reMode_hover:hover 
{
}

.reMode_hover:hover 
{
   background-color: #f0ac00;
}

回答:


235

1つの方法は、複数のクラスセレクターを使用することです(子孫セレクターはスペースがないため)。

.reMode_hover:not(.reMode_selected):hover 
{
   background-color: #f0ac00;
}
<a href="" title="Design" class="reMode_design  reMode_hover">
    <span>Design</span>
</a>

<a href="" title="Design" 
 class="reMode_design  reMode_hover reMode_selected">
    <span>Design</span>
</a>


3
それはいけません:.reMode_hover:not( '。reMode_selected'):hover私の経験では、これらの引用符が必要です。
Makan Tayebi 2014

1
@MakanTayebiあなたはセレクターの周りの引用に関して優れたポイントを上げます。TL; DR:実際に使用するのが最善です。stackoverflow.com/a/5578880/1772379での完全な説明。
ベンジョンソン

それはまだ事実ですか?他のブラウザーでこれを試したことはありませんが、私が作業している最新バージョンのFirefoxでは、引用符:not削除しないとセレクターが機能しませんでした。
Alex Rummel


12

方法1

コードの問題.remode_hoverは、の子孫であるを選択していることです.remode_selected。したがって、コードを正しく機能させるための最初の部分は、そのスペースを削除することです

.reMode_selected.reMode_hover:hover

次に、スタイルが機能しないようにするには、によって設定されたスタイルをオーバーライドする必要があります:hover。つまり、background-colorプロパティに対抗する必要があります。したがって、最終的なコードは

.reMode_selected.reMode_hover:hover {
  background-color:inherit;
}
.reMode_hover:hover {
  background-color: #f0ac00;
}

フィドル

方法2

他の方法で:not()述べられているように、代替方法はを使用することです。これは、括弧内に記述されたクラスまたはプロパティを持たない要素を返します。この場合、そこに入れます.remode_selected。これは、クラスのないすべての要素をターゲットにします.remode_selected

フィドル

ただし、この方法はCSS3で導入されたため、ブラウザのサポートは理想的ではないため、この方法はお勧めしません。

方法3

3番目の方法は、jQueryを使用することです。CSSでの.not()使用と同様のセレクターをターゲットにできますが、:not()ブラウザーのサポートが大幅に向上します

フィドル


4
OPがソリューションに対して「JavaScriptではない」と明確に述べているため、jQueryについて言及している「方法3」を削除する必要があります。
ScottS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.