I'm trying to figure out how srcset
and sizes
work in HTML, but I'm not able to understand why a specific image instead of another one is chosen. Can anyone help me? I don't know any other place to ask.
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (9)
I don't know if you're being serious or not.
The best example is responsive images, you can see an example at MDN Docs
The idea is... you have a set of sources (in this case, images in different sizes) that you control with CSS (
media queries
).But let's use the example from MDN:
Notice the different images in the
set
ofsrc
?Well, that's your
srcset
!In this example the author is using the CSS queries within the
<img>
tag with the attributesizes
.Let's transform it into a tiny CSS:
I'm using
img
as a selector.Another thing, you might ask:
"Why is the author setting the size to
280px
and the image has a width of 320px"? That's - IMO - a way to avoid distortion (I can imagine some others explanations, but that's is the most simple).Anyway, take a few minutes to read the link I sent you and search the web for "responsive image srcset example" and you'll get some way better explanation that I just gave you!
(I'm on mobile and kinda in a hurry, but feel free to hit me up!)
I hope I cleared the path a little.
I'm serious. For example:
Why
rufy2.jpg
is shown when the viewport is 1200 pixels wide?You're not matching the size of the
srcset
with themax-width
you want insizes
. In your code to showrufy1
the viewport should be at least850w
, otherwise the browser will follow the second rule.With your
srcset
you wantrufy1
when the viewport has a max width of 600px andrufy2
when the viewpoert has a max width of 2900px. In order to accomplish it:Basically, the value (not the image, the number) from
srcset
will be yout rule to the media-query.With your rules for
max-width
the first image would have awidth: 680px
and the second one amax-width: 799px
.rufy2
is being shown because1200px
is higher than the first rulemax-width: 600px
.EDIT:
If you want a fallback image in case none of the rules are met, you can use this new approach:
With this syntax you are specifying each source to a rule, notice the
media
andsrcset
attributes inside each<source>
, and in case none of the rules apply, it falls back to the<img>
Here's an example
Ok, but the width of the slot when the viewport is 1200px is written to be 799px, and 850w is closer to 799px than 900w, so I think that
rufy1.jpg
should be shown. I wasn't able to understand, Tiago. Sorry, but can you help me with one more snippet?Why is
jinbe.png
always shown when I resize the browser window?What is the expected output in this example? It seems like you're struggling with CSS and precedence.
It sounds trivial but that is what CSS (Cascading Style Sheets) is, I can't stress enough to read about it.
With these rules you're saying:
Confusing, isn't? I'd recommend read an article on responsive design, as you can see it can become a pain.
In any case, I copied and paste your code into a pen just changing to dummy images and it seems to be working? Can you try it?
Let's review the queries:
Here's the browser at 1200px
Here's at 1000px
Finally at 900px
It doesn't work here. Tiago, could I write directly to you privately in any way, maybe a chat?
Sure! Hit me up!
Where?
~I'l DM ai Twitter~
Better yet, I sent you an email