Moderní tvorba webových aplikací

O webu

Jak vytvořit fixovaný banner?

JavaScriptové řešení prvku, který při rolování zůstane stále viditelný.

3 minuty

Některé prvky na stránce může být vhodné umístit s fixní posicí. Zajistí se tím to, že budou stále viditelné.

Smysl to může mít pro:

  1. důležité navigační prvky,
  2. odkazy pro sdílení stránky na sociálních sítí,
  3. reklamy / reklamní bannery

Umístit něco fixovaně není žádný kumšt:

element {position: fixed}

… a je to. Co ale v případě, že má element mít nejprve nějakou normální posici? Přijde na řadu JavaScript, který v momentě, kdy daný prvek začne mizet, přepne posici na fixovanou.

Řešení

  1. Při rolování stránky (window.onscroll)
  2. se porovná o kolik je odrolováno (scrollTop) s posicí elementu (offsetTop)
  3. a podle toho se (ne)nastaví třída, která element zafixuje (díky tomu lze i fixovanému elementu velmi snadno měnit vzhled).

CSS

.sidebar {position: absolute; right: 0; top: 100px}
.sidebar div {background: #0D6AB7; text-align: center; width: 120px; height: 600px; }
.sidebar .fixed {position: fixed; right: 0; top: 0}

HTML

<div class='sidebar'>
	<div id="sidebar">
		(Obsah)
	</div>
</div>

JavaScript

Druhá část podmínky (za &&) porovnává výšku fixovaného boxu s výškou okna. Asi nemá smysl v takovém případě fixovat.

var sidebar = document.getElementById('sidebar');
window.onscroll = function () {
  sidebar.className = (
    document.documentElement.scrollTop + document.body.scrollTop > sidebar.parentNode.offsetTop
    && document.documentElement.clientHeight > sidebar.offsetHeight
  ) ? "fixed" : "";
}

Možná úskalí

CSS vlastnost fixed vztahuje umístění elementu k oknu prohlížeče, nikoliv k nejbližšímu elementu s absolutní/relativní posicí.

Související články

Detekce otevření DevTools

Jak zjistit, že se na stránce otevřely vývojářské nástroje.

13 minut

JavaScript null a undefined

Rozdíly mezi null a undefined v JavaScriptu, kdy je používat a jak se vyhnout běžným chybám.

12 minut

Sleep v JavaScriptu

Jak implementovat sleep/delay funkcionalitu v JavaScriptu pomocí Promise a async/await

6 minut

JavaScript Battery API

Jak v JS zjistit stav baterie, co dnes funguje a kdy API nepoužívat.

3 minuty

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025