Przejdź do głównej treści
Grafika przedstawia ukryty obrazek

Tworzenie MegaMenu w Bootstrap 5 — kompletny przewodnik

Zdjecie zwiazane z Tworzenie MegaMenu w Bootstrap 5  kompletny przewodnik

1. Wprowadzenie

MegaMenu to rozszerzony dropdown, który wyświetla wiele kolumn, sekcji lub zakładek w jednym rozwijanym panelu. Bootstrap 5 nie zawiera go w standardzie, ale dzięki klasom utility (np. position-static, d-flex, row, col-*) można łatwo zbudować responsywne i dostępne megamenu.

2. Podstawowy szablon dropdown

Bootstrapowy dropdown wygląda tak:

<li class="nav-item dropdown">
  <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">
    Projekty i aplikacje
  </a>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="#">Projekt 1</a></li>
    <li><a class="dropdown-item" href="#">Projekt 2</a></li>
  </ul>
</li>

To dobra baza — teraz rozbudujemy ją w kierunku megamenu.

3. Ustawienie dropdowna na pełną szerokość

Użyjemy klasy position-static, aby dropdown nie był „pozycjonowany” względem rodzica, oraz w-100, aby zajmował całą szerokość kontenera.

<li class="nav-item dropdown position-static">
  <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">
    Projekty i aplikacje
  </a>
  <div class="dropdown-menu w-100 mt-0 border-0 shadow p-3">
    <div class="container">
      <div class="row">
        <div class="col-lg-3">
          <h6 class="text-uppercase">Projekty</h6>
          <ul class="list-unstyled">
            <li><a href="#" class="dropdown-item">Cube Builder</a></li>
            <li><a href="#" class="dropdown-item">Randki++</a></li>
            <li><a href="#" class="dropdown-item">Moduły Koseven</a></li>
          </ul>
        </div>
        <div class="col-lg-3">
          <h6 class="text-uppercase">Aplikacje</h6>
          <ul class="list-unstyled">
            <li><a href="#" class="dropdown-item">YAML Tester</a></li>
            <li><a href="#" class="dropdown-item">Markdown Tester</a></li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</li>

Teraz dropdown otwiera panel z kolumnami jak w megamenu.

4. Dodanie zakładek (tabs)

Aby użytkownik mógł przełączać sekcje (np. „Wszystko”, „Najlepsze projekty”, „Blog”), wstawiamy Bootstrap Tabs wewnątrz dropdown-menu.

<div class="dropdown-menu w-100 p-3 shadow">
  <ul class="nav nav-tabs mb-3" id="megamenuTabs" role="tablist">
    <li class="nav-item">
      <button class="nav-link active" id="all-tab" data-bs-toggle="tab" data-bs-target="#all" type="button">Wszystko</button>
    </li>
    <li class="nav-item">
      <button class="nav-link" id="best-tab" data-bs-toggle="tab" data-bs-target="#best" type="button">Najlepsze projekty</button>
    </li>
    <li class="nav-item">
      <button class="nav-link" id="apps-tab" data-bs-toggle="tab" data-bs-target="#apps" type="button">Polecane aplikacje</button>
    </li>
  </ul>

  <div class="tab-content">
    <div class="tab-pane fade show active" id="all">
      <!-- zawartość jak w sekcji kolumn -->
    </div>
    <div class="tab-pane fade" id="best">
      <!-- karty projektów -->
    </div>
    <div class="tab-pane fade" id="apps">
      <!-- karty aplikacji -->
    </div>
  </div>
</div>

5. Dodanie kart projektów i aplikacji

Bootstrap 5 ma gotowe klasy card. Aby przycisk w każdej karcie był wyrównany do dołu, użyjemy d-flex flex-column i mt-auto.

<div class="row g-3">
  <div class="col-md-4">
    <div class="card h-100 d-flex flex-column">
      <img src="https://via.placeholder.com/300x120.png?text=Cube+Builder" class="card-img-top" alt="">
      <div class="card-body d-flex flex-column">
        <h5 class="card-title">Cube Builder</h5>
        <p class="card-text flex-grow-1">Twórz własne pliki LUT z łatwością.</p>
        <a href="#" class="btn btn-outline-primary mt-auto align-self-start">Zobacz więcej</a>
      </div>
    </div>
  </div>
  <!-- powtórz 3x -->
