:hover(マウスから離れる)の反対は何ですか?


115

CSS :hover のみ使用する反対の方法はありますか?以下のように:場合:hoveron Mouse Enter、CSSは以下と等価ありますかon Mouse Leave

例:

リストアイテムを使用するHTMLメニューがあります。アイテムの1つにカーソルを合わせると、CSSカラーアニメーションが表示さ#999blackます。マウスが項目領域を離れたときに、アニメーションがからblackに変化するときに、反対の効果をどのように作成でき#999ますか

jsFiddle

(私はこの例だけではなく、「反対の:hover」問題全体に答えたいとは思いません。)


正確に何をしようとしていますか?多分別の選択肢がありますか?
Moin Zaman

14
の反対:hoverは非常に単純:not(:hover)です。ただし、:hoverと同じではなく、と同じでonmouseenterもありません。CSSにはDOMイベントの概念はありません。:not(:hover)onmouseleave
BoltClock

1
@Cthulhu::hover単に「マウスポインターが上にある要素」を意味します。マウスポインターが別の要素からこの要素に移行したかどうかは示しません。マウスポインターが現在要素上にあることを意味します。
BoltClock

1
@BoltClockは:not(:hover)で実際にトリガーされるものは何ですか?
Moin Zaman

5
@Moin Zaman:はい。マウスが特定の要素上にない限り、:not(:hover)適用されます。ここにデモがあります:jsfiddle.net/BoltClock/rghBX
BoltClock

回答:


93

私が正しく理解していれば、ホバー状態ではなくリンクに遷移を移動することで同じことができます。

ul li a {
    color:#999;       
    transition: color 0.5s linear; /* vendorless fallback */
    -o-transition: color 0.5s linear; /* opera */
    -ms-transition: color 0.5s linear; /* IE 10 */
    -moz-transition: color 0.5s linear; /* Firefox */
    -webkit-transition: color 0.5s linear; /*safari and chrome */
}

ul li a:hover {
    color:black;
    cursor: pointer;
}

http://jsfiddle.net/spacebeers/sELKu/3/

ホバーの定義は次のとおりです。

:hoverセレクタは、要素の上にマウスを置いたときに要素を選択するために使用されます。

その定義では、ホバーの反対は、マウスがその上にない任意のポイントです。私よりはるかに賢い人がこの記事を書いて、両方の状態に異なる遷移を設定しています-http://css-tricks.com/different-transitions-for-hover-on-hover-off/

#thing {
   padding: 10px;
   border-radius: 5px;

  /* HOVER OFF */
   -webkit-transition: padding 2s;
}

#thing:hover {
   padding: 20px;
   border-radius: 15px;

  /* HOVER ON */
   -webkit-transition: border-radius 2s;
}

1
"(私はこの例だけではなく、":hover "の反対の問題全体に答えるつもりはないことを覚えておいてください。)"
クトゥルフ

1
@Cthulhu-私は今私の答えを編集しました。それはもう少し役立つかもしれません。それは明らかな答えだと思いました。
SpaceBeers

私を正しい方向に向けるための+1。ブラウザ間でアニメーションの不一致がありました。Chromeはすべてをよりスムーズにレンダリングしていましたが、トランジションで.1が異なり、MozillaとIEの両方がエラーを表示していました。トランジション番号を一致させることで修正できました。
Termato 2015

ああ。:hoverあなたが引用したあなたの「定義」はW3Schoolsからのものです、彼らは決して信頼できる情報源ではありません。実際の仕様はw3.org/TR/CSS21/selector.html#dynamic-pseudo-classesにありますが、最もわかりやすい説明ではありません。
Mark Amery

22

アニメーションの代わりにCSSトランジションを使用してください。

A {
    color: #999;
    transition: color 1s ease-in-out;
}

A:hover {
    color: #000;
}

ライブデモ


例で述べたように、私の問題はアニメーションではなく、「マウスを離れる」部分にあります。
クトゥルフ

5
トランジションはマウスオーバーとマウス離脱の両方で機能します。通常の状態と:hover状態のスタイルを指定するだけで十分です。
Marat Tanalin

5

CSSにはマウスリーブの明示的なプロパティはありません。

問題のアイテムを除く他のすべての要素で:hoverを使用して、この効果を達成できます。しかし、それがどれほど実用的かはわかりません。

私はあなたがJS / jQueryソリューションを見る必要があると思います。


この場合はJSは必要ありません。パフォーマンスの正当化はできますが、今はお勧めしません。
Alex Chamberlain

