【问题标题】:How to pull dropdown submenu to the left side in Bootsrap 4如何在 Bootstrap 4 中将下拉子菜单拉到左侧
【发布时间】:2020-12-31 12:46:13
【问题描述】:

我正在使用 Bootstrap 4,并且我有如下多级下拉菜单:

我想把子菜单拉到左边。所以它目前显示的另一面。我使用了多个类,例如dropdown-menu-leftpull-leftdropleft,但没有改变拉子菜单的方向。 我还覆盖了下拉菜单类,但结果相同。

.dropdown-menu {
  left: auto;
  right: 0;
}

任何建议请在 Boostrap 4 中将子菜单拉到左侧的正确类是什么?我在这里尝试了其他线程的解决方案,但它对我不起作用。非常感谢。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Bootstrap 4 Navbar With Multilevel Dropdowns Example</title>
    <link href="https://www.jqueryscript.net/css/jquerysctipttop.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.3.1/lumen/bootstrap.min.css">

    <style>
  .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;
  }

    </style>

</head>
<body>
    <nav class="navbar navbar-expand-lg">
        <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 active">
                <a class="nav-link" href="#">Home 2</a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="#">Home 3</a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="#">Home 4</a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="#">Home 5</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>

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<script>
    $('.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;
  });
</script>

</body>
</html>

【问题讨论】:

  • @KurtChun 是的,它包含在 jquery 之后
  • 尝试将你的 popper.js 移动到 html 而不是
  • 作为这个演示,将 jquery 和 popper.js 放到 标签 tutorialrepublic.com/…
  • @KurtChun 感谢您的宝贵时间。我试过了,结果还是一样

标签: html css twitter-bootstrap bootstrap-4 drop-down-menu


【解决方案1】:

您遇到的问题是因为您在.dropdown-submenu .dropdown-menu 上设置了left: 100%,所以当您添加.dropleft 类时,它会被left:100% 覆盖,删除它应该可以正常工作;请看下面:https://jsfiddle.net/fdm6zer9/

【讨论】:

    【解决方案2】:

    从你的来源复制,并添加了一些类样式,希望能有所帮助。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Bootstrap 4 Navbar With Multilevel Dropdowns Example</title>
        <link href="https://www.jqueryscript.net/css/jquerysctipttop.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.3.1/lumen/bootstrap.min.css">
    
    
        <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
    
    
        <style>
            .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;
            }
    
            .dropdown-submenu-left > .dropdown-menu{
                left: -100%;
                top: 0;
                margin: 0;
                padding: 0;
                right: 100%;
            }
    
            .first-sub-menu {
                width: 12rem;
                left: -122% !important;
            }
    
        </style>
    
    </head>
    <body>
    <nav class="navbar navbar-expand-lg">
        <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 active">
                    <a class="nav-link" href="#">Home 2</a>
                </li>
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home 3</a>
                </li>
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home 4</a>
                </li>
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home 5</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 dropdown-submenu-left">
                            <a class="dropdown-item dropdown-toggle" href="#">Submenu</a>
                            <ul class="dropdown-menu first-sub-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 dropdown-submenu-left">
                                    <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 dropdown-submenu-left">
                                    <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>
    
    <script>
      $('.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;
      });
    </script>
    
    </body>
    </html>

    【讨论】:

    • @DevTN 很高兴 :)
    • 这很好地回答了这个问题:) 但是,您不必添加类样式即可获得预期的功能。问题是由于 .dopleft 在代码中的其他位置被覆盖。
    猜你喜欢
    • 2016-06-26
    • 2019-04-15
    • 2019-12-04
    • 2017-06-22
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2015-01-28
    相关资源
    最近更新 更多