Eric Eggert · AccessU 2018 ·
Web Accessibility Specialist @
Knowbility (Assessments, Teaching)
50% W3C Fellow → WAI/EOWG
img
element
alt
attributesrcset
attribute for Display Densitysrcset
attribute for Width Descriptionssizes
attributepicture
element
type
attribute5144×1698px
>11 1024×768px monitors!
410kb
320×240px @ 164ppi
>113 phones (!sic) needed to display the high res image at full size
img
element<img src="cat-image.jpg"
alt="Cute cat">
alt
attributeThe alternative text (alt
) describes an image in a way that the purpose or content of the image is clear without seeing the image.
img
element is the base of everything in responsive imagesimg
?iPhone 1–3GS: 320×480px @ ~165ppi
iPhone 4/4s: 640×960px @ ~330ppi
2×
iPhone 5/5s: 640×1136px @ ~326ppi
2×
iPhone 6: 750×1334px @ ~326ppi
iPhone 6 Plus:
1080×1920px @ ~401ppi
3×
2×
srcset
<img srcset="watch.jpg, watch-2X.jpg 2x,
watch-3x.jpg 3x, […], watch-16x.jpg 16x">
If we take our watch image and base it on a 320px width for 1x resolution, we’d come up with this:
*You remember that flexible images are a core principle of RWD, right?
srcset
Browsers fetch images before they know how the website actually looks to make the web faster. Browser use the viewport width.
sizes
FTW!sizes
is required(when using width descriptors)
<img src="cat.jpg" alt="cat"
srcset="cat-160.jpg 160w, cat-320.jpg 320w, cat-640.jpg 640w, cat-1280.jpg 1280w"
sizes="(max-width: 480px) 100vw, (max-width: 900px) 33vw, 254px">
Subset of media queries:
(max-width: 480px)
or (min-width: 480px)
Often expressed in viewport width (vw) unit
1vw is 1% of the width of the viewport
33vw = 33% of the viewport
Can also be px, em, %
calc() can be used (for example for calculating margins)
http://scottjehl.github.io/picturefill/
<picture>
<picture>
<source media="(min-width: 900px)"
srcset="cat-vertical.jpg">
<source media="(min-width: 750px)"
srcset="cat-horizontal.jpg">
<img src="cat.jpg" alt="cat">
</picture>
Picture wrapper
Media Queries
Multiple Sources
img required
media
attribute = media querymedia
attribute is a directive, not a suggestion<picture>
<source srcset="homepage-person@desktop.png,
homepage-person@desktop-2x.png 2x"
media="(min-width: 990px)">
<source srcset="homepage-person@tablet.png,
homepage-person@tablet-2x.png 2x"
media="(min-width: 750px)">
<img srcset="homepage-person@mobile.png,
homepage-person@mobile-2x.png 2x"
alt="Shopify Merchant, Corrine Anestopoulos">
</picture>
When the image was variable width instead of fixed width, width descriptors and sizes could have been used as well.
type
This attribute lets you assign different image formats.
<picture>
<source type="image/svg+xml"
srcset="logo.xml">
<source type="image/webp"
srcset="logo.webp">
<img src="logo.png" alt="ACME Corp">
</picture>
Unless art direction, no media
JPEG 2000 | JPEG-XR | PNG | WEBP | |
---|---|---|---|---|
320×240 | 2K | 22.6K | 55.2K | 112.1K |
600×450 | 13.5K | 48.5K | 14.3K | 26.6K |
1024×768 | 19.2K | 95.7K | 325.7K | 56K |
(again)
Doesn’t understand source elements unless in a video element.
<picture>
<!--[if IE 9]><video style="display: none;"><![endif]-->
<source srcset="extralarge.jpg" media="(min-width: 1000px)">
<source srcset="large.jpg" media="(min-width: 800px)">
<!--[if IE 9]></video><![endif]-->
<img srcset="medium.jpg" alt="A giant stone face at
The Bayon temple in Angkor Thom, Cambodia">
</picture>
picture
.
<img src="…" alt="…">
* And you still want to use it because it has other advantages
✅ Wide Browser Support
➡️ Inconsistent Implementation
➡️ Unfulfilled Opportunities
❌ Open Issues: image-set in CSS, responsive images in SVG, client hints
Eric Eggert
Knowbility, yatil.net, @yatil
https://slides.com/yatil/2018-accessu-images