Optimalizace obrázků pro mobilní zařízení
Optimalizace obrázků
Obrázky patří mezi největší příčiny zátěže webu na mobilních zařízeních. Správná optimalizace snižuje velikost přenášených dat, zlepšuje Core Web Vitals (LCP, CLS, INP), šetří baterii a zvyšuje konverze. Cílem je dodat správný obrázek (rozměry, formát, kvalita) správnému zařízení (DPR, šířka viewportu, podpora kodeků) ve správný čas (loading strategie, cache, priority).
Formáty: kdy použít AVIF, WebP, JPEG, PNG a SVG
- AVIF: nejvyšší komprese (fotografie, ilustrace), podpora HDR, alfa kanál; náročnější na enkódování a starší zařízení mohou mít omezenou podporu.
- WebP: dobrý poměr kvalita/velikost, široká podpora; vhodné pro většinu mobilních prohlížečů.
- JPEG/JPG: fallback pro starší prohlížeče; použijte progresivní JPEG, případně mozjpeg.
- PNG: bezeztrátová grafika, ostré hrany, alfa; šetřete pomocí pngquant a palet.
- SVG: ideální pro loga a ikony; škáluje bez ztráty ostrosti, možnost inline a stylování přes CSS.
Responzivní dodání: srcset, sizes a <picture>
srcset nabízí varianty podle šířky (w) a hustoty pixelů (x), sizes prohlížeči říká, jak široký bude obrázek ve viewportu. <picture> řeší art direction a formátovou preferenci.
<picture> <source type="image/avif" srcset="/img/hero-640.avif 640w, /img/hero-960.avif 960w, /img/hero-1280.avif 1280w" sizes="(max-width: 600px) 100vw, 600px"> <source type="image/webp" srcset="/img/hero-640.webp 640w, /img/hero-960.webp 960w, /img/hero-1280.webp 1280w" sizes="(max-width: 600px) 100vw, 600px"> <img src="/img/hero-960.jpg" srcset="/img/hero-640.jpg 640w, /img/hero-960.jpg 960w, /img/hero-1280.jpg 1280w" sizes="(max-width: 600px) 100vw, 600px" alt="Hrdinová fotografie produktu" width="600" height="400" loading="lazy" decoding="async"> </picture>
Rozměry, DPR a prevence CLS
Pro každý <img> definujte width a height (nebo aspect-ratio v CSS), aby si prohlížeč vymezil místo a předešel Cumulative Layout Shift. Připravte více variant pro běžné hustoty pixelů (1x, 2x, 3x) a šířky zlomů.
Prioritizace načítání: fetchpriority, preload a loading
- Hero LCP obrázek: použijte
fetchpriority="high"a<link rel="preload" as="image">. - Neviditelné pod přehybem:
loading="lazy"+decoding="async". - Správná doména:
<link rel="preconnect">ke CDN zkrátí handshake.
<link rel="preconnect" href="https://cdn.example.com" crossorigin> <link rel="preload" as="image" href="https://cdn.example.com/hero-1280.avif" imagesrcset="... 640w, ... 960w, ... 1280w" imagesizes="(max-width: 600px) 100vw, 600px">
Kompresní pipeline a parametry kvality
Automatizujte build: generujte varianty (šířky, DPR) a formáty. Typické výchozí kvality: AVIF ~30–45, WebP ~70–80, JPEG ~60–75; ověřujte vizuálně (SSIM/PSNR nejsou vše). Pro ilustrace použijte bezeztrátový WebP/AVIF s palette technikou.
Odstraňování metadat, barevné profily a gamma
Odeberte EXIF a nepotřebná metadata (GPS). Zachovejte nebo konvertujte barevné profily (sRGB) pro konzistentní zobrazení. U HDR pipeline dbejte na kompatibilitu a fallbacky do SDR.
CDN a edge transformace
Moderní CDN (Image CDN) provádí on-the-fly konverze formátů, změnu rozměrů, ořez, kvalitu, smart crop, konverzi do AVIF/WebP dle Accept hlavičky a nastavuje správné cache keys (šířka, DPR, formát). Udržujte Cache-Control a ETag/Last-Modified pro efektivní revalidate.
Umístění a vykreslovací strategie v CSS
Pro pozadí používejte image-set() a media dotazy. Preferujte object-fit pro korektní ořez v <img> kontejneru místo CSS pozadí, pokud jde o obsahový obrázek (lepší přístupnost a SEO).
.hero { background-image: image-set( url("/img/hero-640.avif") type("image/avif") 1x, url("/img/hero-640.webp") type("image/webp") 1x ); } img.cover { width: 100%; height: 40vh; object-fit: cover; }
Art direction vs. simple resize
Art direction znamená různé ořezy/kompozice pro různé breakpoints (např. mobilní výřez obličeje vs. desktopová šířka). Řešte pomocí <picture> s media atributy a odlišnými zdroji.
<picture> <source media="(max-width: 480px)" srcset="/img/portrait-tight.avif" type="image/avif"> <img src="/img/landscape-wide.jpg" alt="Portrét v různém výřezu"> </picture>
Optimální layout a contain mantinely
Vyhněte se oversized obrázkům v úzkých sloupcích. Použijte max-width: 100% a omezte rozměry kontejneru; u složitých layoutů pomáhá content-visibility a contain pro zlepšení renderingu v mobilních prohlížečích.
Lazy loading a odložené dekódování
loading="lazy" odkládá načtení mimo obrazovku. Přidejte decoding="async" pro neblokující dekódování a importance="low" (u některých prohlížečů). Používejte threshold sentinel v Intersection Observeru pro postupné nahrávání galerií.
Ikony a vektorová grafika
Preferujte SVG ikonografii. Pro raster fallback generujte @2x/@3x varianty. Icon fonts již nejsou ideální (přístupnost, ostré vykreslování, FOUT); SVG sprite nebo <use> je lepší cesta.
Generování posterů a blur-up technika
Pro hero obrázky a galerie využijte low-quality image placeholder (LQIP) nebo blurhash/SVG placeholder. U videí nastavte poster s optimalizovaným AVIF/WebP.
A/B testování kvality a datových úspor
Neexistuje univerzální kvalita; sledujte metriky (LCP, datová velikost, bounce, konverze) a testujte různé parametry komprese. Zaměřte se na mobilní sítě (3G/4G/5G, vysoká latence) a zařízení s omezenou pamětí.
Přístupnost: alt, role a sémantika
Obsahové obrázky vyžadují smysluplný alt text; dekorativní mohou mít prázdný alt="" nebo být v CSS. Nepřenášejte text do obrázků (zhoršení čitelnosti, SEO) – pokud musíte, přidejte aria-label či figcaption.
SEO a structured data
Správné alt, popisky, width/height, lazy loading jen mimo above-the-fold, image sitemap a structured data (např. ImageObject) pomáhají indexaci obrázků ve vyhledávačích.
Pipeline nástrojů: build, audit a automatizace
- Build: Sharp/Squoosh/Imaginary/Thumbor, CI generující varianty a formáty.
- Lint/audit: kontrola chybějících
width/height, přebývajících metadat, oversize vs. kontejner. - Monitoring: synthetic testy na mobilních profilech, RUM pro LCP/CLS/INP, velikost přenes. dat na session.
Specifika PWA a offline cache
Service Worker může před-cachovat klíčové obrázky pro offline (strategie stale-while-revalidate), avšak hlídejte limity úložiště. U galerií používejte range requests a cache-busting přes fingerprinty.
Dark mode, HDR a barevná věrnost
Pro tmavý režim zvažte alternativní obrázky (světlá vs. tmavá paleta) pomocí prefers-color-scheme v <picture>. U HDR zařízení testujte jas a gamut (Display-P3) s fallbackem na sRGB.
Konkrétní vzor pro komponentu obrázku
<!-- Reusable komponenta: mobile-first, bez CLS, s preferencí AVIF --> <picture class="media"> <source type="image/avif" srcset="/cdn/p/320.avif 320w, /cdn/p/480.avif 480w, /cdn/p/640.avif 640w, /cdn/p/960.avif 960w" sizes="(max-width: 640px) 92vw, 640px"> <source type="image/webp" srcset="/cdn/p/320.webp 320w, /cdn/p/480.webp 480w, /cdn/p/640.webp 640w, /cdn/p/960.webp 960w" sizes="(max-width: 640px) 92vw, 640px"> <img src="/cdn/p/640.jpg" width="640" height="427" alt="Náhled produktu" loading="lazy" decoding="async" style="max-width:100%;height:auto"> </picture>
Metriky a cílové hodnoty
- LCP (Largest Contentful Paint): < 2,5 s na mobilu; optimalizujte hero obrázek, preload, prioritu.
- CLS: < 0,1; vždy vymezte rozměry/obrazový poměr.
- Celková velikost médií na stránku: směřujte k < 1 MB na mobilu pro landingy; pro galerie použijte progresivní načítání.
Checklist pro produkční nasazení
- Pro každý obsahový obrázek definován alt, width/height a strategie lazy/priority.
- Varianty pro breakpointy a DPR, preferenční formát AVIF → fallback WebP → JPEG/PNG.
- CDN s Accept negotiation, správné cache headers a fingerprint v URL.
- Build generuje více šířek, kontrola oversized renderů a odstranění metadat.
- Audit LCP/CLS/INP na mobilních profilech a reálném RUM.
Závěr
Optimalizace obrázků pro mobilní zařízení je kombinací formátů nové generace, responzivního dodání, prioritizace, pevných rozměrů a inteligentní cache na okraji sítě. Důsledná automatizace ve buildu a observabilita v produkci zajistí, že obsah zůstane ostrý, rychlý a přístupný na celé škále zařízení i sítí.