Fareyle üzerine gelme (fare izninde) ne demektir?


115

:hover Sadece CSS kullanmanın tersini yapmanın bir yolu var mı ? Olduğu gibi: eğer :hoverolduğunu on Mouse Enter, CSS eşdeğer var on Mouse Leave?

Misal:

Liste öğelerini kullanan bir HTML menüm var. Ben öğelerden biri geldiğinizde, bir CSS renk animasyon var #999etmek black. Nasıl ters etki yaratabilir zaman bir animasyon ile fare yaprakları öğe alanı, blackiçin #999?

jsFiddle

(Sadece bu örneğe değil, :hoversorunun tam tersine yanıt vermek istediğimi unutmayın .)


Tam olarak ne yapmaya çalışıyorsun Belki farklı bir alternatif vardır?
Moin Zaman

14
Bunun tersi :hoveroldukça basittir :not(:hover); Ancak :hoverolduğunu değil eş anlamlı onmouseenterne de :not(:hover)aynıdır onmouseleave. CSS'de DOM olayları kavramı yoktur.
BoltClock

1
@Cthulhu: :hoverbasitçe "üzerinde fare işaretçisi olan bir öğe" anlamına gelir. Fare işaretçisinin başka bir öğeden bu öğeye geçiş yapıp yapmadığını göstermez. Bu sadece fare işaretçisinin şu anda öğenin üzerinde olduğu anlamına gelir.
BoltClock

1
@BoltClock: (: hover) aslında hiçbir şey tetiklenmez mi?
Moin Zaman

5
@Moin Zaman: Evet. Fareniz belirli bir öğenin üzerinde olmadığı sürece :not(:hover)geçerli olacaktır. İşte bir demo: jsfiddle.net/BoltClock/rghBX
BoltClock

Yanıtlar:


93

Doğru anladıysam, geçişlerinizi fareyle üzerine gelme durumu yerine bağlantıya taşıyarak aynı şeyi yapabilirsiniz:

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/

Fareyle üzerine gelmenin tanımı şöyledir:

: Hover seçici, fareyi üzerlerine getirdiğinizde öğeleri seçmek için kullanılır.

Bu tanıma göre, üzerine gelmenin tersi, farenin üzerinde olmadığı herhangi bir noktadır . Benden çok daha akıllı biri bu makaleyi yaptı ve her iki durumda da farklı geçişler ayarladı - 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
"(Sadece bu örneğe değil, tüm" tersi: üzerine gelme "konusuna cevap vermek istemediğimi unutmayın.)"
Cthulhu

1
@Cthulhu - Cevabımı şimdi düzenledim. Bu biraz daha yardımcı olabilir. Bunun çok açık bir cevap olduğunu düşündüm.
SpaceBeers

Beni doğru yönü işaret ettiği için +1. Tarayıcılar arasında bir animasyon uyuşmazlığı yaşıyordum. Chrome her şeyi daha pürüzsüz hale getiriyordu ancak geçişlerde .1'ler farklıydı ve Mozilla ve IE her ikisi de hatayı görüntülüyordu. Geçiş numaralarımı eşleştirerek düzeltmeyi başardım.
Termato

Ugh. :hoverAlıntı yaptığınız 'tanım', hiçbir şekilde yetkili bir kaynak olmayan W3Schools'a aittir. En erişilebilir açıklama olmasa da, asıl spesifikasyon w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes adresinde bulunabilir .
Mark Amery

22

Sadece kullanmak CSS geçişleri yerine animasyonların.

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

A:hover {
    color: #000;
}

Canlı demo


Örnekte de söylediğim gibi, benim sorunum animasyonla değil, "fare izniyle" kısmıyla ilgili.
Cthulhu

5
Geçiş hem fare üzerinde hem de fare bırakıldığında çalışır. Normal durum ve :hoverdurum için stil belirlemek yeterlidir .
Marat Tanalin

5

CSS'de fare bırakma için açık bir özellik yoktur.

