:hoverとは反対のCSS疑似クラスはありますか?


91

指定するCSSの疑似クラスはありますか

:not(:hover)

それとも、ホバーされていないアイテムを指定する唯一の方法ですか?

いくつかのCSS3参照を調べましたが、:hoverの反対を指定するCSS疑似クラスについての言及はありません。


1
代わりに。をelement:not(:hover)使用してくださいelement
lmgonzalves 2015年

5
@lmgonzalvesそれは機能しません。これにより、ホバー状態と非ホバー状態の両方でスタイルが強制されます。
–rockPaperLz-マスクするかCasket 2015

なぜ:not(:hover)ですか?
オリオール2015年

@Oriol否定されていない疑似クラスほどクリーンではなく、その目的のために設計された疑似クラスよりも計算コストが高くなる可能性があるためです。
–RockPaperLz-マスクするかCasket 2015

回答:


146

はい、使用します :not(:hover)

.child:not(:hover){
  opacity: 0.3;
}

jsBinデモ

もう一つの例; 「ホバーしたときに、他のすべての要素を暗くする」ことをお勧めします。

私の仮定が正しく、すべてのセレクターが同じ親の中にあると仮定した場合:

.parent:hover .child{
    opacity: 0.2;      // Dim all other elements
}
.child:hover{
   opacity: 1;         // Not the hovered one
}

それ以外の場合は...デフォルトロジックを使用するだけです。

.child{
   opacity: 0.2;
}
.child:hover{
   opacity: 1;
}

あなたの最初の文(それが正しいと仮定して!)は答えのように聞こえます。ありがとう!(まだ)存在してはならないため、適切なCSS疑似クラスが見つかりませんでした。あなたが提供した例は、私が取り組んでいるものには当てはまりませんが、それにもかかわらず、非常に便利で役に立ちます。最初の例はほとんどすべてに一致するので、どれほど高価になるのだろうか。何かご意見は?
–rockPaperLz-マスクするかCasket 2015

@RockPaperLizardよく、1000個の子要素を使用すると、少し遅くなる可能性がありますjsbin.com/hazega/1/edit?html,css,outputそうでなければ、100、200個の要素が本当にうまく機能するはずです。
Roko C. Buljan 2015年

ありがとう。以下のための作品:not(:disabled)、あまりにも、私はトンに他の同様の属性を想定しています。
返金なし返品なし

3

そのような疑似クラスはありません。を使用できる場合は、存在する必要はありません:not(:hover):not()疑似クラスの要点は、要素が疑似クラスにのみ一致するか一致しないかのいずれかである既存の(および将来の)動的疑似クラスごとに個別の否定を指定することなく、作成者が否定を記述できるようにすることです。

たとえば、一部の要素のみが:enabledまたはになる可能性があります:disabled—ほとんどの要素はセマンティクスが単に適用されないためどちらでもありません—しかし、要素はポインティングデバイスによってのみ指定できるか(:hover)、または指定できません(:not(:hover))。を使用してすでに直接達成できる否定を提供すると:not()、その有用性が大幅に損なわれます(ただし、他の単純なセレクター、または将来の複雑なセレクター全体を否定するために使用することはできます)。

そのような疑似クラスが計算上より安価であるという議論はかなり弱いです。このような疑似クラスの最もナイーブな実装は、リテラル:not(:hover)チェックですが、これは良くありません。より複雑または最適化された実装で、ベンダーに:not(:hover)、カスケードや:not(:hover)(for for)などの他のオプションを考慮すると、ユースケースと同じかそれよりも速い疑似クラスを実装するように求めています。カスケードがオプションではない場合はいつでも)簡単にアクセスできます。それは、100%機能的に同等である少なくとも1つの他の既存の方法(および少なくともに適用されるもの)の代替案を指定、実装、およびテストするための時間と労力を正当化するものではありません。シナリオの80%)。また、そのような疑似クラスに名前を付けるという問題もあります。名前を提案していないので、良い名前も思いつきません。:not-hover2バイトだけ短く、入力する作業がわずかに少なくなります。どちらかといえば、それは潜在的によりも混乱し:not(:hover)ます。

特異性が心配な場合は:not()疑似クラス自体は特異性としてカウントされないことに注意しくださいその最も具体的な引数はです:not(:hover):hover同様に具体的です。したがって、特異性も問題ではありません。

ブラウザのサポートについて心配している場合、そのような疑似クラスが導入された場合:not()、CSS2(:hover17年以上最初に導入された場所)には表示されなかったため、セレクターと一緒に、または後のレベルのセレクターで導入された可能性があります。以前、そしてもう1年前にIE4で最初に実装されました)。:not(:hover)とにかくブラウザがこの新しい疑似クラスの実装を開始するまで、作成者は単に使用を継続することを余儀なくされ、切り替える理由がないため、後のレベルでそれを導入することは無意味です。

これは、イベントと状態について説明する次の質問と同じではないことに注意してください(元々:focusはで:hoverはなく、同じ原則が適用されます):CSSには:blurセレクター(疑似クラス)がありますか?


1

他の何かにカーソルを合わせたときにのみ何かを表示したい場合は、uを使用できます

selector:not(:hover)

このような:

section{
   font-size:3em;
}

div:not(:hover) + section{
 display:none;
}
<div>Hover on me</div>

<section>Peek A Boo!</section>

あなたが心に留めておくべきである使用するとき、いくつかの異常な効果と結果があり:not()ます:

  • :not(:not(...)):not(p::before)できません
  • :not(*) 明らかに適用されることはありません
  • :not(.foo)および.fooなどのタグを含む、一致しないものすべてに一致します<HTML><body>
  • ルールの特異性を高めます。#foo:not(#bar)たとえば#foo、:は単純なものと同じ要素に一致しますが、特異性は高くなります。

andでの操作:not

  • ない要素<div>はない<span>要素: body :not(div):not(span){}

orでの操作:not、これはまだ十分にサポートされていません。

  • そうでない要素.crazyまたは.fancybody :not(.crazy, .fancy){}

ソースMDN


0
a {
  /*styles*/
} 

正常です(ホバーされていないリンク)

a:hover {
  /*styles*/
} 

ホバーされたリンクです


2
これは正確ではありません。1つ目は、2つ目も指定されていない限り、ホバーされたときとホバーされていないときの両方でアイテムのスタイルを設定します。とにかく、最初の状態は両方の状態で適用され、2番目の状態は2つの状態のいずれかでそれをオーバーライドします。
–rockPaperLz-マスクするかCasket 2015

あなたはそれについて正しいです。しかし、それはそれが行われる方法であり、cssでそれを行う唯一の方法でもあります。あなたが達成したいのは実際に何ですか?
nikola_wd 2015年

ありがとう。別のSOユーザーがあなたと同じ質問をしたため、上記のメインの質問セクションにあなたの質問に答えるコメントを追加しました。
–rockPaperLz-マスクするかCasket 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.