JSFiddle - React, Tailwind, and code Playground
HTML
<main>
<p>
This is a test.
</p>
<ul>
<li>
<img src="https://picsum.photos/300/200">
</li>
<li>
<img src="https://picsum.photos/300/200">
</li>
<li>
<img src="https://picsum.photos/300/200">
</li>
</ul>
</main>
CSS
* { box-sizing: border-box; }
main {
overflow: hidden;
--image-width: 300px;
--image-height: 200px;
}
ul {
display: flex;
flex-flow: row nowrap;
margin: 0;
padding: 0;
overflow-x: scroll;
overflow-y: clip;
}
li {
flex-shrink: 0;
flex-grow: 0;
list-style-type: none;
width: var(--image-width);
height: var(--image-height);
}
li img {
width: var(--image-width);
height: var(--image-height);
}
li img:hover {
position: fixed;
transform: scale(1.5);
}
JavaScript
let list = document.querySelector('ul');
let imgs = document.querySelectorAll('img');
imgs.forEach(i => {
i.addEventListener('mouseenter', event => {
let l = i.offsetLeft - list.scrollLeft;
requestAnimationFrame(ts => {
i.style.left = l + 'px';
});
});
i.addEventListener('mouseleave', event => {
requestAnimationFrame(ts => {
i.style.left = 'auto';
});
});
});