上記の例では必要ありませんが、「マウス休暇」問題全体の最善の解決策のようです。
クトゥルフ


1

ここでの回答は十分ですが、この問題に関するW3Schoolsの例は非常に単純であると思います((私にとって)混乱はすぐに解消されました)。

:hoverセレクターを使用して、マウスをボタンの上に移動したときにボタンのスタイルを変更します。

ヒント: transition-durationプロパティを使用して、「ホバー」効果の速度を決定します。

.button {
    -webkit-transition-duration: 0.4s; /* Safari & Chrome */
    transition-duration: 0.4s;
}

.button:hover {
    background-color: #4CAF50; /* Green */
    color: white;
}

要約すると、「開始」と「終了」のアニメーションを同じにしたいトランジション.buttonでは、ホバーセレクターではなくメインセレクターでトランジションを使用する必要があります.button:hover。「開始」と「終了」のアニメーションを異なるものにするトランジションの場合、異なるメインセレクターとホバーセレクターのトランジションを指定する必要があります。



1

使っている要素にトランジションを追加するだけです。ページが読み込まれるとき、いくつかの影響があることに注意してください。境界線の半径を変更した場合と同様に、DOMが読み込まれると変更されます。

.element {
  width: 100px;
  transition: all ease-in-out 0.5s;
}
 
 .element:hover {
  width: 200px;
    transition: all ease-in-out 0.5s;
}


0

あなたは誤解してい:hoverます。それは、マウスがアイテムに入ったばかりではなく、アイテムの上にあることを示しています。

:hover必要な効果を得るためにアニメーションをセレクターに追加することはできません。

トランジションはより良いオプションです:http : //jsfiddle.net/Cvx96/


1
あなたのフィドルは、意図した結果を生み出しません。
Govind Rai

0

の反対はの:hoverよう:linkです。

(編集:ない技術的に反対4つのセレクタがあるので:link:visited:hoverそして:activeあなたが含まれている場合ファイブは。:focus。)

たとえば.button:hover{ text-decoration:none }、ボタンの下線を削除するルールを定義すると、一部のブラウザーでボタンをロールオフすると下線が表示されます。私はこれを修正しました.button:hover, .button:link{ text-decoration:none }

もちろん、これは実際にリンクされている要素(href属性を持つ)に対してのみ機能します


あなたの情報は間違っています。:linkリンクを選択するだけです。ここの定義を見てください:linkdeveloper.mozilla.org/en-US/docs/Web/CSS/%3Alink
Cthulhu

@ Strive55ああ、ありがとう、理にかなっています。あなたが与えたリンクは、「リンクを適切にスタイルするためには、LVHA-order::link —:visited —:hover —:activeで定義されているように、:linkルールを他のルールの前に置く必要がある」と述べています。私がそれを正しく理解していれば、それは他のどのセレクターも適用されない場合(:visited、:hover、または:active)、: linkが適用されることを意味します。ない技術的に反対、そこに4ですが、それはまだ動作しますので
スクリプター

0

トランジションとinicialクラスのアニメーションの名前を追加するだけで、ul li a、「transition」プロパティを追加するだけで十分です。

ul li {
    display: inline;
    margin-left: 20px;
}

ul li a {
    color: #999;
    transition: 1s;
    -webkit-animation: item-hover-off 1s;
    -moz-animation: item-hover-off 1s;
    animation: item-hover-off 1s;
}

ul li a:hover {
    color: black;
    cursor: pointer;
    -webkit-animation: item-hover 1s;
    -moz-animation: item-hover 1s;
    animation: item-hover 1s;
}

@keyframes item-hover {
    from {
      color: #999;
      }
    to {
      color: black;
      }
}
    
@-moz-keyframes item-hover {
    from {
        color: #999;
      }
    to {
        color: black;
      }
}
    
@-webkit-keyframes item-hover {
    from {
        color: #999;
      }
    to {
        color: black;
      }
}

@keyframes item-hover-off {
    from {
      color: black;
      }
    to {
      color: #999;
      }
}
    
@-moz-keyframes item-hover-off {
    from {
        color: black;
      }
    to {
        color: #999;
      }
}
    
@-webkit-keyframes item-hover-off {
    from {
        color: black;
      }
    to {
        color: #999;
      }
}
<ul>
    <li><a>Home</a></li>
    <li><a>About</a></li>
    <li><a>Contacts</a></li>
</ul>

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