Bootstrap 4: Multilevel Dropdown Inside Navigation


Answer :

I use the following piece of CSS and JavaScript. It uses an extra class dropdown-submenu. I tested it with Bootstrap 4 beta.

It supports multi level sub menus.

$('.dropdown-menu a.dropdown-toggle').on('click', function(e) {   if (!$(this).next().hasClass('show')) {     $(this).parents('.dropdown-menu').first().find('.show').removeClass('show');   }   var $subMenu = $(this).next('.dropdown-menu');   $subMenu.toggleClass('show');     $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {     $('.dropdown-submenu .show').removeClass('show');   });     return false; });
.dropdown-submenu {   position: relative; }  .dropdown-submenu a::after {   transform: rotate(-90deg);   position: absolute;   right: 6px;   top: .8em; }  .dropdown-submenu .dropdown-menu {   top: 0;   left: 100%;   margin-left: .1rem;   margin-right: .1rem; }
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>  <nav class="navbar navbar-expand-lg navbar-light bg-light">   <a class="navbar-brand" href="#">Navbar</a>   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">     <span class="navbar-toggler-icon"></span>   </button>   <div class="collapse navbar-collapse" id="navbarNavDropdown">     <ul class="navbar-nav">       <li class="nav-item active">         <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>       </li>       <li class="nav-item dropdown">         <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">           Dropdown link         </a>         <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">           <li><a class="dropdown-item" href="#">Action</a></li>           <li><a class="dropdown-item" href="#">Another action</a></li>           <li class="dropdown-submenu">             <a class="dropdown-item dropdown-toggle" href="#">Submenu</a>             <ul class="dropdown-menu">               <li><a class="dropdown-item" href="#">Submenu action</a></li>               <li><a class="dropdown-item" href="#">Another submenu action</a></li>                 <li class="dropdown-submenu">                 <a class="dropdown-item dropdown-toggle" href="#">Subsubmenu</a>                 <ul class="dropdown-menu">                   <li><a class="dropdown-item" href="#">Subsubmenu action</a></li>                   <li><a class="dropdown-item" href="#">Another subsubmenu action</a></li>                 </ul>               </li>               <li class="dropdown-submenu">                 <a class="dropdown-item dropdown-toggle" href="#">Second subsubmenu</a>                 <ul class="dropdown-menu">                   <li><a class="dropdown-item" href="#">Subsubmenu action</a></li>                   <li><a class="dropdown-item" href="#">Another subsubmenu action</a></li>                 </ul>               </li>                </ul>           </li>         </ul>       </li>     </ul>   </div> </nav>


The following is MultiLevel dropdown based on bootstrap4. I tried it was according to the bootstrap4 basic dropdown.

.dropdown-submenu{     position: relative; } .dropdown-submenu a::after{     transform: rotate(-90deg);     position: absolute;     right: 3px;     top: 40%; } .dropdown-submenu:hover .dropdown-menu, .dropdown-submenu:focus .dropdown-menu{     display: flex;     flex-direction: column;     position: absolute !important;     margin-top: -30px;     left: 100%; } @media (max-width: 992px) {     .dropdown-menu{         width: 50%;     }     .dropdown-menu .dropdown-submenu{         width: auto;     } }
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>  <nav class="navbar navbar-toggleable-md navbar-light bg-faded">   <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">     <span class="navbar-toggler-icon"></span>   </button>   <a class="navbar-brand" href="#">Navbar</a>   <div class="collapse navbar-collapse" id="navbarNavDropdown">     <ul class="navbar-nav mr-auto">       <li class="nav-item active">         <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>       </li>       <li class="nav-item">         <a class="nav-link" href="#">Link 1</a>       </li>       <li class="nav-item dropdown">         <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">           Dropdown link         </a>         <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">           <li><a class="dropdown-item" href="#">Action</a></li>           <li><a class="dropdown-item" href="#">Another action</a></li>           <li class="dropdown-submenu"><a class="dropdown-item dropdown-toggle" data-toggle="dropdown" href="#">Something else here</a>             <ul class="dropdown-menu">               <a class="dropdown-item" href="#">A</a>               <a class="dropdown-item" href="#">b</a>             </ul>           </li>         </ul>       </li>     </ul>   </div> </nav>


Updated 2018

Here is another variation on the Bootstrap 4.1 Navbar with multi-level dropdown. This one uses minimal CSS for the submenu, and can be re-positioned as desired:

enter image description here

https://www.codeply.com/go/nG6iMAmI2X

.dropdown-submenu {   position: relative; }  .dropdown-submenu .dropdown-menu {   top: 0;   left: 100%;   margin-top: -1px; } 

jQuery to control display of submenus:

$('.dropdown-submenu > a').on("click", function(e) {     var submenu = $(this);     $('.dropdown-submenu .dropdown-menu').removeClass('show');     submenu.next('.dropdown-menu').addClass('show');     e.stopPropagation(); });  $('.dropdown').on("hidden.bs.dropdown", function() {     // hide any open menus when parent closes     $('.dropdown-menu.show').removeClass('show'); }); 

See this answer for activating the Bootstrap 4 submenus on hover


Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?