DEV Community

Daniel - JS Craft
Daniel - JS Craft

Posted on

Using a CSS display none will still trigger an HTTP request for images

Let's say we have the following code:

<img src="cat.jpg" style="display:none" />
Enter fullscreen mode Exit fullscreen mode

This will still trigger the expensive HTTP call to get this image. This can be checked in Devtools - Network tab.

The image will still be requested even if we use a media query.

@media (max-width: 500px) {
    img {
        display: none; 
    } 
}
Enter fullscreen mode Exit fullscreen mode

And even in the case when an img is inside of a hidden parent, the request is still made.

<div class="hide">
    <img src="cat.jpg" />
</div> 
Enter fullscreen mode Exit fullscreen mode

However, using the image as a CSS background-image on a hidden div will not trigger the call.

<div style="hide">
    <div style="background: url(cat.jpg)"></div> 
</div> 
Enter fullscreen mode Exit fullscreen mode

I've discovered this while playing with the fun Request Quest made by Jake Archibald. It teaches you in a fun way how and when the requests are made for images. Also from a Javascript perspective. Good to know from a performance point of view.

Cool stuff ! :)

First published on http://www.js-craft.io/blog/using-a-css-display-none-will-still-trigger-an-http-request-for-images/

Top comments (2)

Collapse
 
alohci profile image
Nicholas Stimpson •

Good to know, but don't let it screw up your accessibility. If you want the image at all, then at some point you're going turn display:none off. With a background image, the unsighted users never going to know that the new information has been presented. With an img element, the alt value will let them know.

Collapse
 
js_craft_hq profile image
Daniel - JS Craft •

good point :) Thanks