Rozwijane menu w Bootstrap 4

0

Witam serdecznie,

Mam menu w Bootstrap 4:


<nav class="navbar navbar-expand-lg text-body px-md-0 pb-md-0 navbar-light w-100">
                <a class="navbar-brand" href="/"><img src="{{ asset('img/logo.jpg') }}" class="pb-2"></a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarmenu"
                        aria-controls="navbarmenu" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon "></span>
                </button>

                <div class="collapse navbar-collapse" id="navbarmenu">
                    <ul class="navbar-nav">
                        <form class="mx-lg-5">
                            <div class="inner-addon rounded-0 navbar-search-form">
                                <i class="fa fa-search"></i>
                                <input type="text" class="form-control" placeholder="Szukaj produktu"
                                       aria-label="Szukaj produktu"/>
                            </div>
                        </form>
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" href="#" id="dropdown1" data-toggle="dropdown"
                               aria-haspopup="true"
                               aria-expanded="false">Kategorie <i class="fas fa-angle-down"></i></a>
                            <div class="dropdown-menu" aria-labelledby="dropdown01">
                                <a class="dropdown-item" href="#">Action</a>
                                <a class="dropdown-item" href="#">Another action</a>
                                <a class="dropdown-item" href="#">Something else here</a>
                            </div>
                        </li>
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" href="#" id="dropdown2" data-toggle="dropdown"
                               aria-haspopup="true"
                               aria-expanded="false">Dla klienta <i class="fas fa-angle-down"></i></a>
                            <div class="dropdown-menu" aria-labelledby="dropdown01">
                                @foreach($pagesMenu as $page)
                                    <a class="dropdown-item" href="/p/{{ $page->slug }}">{{ $page->title }}</a>
                                @endforeach
                            </div>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="{{ route('frontend.contact') }}">Kontakt</a>
                        </li>
                      
                    </ul>
                </div>
            </nav>

Chciałbym dodać do niego "pod menu" tj kolejne 4 poziomy (4 podkategorie). W jaki sposób można to zrobić?

0

Nie znam Bootstrapa, ale w gołym CSS da się to zrobić zdecydowanie mniej rozwlekle:

Dwa poziomy:
https://webkod.pl/kurs-css/lekcje/dzial-4/rozwijane-poziome-menu-css

Trzy poziomy:
https://webroad.pl/poradnik/menu-wielopoziomowe/
https://webroad.pl/html5-css3/610-rozwijane-menu-wielopoziomowe

2

W Bootstrap 4

.dropdown-submenu {
  position: relative;
}

.dropdown-submenu>a:after {
  content: "\f0da";
  float: right;
  border: none;
  font-family: 'FontAwesome';
}

.dropdown-submenu>.dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: 0px;
  margin-left: 0px;
}
<nav class="navbar navbar-expand-lg text-body px-md-0 pb-md-0 navbar-light w-100">
  <div class="container">
    <button type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbars" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div id="navbarContent" class="collapse navbar-collapse">
      <ul class="navbar-nav mr-auto">
        <!-- Level one dropdown -->
        <li class="nav-item dropdown">
          <a id="dropdownMenu1" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle">1</a>
          <ul aria-labelledby="dropdownMenu1" class="dropdown-menu border-0 shadow">
            <li><a href="#" class="dropdown-item">1</a></li>
            <li><a href="#" class="dropdown-item">2</a></li>
            <li class="dropdown-divider"></li>
            <li class="dropdown-submenu">
              <a id="dropdownMenu2" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="dropdown-item dropdown-toggle">3i</a>
              <ul aria-labelledby="dropdownMenu2" class="dropdown-menu border-0 shadow">
                <li>
                  <a tabindex="-1" href="#" class="dropdown-item">1</a>
                </li>
                <li class="dropdown-submenu">
                  <a id="dropdownMenu3" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="dropdown-item dropdown-toggle">2</a>
                  <ul aria-labelledby="dropdownMenu3" class="dropdown-menu border-0 shadow">
                    <li><a href="#" class="dropdown-item">1</a></li>
                    <li><a href="#" class="dropdown-item">2</a></li>
                  </ul>
                </li>
                <li><a href="#" class="dropdown-item">3</a></li>
                <li><a href="#" class="dropdown-item">4</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>
