อะไรคือสิ่งที่ตรงข้ามกับ: hover (เมื่อปล่อยเมาส์)?


116

มีวิธีใดบ้างที่จะตรงกันข้ามกับการ: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เป็นไม่ตรงกันกับonmouseenterไม่เป็นเช่นเดียวกับ:not(:hover) onmouseleaveCSS ไม่มีแนวคิดเกี่ยวกับเหตุการณ์ DOM
BoltClock

1
@ คธูลู: :hoverหมายถึง "องค์ประกอบที่มีตัวชี้เมาส์อยู่เหนือ" ไม่ได้ระบุว่าตัวชี้เมาส์เปลี่ยนจากองค์ประกอบอื่นเป็นองค์ประกอบนี้หรือไม่ หมายความว่าขณะนี้ตัวชี้เมาส์อยู่ที่องค์ประกอบ
BoltClock

1
@BoltClock จะ: ไม่ (: hover) ทำอะไรได้จริงหรือ?
Moin Zaman

5
@Moin Zaman: อ๋อ ตราบใดที่เมาส์ของคุณไม่อยู่เหนือองค์ประกอบใดองค์ประกอบหนึ่งก็:not(:hover)จะใช้งานได้ นี่คือการสาธิต: jsfiddle.net/BoltClock/rghBX
BoltClock

คำตอบ:


94

ถ้าฉันเข้าใจถูกต้องคุณสามารถทำสิ่งเดียวกันได้โดยย้ายการเปลี่ยนไปที่ลิงก์แทนที่จะอยู่ในสถานะโฮเวอร์:

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

ฮึ. 'คำจำกัดความ' ที่: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;
}

การสาธิตสด


อย่างที่ฉันพูดในตัวอย่างปัญหาของฉันไม่ได้อยู่ที่แอนิเมชั่น แต่เป็นส่วน "เมื่อปล่อยเมาส์"
Cthulhu

5
การเปลี่ยนใช้งานได้ทั้งเมื่อวางเมาส์และปล่อยเมาส์ มันเพียงพอที่จะระบุรูปแบบสำหรับสถานะปกติและ:hoverสถานะ
Marat Tanalin

5

ไม่มีคุณสมบัติที่ชัดเจนสำหรับการปล่อยเมาส์ใน CSS

คุณสามารถใช้: วางเมาส์บนองค์ประกอบอื่น ๆ ทั้งหมดยกเว้นรายการที่เป็นปัญหาเพื่อให้ได้เอฟเฟกต์นี้ แต่ฉันไม่แน่ใจว่ามันจะใช้ได้จริงแค่ไหน

ฉันคิดว่าคุณต้องดูโซลูชัน JS / jQuery


ไม่จำเป็นต้องใช้ JS ในกรณีนี้และตอนนี้ฉันจะกีดกันแม้ว่าจะเป็นเหตุผลของประสิทธิภาพ
Alex Chamberlain

ไม่จำเป็นสำหรับตัวอย่างข้างต้น แต่ดูเหมือนว่าจะเป็นทางออกที่ดีที่สุดสำหรับปัญหา "การปล่อยเมาส์" ทั้งหมด
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สำหรับการเปลี่ยนที่คุณต้องการให้ภาพเคลื่อนไหว "enter" และ "exit" แตกต่างกันคุณจะต้องระบุตัวเลือกหลักและการเปลี่ยนตัวเลือกโฮเวอร์ที่แตกต่างกัน



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
ซอของคุณไม่ได้ให้ผลลัพธ์ตามที่ตั้งใจไว้
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เพียงแค่เลือกลิงค์ง่ายๆเพียงแค่นั้น ดูคำจำกัดความของ:link: developer.mozilla.org/en-US/docs/Web/CSS/%3Alink
Cthulhu

@ Strive55 อ่าขอบคุณที่เข้าท่า ลิงก์ที่คุณให้ระบุว่า "ในการจัดรูปแบบลิงก์ให้เหมาะสมคุณต้องใส่: link rule ก่อนลิงก์อื่น ๆ ตามที่กำหนดโดย LVHA-order: link -: เยี่ยมชม -: hover -: active" ถ้าฉันเข้าใจถูกต้องนั่นหมายความว่าหากไม่มีตัวเลือกอื่นใดที่ใช้ (: เยี่ยมชม: โฮเวอร์หรือ: ใช้งานอยู่) ลิงก์จะเป็นตัวเลือกที่ใช้ได้ ในทางเทคนิคไม่ได้ตรงกันข้ามเพราะมี 4 ตัว แต่ก็ยังใช้งานได้
scripter

0

เพียงเพิ่มการเปลี่ยนแปลงและชื่อของแอนิเมชั่นในชั้นเรียนโดยไม่เป็นทางการในกรณีของคุณ 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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.