How do I tell srcset attribute to load NO images when viewport smaller than certain size

load different images based on screen size
responsive image css tricks
srcset sizes
how to check if srcset is working
how to display different images in mobile and desktop devices
bootstrap change image size based on screen size
change image based on screen size javascript
srcset parameters

I'm having trouble understanding how to keep srcset from loading any images on screens < 768px.

I've tried the code below but the sizes attribute doesn't seem to do what you may think. Below loads 1024.jpg on all screen sizes:

<img 
  src="default.jpg"
  srcset="img/1024.jpg 1024w" 
  sizes="(min-width: 768px) 768px, 100vw"
/>

Or the picture element, if it would honor an empty srcset but it only "hints" to which image a browser should load.


The other answer isn't really satisfying. In general with srcset you give the browser the choice to select an image candidate. While you can assume which image is taken on certain devices. You don't have any control. Each image in srcset can be taken.

So if you want to control, what is used or not used, you need to use the picture element.

Here are 3 examples. If the viewport is 768px or wider the 'img/1024.jpg' image is downloaded, otherwise a data uri or a broken img is selected.

<picture>
  <!--[if IE 9]><video style="display: none;"><![endif]-->
  <source srcset="img/1024.jpg" media="(min-width: 768px)">
  <!--[if IE 9]></video><![endif]-->
  <img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Image">
</picture>

<picture>
  <!--[if IE 9]><video style="display: none;"><![endif]-->
  <source srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" media="(max-width: 768px)">
  <!--[if IE 9]></video><![endif]-->
  <img src="img/1024.jpg" alt="Image">
</picture>

<!-- you can also write (but this makes it invalid) -->

<picture>
  <!--[if IE 9]><video style="display: none;"><![endif]-->
  <source srcset="img/1024.jpg" media="(min-width: 768px)">
  <!--[if IE 9]></video><![endif]-->
  <img alt="Image">
</picture>

Although the first and the second code example are absolutely valid. There is currently some discussion to allow this by simply omitting the srcset (see code example 2). See this discussion here: https://github.com/ResponsiveImagesCG/picture-element/issues/243

HTML source srcset Attribute, There is currently some discussion to allow this by simply omitting the srcset (see To hint at a small image when the viewport is less than 768px, use max-width: desired size in this case 1 is closer to 511 than 1024 is not sure though Edit:  The third line is where we declare at which viewport widths we want a particular image to be downloaded. This is done using sizes attribute. This is where people commonly make mistakes. So it is important to fully understand the sizes attribute. It doesn’t tell the browser to download a certain image based on the width of the image parent container.


There's a really simple solution to this which works without <picture>. It is likely not intended to be used this way, but it works very well.

Attach a 1x1px image and it will be used whenever sizes == 0vw. In this case this would be true for everything under 768px:

<img 
  src="default.jpg"
  srcset="img/null.jpg 1w
          img/1024.jpg 1024w" 
  sizes="(max-width: 768px) 0vw, 100vw"
/>

I'm aware that this is not answering the OP's question of "loading NO images", but it's relatively close and you can reference the same 1x1 px image in all other situations, which means it's not gonna be downloaded there.

One caveat: In the following situation I believe the browser might decide to use the 1x1px image already from 512px and downwards even though we specify 100px

<img 
  src="default.jpg"
  srcset="img/null.jpg 1w
          img/1024.jpg 1024w" 
  sizes="(max-width: 100px) 0vw, 100vw"
/>

This is due to the fact that the browser takes whatever is closest to the desired size in this case 1 is closer to 511 than 1024 is... not sure though Edit: This situation could quite easily be fixed by attaching a 200w image as well, which you would likely do in any case

Preserve an Image's Aspect Ratio When Resized, Why you would use a Srcset attribute in an image tag? How do I handle this situation with srcset? I tried to be careful with that post title: “If you’re just changing resolutions, use srcset.” In this case, we’re changing the size of the images not just at certain resolutions, but at specific breakpoints as well, which means we’re also going to need to use the sizes attribute to get the


EDIT:

To say it simply, you can't.

Removing/hiding an image element must be done in CSS with media queries, or with Javascript.

The srcset and sizes tags are useful for choosing the content source of an image element, but it cannot control the existence or visibility of the element.

The srcset and sizes tags are intended to augment responsive CSS. Their values should follow whatever breakpoints are defined in CSS.


srcset

srcset is a list of available images the browser can choose from with their respective widths.

According to the latest spec, it will choose only from that list when populated:

For backwards compatibility, one of the URLs is specified in the img element's src attribute. In new user agents, the src attribute is ignored when the srcset attribute uses w descriptors.

Therefore, it sees 1024.jpg as the only choice and ignores default.jpg.

Add the default image to srcset (with the correct w descriptor - here I assume default.jpg is 768px wide):

<img 
  src="default.jpg"
  srcset="default.jpg 768w, img/1024.jpg 1024w" 
  sizes="(min-width: 768px) 768px, 100vw"
/>

sizes

sizes tells the browser how wide the image will be when a given media query is true. This helps the browser calculate which image to pick from srcset.

Currently, sizes="(min-width: 768px) 768px, 100vw" is telling the browser:

"The image will be 768px wide if the viewport is larger than 768px, otherwise the image will be full width when the viewport is less than 768px."

I assume you don't want to use a 1024px image when the viewport is less than 768px.

To hint at a small image when the viewport is less than 768px, use max-width: 768px instead:

<img 
  src="default.jpg"
  srcset="default.jpg 768w, img/1024.jpg 1024w" 
  sizes="(max-width: 768px) 768px, 100vw"
/>

Why you would use a srcset attribute in an image tag? Explain the , to low-end devices increase performance and decrease data wastage ( How to Build Responsive Images with srcset. image on a larger or smaller viewport. the sizes attribute then decides the size of the image to be displayed based on the width breakpoints we


Responsive Images: If you're just changing resolutions, use srcset , In this case, we're changing the size of the images not just at certain going to need to use the sizes attribute to get the most out of responsive images. the “​Desktop” version actually renders the images smaller (160px) than since at this viewport size, the sizes attribute is telling the browser we intend to  Next, you can check whether the srcset is working by setting the viewport width to what you want (set it to a narrow width, for example), opening the Network Inspector ( Tools > Web Developer > Network ), then reloading the page. This should give you a list of the assets that were downloaded to make up the web page,


Sometimes `sizes` is quite important., That's a wrap for responsive images — we hope you enjoyed playing with a large image on a screen significantly smaller than the size it was meant for. The srcset and sizes attributes look complicated, but they're not too hard their real viewport width for loading web pages (some mobile browsers lie  The sizes or media attributes are not required when using the pixel density descriptors, however, the actual 2x or 3x image does need to be two or three times larger. You can reduce the size of the scaled images even further by using the next generation image format, WebP. WebP format. Lastly, let us not forget about the WebP format.


Responsive images, Microsoft's Saurabh Kirtani explains how to build responsive images on the to load only the image as defined by the script, you'll end up with no srcset attribute; sizes attribute; picture element Now suppose we want a different size (height, width) image on a larger or smaller viewport. Find out more. The hero image will have to fix into a full viewport size (100vw and 100vh) and caters for all sorts of screen resolutions and orientation. Usually a object-fit: cover or background-size: cover will do the job, but most of the time the photos sent in from the clients require lots of 'nudging' to fit (meaning they aren't center focused).