Poskakování stránky

Je poměrně častý jev, že webové stránky během načítání všelijak poskakují, jak se stahují a zpracovávají jednotlivé připojené soubory.

Před načtením a zpracováním zejména obrázků a skriptů může web vypadat nějak takto:

Před načtením

Když se další obsah dotáhne, stránka do finálního zobrazení.

Ačkoliv je poskakování častý nešvar, existují možnosti, jak proti němu bojovat.

Proč poskakování vadí

  1. Překreslování – prohlížeč musí tentýž obsah vykreslit vícekrát s ohledem na to, jak se mu mění pod rukama.

    To stojí nějaký čas a výkon navíc.

  2. Visuální dojem – poskakování prvků stránky není úplně estetické, takže nebude lahodit oku návštěvníka.

  3. Matení návštěvníka – velké změny stránky během načítání mohou být až matoucí. S ohledem na možnou nespolehlivost zejména mobilního internetového připojení se obrázky/skripty mohou načíst za hodně dlouhou dobu nebo třeba vůbec.

    V případě dlouhého načítání se už může návštěvník do webu začíst (někam odroluje) a po donačtení obsahu a změny výšky stránky bude najednou někde jinde.

Jak zjistit, že stránka poskakuje

Pro rychlý orientační přehled stačí na stránce vypnout obrázky a JavaScript a výsledek porovnat s plnou podobou webu.

Blokovat JS/obrázky v Chrome jde následovně:

Blokování obrázků a JavaScriptu

V ideálním případě by si měly být obě varianty co možná nejpodobnější. Případně by prvky závislé na načtení obrázků/skriptů neměly ovlivňovat okolí.

Před načtením

Co poskakování způsobuje

Obrázky

Nejčastější příčinou bývají obrázky. Pokud se obrázek vloží do stránky značkou <img> bez uvedení rozměrů v HTML atributech nebo CSS, jeho velikost na stránce bude prohlížeč vědět až po stažení souboru obrázku. Logicky tak nejde dopředu na stránce vyhradit místo.

Nejsnazší řešení je přidat rozměry do atributů width a height:

<img src="obrazek.png" width="100" height="100">

Problém ale nastává v případě responsivních obrázků. Zde je žádoucí, aby se rozměry obrázku dopočítaly podle dostupného prostoru (např. šířka okna).

img {
  max-width: 100%;
  height: auto;
}

Nějaké jednoduché řešení neexistuje. Pokud je znám poměr stran (výšky a šířky), je možné si pomoci obalovým elementem:

JavaScripty

Častým jevem je poskakování při použití JS, který významně modifikuje stránku. Například kolotoče (carousely), přepínání obsahu v záložkách nebo skrývání a odkrývání bloků.

Je dobré si takovéto prvky projít s vypnutým JavaScriptem a ověřit, že neposkakují.

Problematické prvky je potřeba zvlášť nastylovat pro situaci s ještě nenačteným JS. Ideální je detekovat dostupnost skriptování například nahrazením značky <body> za:

<body class="no-js">
<script>
    document.body.className = document.body.className.replace('no-js', 'js');
</script>

V CSS jde potom psát .js .trida {} pro ovlivnění vzhledu elementů, které teprve čekají na načtení externího JS.

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Změna barvy lišty v mobilních prohlížečích

Barva horní lišty v mobilním prohlížeči

Jak obarvit záhlaví mobilního prohlížeče, aby ladilo se stránkou.

Responsivní web

Jak na mobilní (responsivní) web

Jak a proč vytvářet mobilní versi webu – responsive web.

Pro které prohlížeče optimalisovat

Pro jaké prohlížeče ladit svůj web

Jak určit, pro které prohlížeče webovou stránku optimalisovat.

Stránkování

Stránkování

Jak správně řešit stránkování na webové stránce.

Nekonečné rolování

Nekonečné scrollování

Je lepší nekonečné rolování, klasické stránkování nebo tlačítko „Zobrazit další“?

Komentáře