You need position fixed not absolute to get it centered on the viewport rather than on the body.
But you also need to make sure the the img is not a child of another transformed etc. element beneath body otherwise it will position fixed to that. See MDN
Here’s a simple example of making sure the img is centered on the viewport:
const img = document.querySelector('img');
const button = document.querySelector('button');
button.addEventListener('click', function() {
img.classList.toggle('hide');
});
img {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 20vw;
}
img.hide {
display: none;
}
<img src="https://picsum.photos/id/1015/200/300">
<button>Click to hide/unhide the image</button>
Note that there are several ways of hiding an element: display none which removes it more or less entirel; visibility hidden which keeps the space it was occupying – though in this case it does not matter in the way it would if the element were not fixed.
solved How to center an hidden/visible element so it always shows up in the middle of the screen?