Адаптивні зображення
Конспект лекції: тег picture, атрибут srcset та оптимізація графіки для різних пристроїв
1. Тег picture
Тег <picture> дозволяє показувати різні зображення на різних пристроях. Це обгортка (як
<div>), яка сама нічого не відображає.
Структура
<picture>
<source
srcset="banner-mobile.webp 1x, banner-mobile-2x.webp 2x"
media="(max-width: 480px)"
>
<source
srcset="banner-desktop.webp 1x, banner-desktop-2x.webp 2x"
>
<img src="banner-desktop.webp" alt="Банер">
</picture>
Як це працює
<source>— аналог<img>, задає зображення черезsrcset- Атрибут
media— ті самі медіазапити, що й у CSS (min-width,orientationтощо) - Атрибут
srcset— список зображень із умовами (1x,2xдля щільності пікселів або320w,768wдля ширини) <img>в кінці — обов'язковий; потрібний для атрибутаaltта як fallback при проблемах із завантаженням
Коли використовувати
- Банери — горизонтальний банер на десктопі, вертикальний на мобільному
- Різні формати — WebP для сучасних браузерів, PNG/JPEG як fallback
- Різний вміст — детальне зображення на великому екрані, спрощене на маленькому
2. Атрибут srcset
Атрибут srcset можна використовувати як у <source>, так і безпосередньо в
<img>:
<img
src="photo.jpg"
srcset="photo.jpg 1x, photo-2x.jpg 2x, photo-3x.jpg 3x"
alt="Фото"
>
Дескриптори
1x,2x,3x— щільність пікселів (1x = звичайний екран, 2x = Retina)320w,768w— ширина зображення в пікселях (браузер обирає найкраще за шириною viewport)
Особливості кешування
Браузер кешує зображення і не «понижує» якість: якщо вже завантажено 2x-версію, при зменшенні вікна він не
завантажить 1x. Для тестування увімкніть Disable cache у DevTools.
SVG як адаптивне зображення
Всередині SVG-файлу можна писати медіазапити. Елементи SVG будуть показуватися або зникати залежно від розміру. Наприклад, іконка будинку: на маленькому екрані — спрощена, на великому — з деталями (вікна, двері).
3. Підсумкова таблиця
| Тема | Що запам'ятати |
|---|---|
<picture> |
Різні зображення на різних пристроях; <source> + media + srcset;
<img> обов'язковий
|
srcset |
Список зображень із дескрипторами: 1x/2x (щільність) або 320w/768w (ширина) |