Що протилежне: наведення курсора (у відпустці миші)?


115

Чи є якийсь спосіб зробити протилежне :hover використання лише CSS? Як у: якщо :hoverє on Mouse Enter, чи існує CSS, еквівалентний on Mouse Leave?

Приклад:

У мене є меню HTML за допомогою елементів списку. Коли я наведіть курсор на один із елементів, з'являється кольорова анімація CSS від #999до black. Як я можу створити зворотний ефект, коли миша залишає область предмета, з анімацією від blackдо #999?

jsFiddle

(Майте на увазі, що я не хочу відповідати лише на цей приклад, а на всю :hoverпроблему "протилежно ".)


Що саме ти намагаєшся зробити? Може, є інша альтернатива?
Moin Zaman

14
Протилежність :hoverдосить просто :not(:hover); однак не:hover є синонімом і не є таким же, як . CSS не має жодної концепції подій DOM. onmouseenter:not(:hover)onmouseleave
BoltClock

1
@Cthulhu: :hoverпросто означає "елемент, який має вказівник миші на нього". Він не вказує, чи перейшов вказівник миші з іншого елемента на цей елемент. Це просто означає, що вказівник миші зараз знаходиться на елементі.
BoltClock

1
@BoltClock би: не (: навести курсор) насправді щось робити взагалі?
Мойн Заман

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/

Визначення наведення курсора:

Селектор: наведіть курсор, щоб вибрати елементи при наведенні на них курсором миші.

За цим визначенням протилежною курсору є будь-яка точка, в якій миша не над нею. Хтось набагато розумніший за мене зробив цю статтю, встановивши різні переходи в обох станах - 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
"(Майте на увазі, що я не хочу відповідати лише на цей приклад, а на все питання" навпаки: наведіть ".)"
Cthulhu

1
@Cthulhu - я вже відредагував свою відповідь. Це може допомогти трохи більше. Я вважав, що це занадто очевидна відповідь.
SpaceBeers

+1 для вказівки мене в потрібному напрямку. У мене була невідповідність анімації між браузерами. Chrome рендерував усе гладше, але у мене були різні значення переходів .1s, і Mozilla та IE обидва відображали помилку. Я зміг це виправити, зіставивши свої перехідні номери.
Термато

Тьфу. "Визначення", яке :hoverви цитували, походить від W3Schools, які аж ніяк не є авторитетним джерелом. Фактичну специфікацію можна знайти на w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes , хоча це не найдоступніше пояснення.
Марк Амері

22

Просто використовуйте переходи CSS замість анімації.

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

A:hover {
    color: #000;
}

Демонстраційна демонстрація


Як я вже говорив на прикладі, моє питання не з анімацією, а з частиною "у відпустці миші".
Cthulhu

5
Перехід працює як у режимі миші, так і у відпустці миші. Досить вказати стилі для нормального стану та :hoverстану.
Марат Таналін

5

Ні, немає явного властивості для залишення миші в CSS.

Ви можете використовувати: навести курсор на всі інші елементи, крім предмета, про який йдеться, щоб досягти цього ефекту. Але я не впевнений, наскільки це було б практично.

Я думаю, що ви повинні подивитися на рішення JS / jQuery.


JS в цьому випадку не потрібен, і я б зараз його відштовхував, хоча це і є виправданням ефективності.
Алекс Чемберлен

Це не потрібно для наведеного вище прикладу, але, здається, це найкраще рішення для всієї проблеми "залишення миші".
Cthulhu


1

Хоча відповідей тут достатньо, я дійсно думаю, що приклад W3Schools у цьому питанні є дуже простим (він відразу усунув плутанину (для мене)).

Використовуйте :hoverселектор, щоб змінити стиль кнопки під час переміщення миші на неї.

Порада: Використовуйте властивість тривалості переходу, щоб визначити швидкість ефекту "наведення":

Приклад

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

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

Підсумовуючи це, для переходів, де ви хочете, щоб анімація "введення" та "вихід" була однаковою, вам потрібно використовувати переходи на головному селекторі, .buttonа не на курсорі вибору .button:hover. Для переходів, де ви хочете, щоб анімації "введення" та "виходу" були різними, вам потрібно вказати різні основні переходи селектора та наведення курсора.


1

Помістіть час тривалості у виборі без наведення курсора:

li a {
  background-color: #111;
  transition:1s;
}

li a:hover {
  padding:19px;
}

1

Просто додайте перехід до елемента, з яким ви возиться. Майте на увазі, що при завантаженні сторінки можуть виникнути певні ефекти. Як якщо б ви змінили радіус кордону, ви побачите це, коли купол завантажується.

.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
Ваша загадка не дає наміченого результату.
Говінд Рай

0

:hoverЗдається, навпаки :link.

(Редагування: технічно не протилежний , тому що є 4 селектор :link, :visited, :hoverі :activeп'ять , якщо включити. :focus) .

Наприклад, визначаючи правило .button:hover{ text-decoration:none }для видалення підкреслення на кнопці, підкреслення відображається, коли ви відкручуєте кнопку в деяких браузерах. Я це виправив.button:hover, .button:link{ text-decoration:none }

Це, звичайно, працює лише для елементів, які є фактично посиланнями (мають атрибут href)


Ваша інформація невірна. :linkпросто вибирає посилання, прості як такі. Подивіться тут на визначення :link: developer.mozilla.org/en-US/docs/Web/CSS/%3Alink
Cthulhu

@ Strive55 Аааа, дякую, це має сенс. Посилання, яке ви надали, зазначає, що "для належного стилю посилань вам потрібно поставити правило: link перед іншими, як визначено LVHA-порядком:: link -: відвідано -: hover -: active". Якщо я правильно це розумію, це означає, що якщо жоден з інших селекторів не застосовується (: відвідано,: навести курсор або: активний), тоді: посилання - це те, що застосовується. Технічно не навпаки, тому що їх 4, але це все ще працює
сценарій

0

Просто додайте перехід та назву анімації для класу inicial, у вашому випадку ul li a, просто додайте властивість "перехід", і це все, що вам потрібно

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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.