skeleton skrýnTakéSkeleton UI, Skeleton loader, Content placeholder, Shimmer effectZákladní
Definice
Skeleton screen je způsob zobrazení načítacího stavu, při kterém rozhraní ukáže šedé obrysy budoucího obsahu (bloky místo textu, obdélníky místo obrázků) namísto spinneru. Uživatel tak vidí strukturu stránky dřív, než dorazí data, čekání mu připadá kratší a po dokreslení obsahu nedochází k poskakování rozvržení.
Příklady z praxe
Výpis produktů v e-shopu
Kategorie načítá 24 produktů z API, které odpovídá zhruba za 800 ms. Místo prázdné bílé plochy se okamžitě vykreslí 24 karet s šedým obdélníkem místo fotky a dvěma řádky místo názvu a ceny. Karty mají pevnou výšku, takže po dorazení dat se stránka ani nehne a filtry vlevo nezmění pozici.
<article class="card" aria-hidden="true"> <div class="sk sk-img"></div> <div class="sk sk-line" style-less></div> </article> <p role="status">Načítám produkty…</p>Skeleton jako Suspense fallback v Reactu
Detail objednávky se skládá z rychlé hlavičky a pomalého seznamu položek, který čeká na platební bránu. Hlavička se vykreslí hned, seznam obalí hranice Suspense se skeletonem. Uživatel tak vidí číslo objednávky během desítek milisekund a poskakující tabulku dostane až hotovou.
export default function Order({ id }) { return ( <> <OrderHeader id={id} /> <Suspense fallback={<ItemsSkeleton rows={5} />}> <OrderItems id={id} /> </Suspense> </> ); }
Časté omyly
- MýtusSkeleton screen zrychlí načítání aplikace.
- Ve skutečnostiSkeleton screen nezrychlí nic: data dorazí ve stejnou chvíli jako předtím. Mění se jen vnímání čekání, protože uživatel má na co koukat a ví, jaká struktura přijde. Reálný výkon se řeší cachováním, menším payloadem a rychlejším dotazem.
- MýtusSkeleton je vždycky lepší než spinner.
- Ve skutečnostiSkeleton je lepší jen tam, kde je tvar výsledku předem známý. U akcí bez předvídatelného rozvržení (odeslání platby, generování PDF) je jasnější spinner s popiskem nebo progress bar s procenty.
- MýtusSkeleton stačí prohodit za obsah, o přístupnost se starat nemusím.
- Ve skutečnostiSkeleton je pro čtečku obrazovky prázdná změť prvků. Bez aria-hidden na dekoraci a bez živé oblasti s textovým stavem uživatel nepozná, že se něco načítá.
Časté dotazy
- Jak dlouho má být skeleton screen vidět, než se zobrazí obsah?
- Skeleton screen má smysl zobrazit až po krátké prodlevě, typicky 200 až 300 milisekund od začátku načítání. Pokud data dorazí dřív, skeleton jen problikne a působí jako grafická chyba. Zároveň se doporučuje minimální doba zobrazení, například 300 až 500 milisekund, aby se skeleton nezjevil a hned nezmizel. Nad zhruba třemi sekundami už skeleton přestává stačit a je vhodné doplnit textovou informaci o tom, na co se čeká, případně přejít na progress indikátor s reálným postupem.
- Jak skeleton screen ovlivňuje Core Web Vitals?
- Skeleton screen pomáhá hlavně metrice Cumulative Layout Shift, protože rezervuje přesné rozměry budoucího obsahu a stránka po načtení dat nepodskočí. Vliv na Largest Contentful Paint je nejednoznačný: šedé bloky se obvykle za největší obsahový prvek nepočítají, takže LCP se řídí až skutečným obrázkem nebo textem. Skeleton tedy metriky sám o sobě nevylepší, pokud je server pomalý. Nejvíc se vyplatí kombinace: skeleton pro stabilní rozvržení a skutečná optimalizace dotazů, cache a velikosti obrázků.
- Čím se skeleton screen liší od placeholderu typu blur-up u obrázků?
- Skeleton screen zastupuje celou strukturu rozhraní, tedy nadpisy, řádky textu i pozice karet, a nenese žádnou informaci o skutečném obsahu. Blur-up placeholder naopak ukazuje rozmazanou miniaturu konkrétního obrázku, kterou prohlížeč postupně nahradí ostrou verzí. Obě techniky se dají kombinovat: karta produktu má skeleton pro text a cenu, zatímco pro fotku použije rozmazaný náhled o velikosti pár set bajtů. Společný cíl je stejný, tedy rezervovat prostor a zabránit poskočení rozvržení.
- Musím si skeleton screen psát ručně, nebo existují hotová řešení?
- Skeleton screen se dá napsat ručně několika řádky CSS: barevné pozadí, zaoblené rohy, pevné rozměry a volitelně animace přes keyframes. Většina komponentových knihoven ale nabízí hotový prvek, například MUI Skeleton, Chakra Skeleton nebo utility třídy v Tailwindu s animací pulse. Existují i nástroje generující skeleton automaticky ze snímku hotové komponenty. Ruční řešení je bezpečnější v tom, že rozměry odpovídají reálnému obsahu, což je u skeletonů to nejdůležitější.
Zdroje
- Cumulative Layout Shift (CLS)(otevře se v novém okně)
- prefers-reduced-motion(otevře se v novém okně)
- ARIA live regions(otevře se v novém okně)
- <Suspense>(otevře se v novém okně)
- Web Content Accessibility Guidelines (WCAG) 2.2(otevře se v novém okně)