$(function() {

  $("ul.dropdown-menu [data-toggle='dropdown']").on("click", function(event) {
    event.preventDefault();
    event.stopPropagation();

    $(this).siblings().toggleClass("show");


    if (!$(this).next().hasClass('show')) {
      $(this).parents('.dropdown-menu').first().find('.show').removeClass("show");
    }
    $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
      $('.dropdown-submenu .show').removeClass("show");
    });

  });
});
0
purrll napisał(a):

W Bootstrap 4

.dropdown-submenu {
  position: relative;
}

.dropdown-submenu>a:after {
  content: "\f0da";
  float: right;
  border: none;
  font-family: 'FontAwesome';
}

.dropdown-submenu>.dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: 0px;
  margin-left: 0px;
}
<nav class="navbar navbar-expand-lg text-body px-md-0 pb-md-0 navbar-light w-100">
  <div class="container">
    <button type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbars" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div id="navbarContent" class="collapse navbar-collapse">
      <ul class="navbar-nav mr-auto">
        <!-- Level one dropdown -->
        <li class="nav-item dropdown">
          <a id="dropdownMenu1" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle">1</a>
          <ul aria-labelledby="dropdownMenu1" class="dropdown-menu border-0 shadow">
            <li><a href="#" class="dropdown-item">1</a></li>
            <li><a href="#" class="dropdown-item">2</a></li>
            <li class="dropdown-divider"></li>
            <li class="dropdown-submenu">
              <a id="dropdownMenu2" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="dropdown-item dropdown-toggle">3i</a>
              <ul aria-labelledby="dropdownMenu2" class="dropdown-menu border-0 shadow">
                <li>
                  <a tabindex="-1" href="#" class="dropdown-item">1</a>
                </li>
                <li class="dropdown-submenu">
                  <a id="dropdownMenu3" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="dropdown-item dropdown-toggle">2</a>
                  <ul aria-labelledby="dropdownMenu3" class="dropdown-menu border-0 shadow">
                    <li><a href="#" class="dropdown-item">1</a></li>
                    <li><a href="#" class="dropdown-item">2</a></li>
                  </ul>
                </li>
                <li><a href="#" class="dropdown-item">3</a></li>
                <li><a href="#" class="dropdown-item">4</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>
$(function() {

  $("ul.dropdown-menu [data-toggle='dropdown']").on("click", function(event) {
    event.preventDefault();
    event.stopPropagation();

    $(this).siblings().toggleClass("show");


    if (!$(this).next().hasClass('show')) {
      $(this).parents('.dropdown-menu').first().find('.show').removeClass("show");
    }
    $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
      $('.dropdown-submenu .show').removeClass("show");
    });

  });
});

Dzięki za odpowiedz :)

Zmontowałem coś takiego: http://serwer1356363.home.pl/_nauka/

Został mi drobiazg. Dlaczego po rozwinięciu Category=>Books jest taka duża przerwa pomiędzy Books a Comic Books i potem Comics i Marvel Comic Book?

0
baracadus napisał(a):

Dzięki za odpowiedz :)
Zmontowałem coś takiego: http://serwer1356363.home.pl/_nauka/
Został mi drobiazg. Dlaczego po rozwinięciu Category=>Books jest taka duża przerwa pomiędzy Books a Comic Books i potem Comics i Marvel Comic Book?

Nie wiem co dla Ciebie znaczy duża przerwa. Poeksperymentuj z .dropdown-item.

.dropdown-item {
    display: block;
    width: 100%;
    padding: .15rem 1.5rem;
    clear: both;
    font-weight: 400;
    color: #212529;
    text-align: inherit;
    white-space: nowrap;
    background-color: transparent;
    border: 0;
}

A dokładniej pewnie chodzi Ci o:

.dropdown-item {
    (...)
    padding: .15rem 1.5rem;
    (...)
}

https://developer.mozilla.org/en-US/docs/Web/CSS/padding

1 użytkowników online, w tym zalogowanych: 0, gości: 1