Preloading in CSS doesn't really mean that the file is loading in front of everything else, it just means that the first resource will be queued for loading from your CSS file.
This means that your HTML has already been extracted from the server and probably already queued or loaded other resources before CSS. It is not uncommon for CSS pre-loaded images to load after all HTML content.
Now, when the image will be in the queue earlier than other resources specified in CSS, this does not mean that it returns to these other resources. If the file size is larger than other files in the queue, downloading may take longer than other files that are downloading at the same time.
One way to see what happens with Chrome is to go to your web page and go to the Network tab in Chrome Devtools, and then refresh the page. It will show you information about when each item is loaded and how long this item is taken to receive from the server.
Depending on which image you are loading and using, there are several other options.
1) If the file size is large and too long to download, find out how to reduce the file size.
2) If you have control over the page from which the user is navigating, you can pre-select the image for the cache on the previous page.
3) You can also try using HTML preloading in addition to CSS. HTML preloading, in my opinion, is only supported by Chrome at the moment, so it might be perfect for this scenario. Add the following to your html head.
<link rel="preload" as="image" href="image1.svg"> <link rel="preload" as="image" href="image2.svg">
source share