I found myself needing to hide some images on mobile, but not on desktop AND without using the loading="lazy" attribute. The reasoning behind not using loading="lazy" is related to CLS and isn’t worth getting into. The workaround that I found was to use the <picture> element and then load a 1x1 pixel transparent image using a base64 encoded gif. TLDR; here’s the code:

<picture>
	<source media="(max-width: 991px)" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==">
	<source media="(min-width: 992px)" srcset="https://via.placeholder.com/130x130">
	<img src="https://via.placeholder.com/130x130" alt="Placeholder Image" />
</picture>

I first tried using a png instead of a gif, but found the gif saved about 12 extra bytes.

I came up with this solution myself, but after some further research I found someone else wrote an article about this as well. Here’s a link to their solution.