Bu etkiyi elde etmek için söz konusu öğe dışındaki tüm diğer öğelerin üzerine gelin: kullanabilirsiniz. Ama bunun ne kadar pratik olacağından emin değilim.

Bir JS / jQuery çözümüne bakmanız gerektiğini düşünüyorum.


Bu durumda JS'ye ihtiyaç yoktur ve performansın bir gerekçesi olsa da, şimdi onu cesaretlendirmek istiyorum.
Alex Chamberlain

Yukarıdaki örnek için gerekli değildir, ancak tüm "fareden ayrılma" sorunu için en iyi çözüm gibi görünmektedir.
Cthulhu


1

Buradaki cevaplar yeterli olsa da , bu konudaki W3Schools örneğinin gerçekten çok basit olduğunu düşünüyorum ((benim için) karışıklığı hemen çözdü).

:hoverFareyi üzerine getirdiğinizde bir düğmenin stilini değiştirmek için seçiciyi kullanın .

İpucu: "Fareyle üzerine gelme" efektinin hızını belirlemek için geçiş süresi özelliğini kullanın:

Misal

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

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

Özetle, "gir" ve "çıkış" animasyonlarının aynı olmasını istediğiniz geçişler için, geçişleri .buttonfareyle üzerine gelme seçici yerine ana seçicide kullanmanız gerekir .button:hover. "Giriş" ve "çıkış" animasyonlarının farklı olmasını istediğiniz geçişler için, farklı ana seçici ve fareyle üzerine gelme seçici geçişleri belirtmeniz gerekir.


1

Üzerine gelmeyen seçime süre sürenizi girin:

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

li a:hover {
  padding:19px;
}

1

Sadece uğraştığınız öğeye bir geçiş ekleyin. Sayfa yüklendiğinde bazı etkiler olabileceğini unutmayın. Mesela bir sınır yarıçapı değişikliği yaptıysanız, bunu dom yüklendiğinde göreceksiniz.

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


0

Yanlış anladınız :hover; farenin öğeye yeni girmesi yerine farenin öğenin üzerinde olduğunu söylüyor.

İstediğiniz :hoverefekti elde etmeden seçiciye animasyon ekleyebilirsiniz .

Geçişler daha iyi bir seçenektir: http://jsfiddle.net/Cvx96/


1
Kemanınız istenilen sonucu vermez.
Govind Rai

0

Bunun tersi :hovergörünüyor :link.

(düzenleme: teknik olarak değil bir karşıt orada 4 seçiciler, çünkü :link, :visited, :hoverve :active. Eğer eklerseniz Beş :focus.)

Örneğin .button:hover{ text-decoration:none }, bir düğmedeki alt çizgiyi kaldırmak için bir kural tanımlarken , bazı tarayıcılarda düğmeyi kaldırdığınızda alt çizgi görünür. Bunu düzelttim.button:hover, .button:link{ text-decoration:none }

Bu elbette yalnızca gerçekte bağlantı olan öğeler için işe yarar (href niteliğine sahip)


Bilgileriniz yanlış. :linksadece bağlantıları seçer, bu kadar basit. Şunun tanımına bakın :link: developer.mozilla.org/en-US/docs/Web/CSS/%3Alink
Cthulhu

@ Strive55 Ahhh, teşekkürler, bu mantıklı. Verdiğiniz bağlantı, "Bağlantıları uygun şekilde biçimlendirmek için, LVHA-order:: link -: ziyaret edildi -: hover -: aktif olarak tanımlandığı gibi diğerlerinden önce: bağlantı kuralını koymanız gerektiğini belirtir." Doğru anladıysam, bu, diğer seçicilerden hiçbiri geçerli değilse (: ziyaret edildi,: hover veya: active) o zaman: link geçerli olanıdır. Teknik olarak tam tersi değil, çünkü 4 tane var, ama yine de çalışıyor
senarist

0

Sadece sınıfın bilgisine bir geçiş ve animasyonun adını ekleyin, sizin durumunuzda ul li a, sadece bir "geçiş" özelliği ekleyin ve tek ihtiyacınız olan bu

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.