Consider an img
contained in a div
. (See example below.) I’d like onmouseenter
and onmouseleave
to trigger when the pointer enters and leaves an image, but instead they trigger when the pointer enters and leaves… the image’s container?!? How do I fix this?
Things that work but are unsuitable for my purposes:
- removing
width: 100%;
from the container’s styling - changing
object-fit: contain;
in the image’s styling
function mouse_entered() {
console.log("mouse entered!")
}
function mouse_left() {
console.log("mouse left!")
}
.image-container {
width: 100%;
height: 100vh;
}
.image {
width: inherit;
height: inherit;
object-fit: contain;
}
<div class="image-container">
<img src="https://lh3.googleusercontent.com/-s05ILbxi6YA/AAAAAAAAAAI/AAAAAAAAACc/yAd6W8jNSBI/photo.jpg?sz=256"
class="image"
onmouseenter="mouse_entered()"
onmouseleave="mouse_left()"
>
</div>
2
Answers
This issue is occurring because of the CSS. The img tag is stretched to fit the container because it inherits the properties. The JavaScript events are used correctly. However, it seems like it occurs on the containing div because the image expands the container’s area. If you use Chrome dev tools and hover over the elements it will make more sense. Here is the code I have updated. Please let me know if this works for you.
if you add a
background-color
to your<img>
element, you will see that it also uses100%
.also, consider using pointer events…
There is many ways to resolve this, like this one: