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:
width: 100%;
from the container's stylingobject-fit: contain;
in the image's stylingfunction 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>
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.
function mouse_entered() {
console.log("mouse entered!")
}
function mouse_left() {
console.log("mouse left!")
}
.image-container {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
}
.image {
max-width: 100%;
max-height: 100%;
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>