</div>

6. Zatrzymanie zamykania megamenu po kliknięciu w tab

Domyślnie Bootstrap zamyka dropdown po każdym kliknięciu. Dodaj prosty JS:

<script>
  document.querySelectorAll('.dropdown-menu .nav-tabs button').forEach(tab => {
    tab.addEventListener('click', e => e.stopPropagation());
  });
  document.querySelectorAll('.dropdown-menu .tab-content').forEach(content => {
    content.addEventListener('click', e => e.stopPropagation());
  });
</script>

7. Opcjonalnie: otwieranie megamenu po najechaniu (hover)

<script>
  const dropdown = document.querySelector('.nav-item.dropdown');
  dropdown.addEventListener('mouseenter', () => {
    const menu = new bootstrap.Dropdown(dropdown.querySelector('[data-bs-toggle="dropdown"]'));
    menu.show();
  });
  dropdown.addEventListener('mouseleave', () => {
    const menu = new bootstrap.Dropdown(dropdown.querySelector('[data-bs-toggle="dropdown"]'));
    menu.hide();
  });
</script>

8. Responsywność i styl

Możesz dodać kilka poprawek CSS dla lepszego UX:

@media (max-width: 991px) {
  .dropdown-menu {
    position: static !important;
  }
}
.dropdown-menu {
  border-radius: 0.75rem;
  border: 1px solid rgba(0,0,0,.1);
}
.nav-tabs .nav-link {
  font-weight: 500;
}

9. Pełny przykład działającego megamenu

Zobacz działający przykład

10. Podsumowanie

Część Cel
position-static Rozciąga megamenu na szerokość kontenera
w-100 + container Pełna szerokość, zachowana responsywność
nav-tabs + tab-content Zakładki wewnątrz megamenu
card h-100 flex-column Karty z przyciskiem na dole
JS stopPropagation() Zapobiega zamykaniu menu po kliknięciu
JS hover Otwarcie po najechaniu kursorem
7 listopada 2025 10

Kategorie

programowanie

Dziękujemy!
()

Powiązane wpisy

Ilustracja tematu Automatyczny motyw Bootstrap 53 na bazie pory dnia
4 stycznia 2025 6 min 71

Automatyczny motyw Bootstrap 5.3 na bazie pory dnia

Czytaj więcej
Obraz ilustrujacy Dlaczego warto zainwestowa w stron internetow na frameworku MVC
3 lutego 2025 2 min 22

Dlaczego warto zainwestować w stronę internetową na frameworku MVC?

Czytaj więcej
Wizualizacja tematu Ukad Masonry w Bootstrap 53 z wykorzystaniem komponentw Card
17 lutego 2025 6 min 33

Układ Masonry w Bootstrap 5.3 z wykorzystaniem komponentów Card

Czytaj więcej
Wymiana doświadczeń

Masz podobne doświadczenia?

Chętnie poznam Twoją perspektywę i porozmawiam o tym temacie szerzej.

Napisz do mnie

Każda perspektywa może wnieść coś wartościowego do dyskusji.

Twoja prywatność i pliki cookies

  1. Ta strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania – m.in. do poprawnego wyświetlania treści, zapamiętania podstawowych ustawień przeglądarki oraz zapewnienia stabilności serwisu.
  2. Nie stosuję plików cookies w celach marketingowych, reklamowych ani analitycznych.
  3. Strona ma charakter wyłącznie informacyjny i nie zawiera formularzy kontaktowych, rejestracyjnych ani zakupowych, przez które dane mogłyby być przesyłane na serwer.
  4. Nie zbieram danych osobowych podczas zwykłego korzystania z witryny.
  5. Serwis nie korzysta z certyfikatu SSL, jednak ze względu na informacyjny charakter strony nie jest wymagane przesyłanie poufnych danych. Zalecam jednak, aby nigdy nie wpisywać haseł ani danych osobowych na stronach bez szyfrowanego połączenia.
  6. Korzystając z tej strony, wyrażasz zgodę na używanie wyłącznie niezbędnych plików cookies.

Więcej informacji znajdziesz w mojej polityce prywatności.