Ondřej Šteigl - Logo ONDŘEJ ŠTEIGL
CSS

Jak udělat vyjížděcí menu

Ukážeme si dvě věci: rozbalovací podmenu (dropdown) a hamburger menu, které na mobilu vyjede pod ikonou ☰.

Čtení 5 min mírně pokročilý Naposledy upraveno 25. 9. 2026

Předtím: Web z více stránek

Tenhle díl navazuje na Jak udělat web z více stránek, kde máme společné menu. Teď z něj uděláme vyjížděcí menu. Předpokládám základy CSS – když si nejste jistí, mrkněte nejdřív na HTML a CSS za 15 minut.

Co budeme dělat

Ukážeme si dvě věci, které se často pletou pod jeden pojem „vyjížděcí menu":

1. Rozbalovací podmenu (dropdown)

Podmenu vložíme dovnitř položky, ke které patří. Kolem odkazu a jeho podmenu dáme obal <div class="has-sub">:

<nav class="menu">
  <a href="index.html">Domů</a>

  <div class="has-sub">
    <a href="sluzby.html">Služby ▾</a>
    <div class="sub">
      <a href="tvorba.html">Tvorba webů</a>
      <a href="udrzba.html">Údržba webů</a>
    </div>
  </div>

  <a href="kontakt.html">Kontakt</a>
</nav>

Teď to v CSS schováme a ukážeme až po najetí myší:

.has-sub { position: relative; }        /* kotva pro podmenu */

.sub {
  display: none;                        /* schované */
  position: absolute;
  top: 100%;                            /* hned pod položkou */
  left: 0;
  background: #fff;
  border: 1px solid #ddd;
  border-radius: 8px;
  box-shadow: 0 8px 20px rgba(0,0,0,.12);
  min-width: 160px;
}

.has-sub:hover .sub { display: block; } /* po najetí ukázat */
náhled – podmenu rozbalené po najetí

Co se tu děje: position: absolute vytáhne podmenu z toku stránky, aby nikoho neodsouvalo, a position: relative na obalu .has-sub říká „umísti ho vůči mně". Pravidlo .has-sub:hover .sub ukáže podmenu, jen když myš je nad položkou.

💡 Na dotykovém displeji (telefon) najetí myší neexistuje, takže čistě hover dropdown tam nefunguje spolehlivě. Na malých obrazovkách proto použijeme hamburger menu níže – a případné podmenu se v něm ukáže rovnou v seznamu.

2. Hamburger menu na mobilu

Princip: na počítači necháme menu v řádku, na mobilu ho schováme a místo něj ukážeme ikonu ☰. Klepnutí na ni menu vysune. Přepínání zařídí jeden řádek JavaScriptu, který přidává a odebírá třídu open:

<button class="ham"
  onclick="document.querySelector('.menu').classList.toggle('open')">
  ☰
</button>

<nav class="menu">
  <a href="index.html">Domů</a>
  <a href="sluzby.html">Služby</a>
  <a href="kontakt.html">Kontakt</a>
</nav>

A CSS, kde se pomocí @media chová menu jinak na úzké obrazovce:

.ham  { display: none; }              /* na počítači skryté */
.menu { display: flex; gap: 18px; }  /* menu v řádku */

@media (max-width: 600px) {
  .ham  { display: block; }          /* ukázat ikonu ☰ */
  .menu { display: none; }           /* menu schovat */
  .menu.open {                       /* po klepnutí na ☰ */
    display: flex;
    flex-direction: column;          /* položky pod sebou */
  }
}

Klíčové je classList.toggle('open'): když třída open na menu není, přidá ji (menu se zobrazí), a když tam je, odebere ji (menu se schová). Jedním klepnutím tak menu střídavě vyjede a zase se schová.

náhled na mobilu – zavřené
Můj web☰
náhled na mobilu – po klepnutí na ☰ (vyjeté)
💡 Hodnota 600px je tzv. breakpoint – hranice, kde se rozvržení přepne. Klidně si ji upravte podle toho, kdy se vám menu do řádku přestane vejít.

Časté chyby

Co dál?

Máte menu, které funguje na počítači i na mobilu. Vzhled (barvy, mezery, zvýraznění aktuální stránky) doladíte podle návodu Barvy, písmo a rozvržení v CSS. A pokud si chcete zopakovat, jak menu propojit napříč stránkami, vraťte se na Web z více stránek.

Nechcete web řešit sami a chcete ho mít hotový a profesionální?

Podívejte se na tvorbu webů →

© Ondřej Šteigl. Autorem návodů jsem já. Obsah je autorským dílem chráněným podle zákona č. 121/2000 Sb. (autorský zákon). Kopírování, přebírání nebo šíření bez mého předchozího písemného souhlasu je zakázáno. Výukové použití je vítáno – stačí uvést zdroj (osteigl.cz).

← Zpět na všechny návody