【问题标题】:Rotating Twitter Bootstrap4 Navbar Menu/Submenu Caret旋转 Twitter Bootstrap4 导航栏菜单/子菜单插入符号
【发布时间】:2019-10-03 02:14:42
【问题描述】:

在这里寻求专家的帮助!我设法在 BS4 上旋转了原来的下拉插入符号。但是,我在旋转 submenu 插入符号时遇到了麻烦,有人可以看看并批评我可能做错了什么吗?我希望避免为此使用 FontAwesome,并尽可能将其保留为 CSS 和 Bootstrap4。

谢谢你,非常感谢!

<nav class="navbar navbar-expand-lg navbar-custom py-1" style="background-color:#0082bb;">
  <a class="navbar-brand" href="#" base target="parent">Brand</a>
  <button class="navbar-toggler update-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerToggle" aria-controls="navbarTogglerToggle" aria-expanded="true" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>

  </button>
  <div class="collapse show navbar-collapse" id="navbarTogglerToggle">

    <ul class="navbar-nav mr-auto mt-2 mt-lg-0">
      <li class="nav-item active">
        <a class="nav-link" href="#" base target="parent">Home <span class="sr-only">(current)</span></a>
      </li>
    <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Resources
        </a>
        <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <li><a class="dropdown-item" href="#" base target="parent">Action</a></li>
          <li><a class="dropdown-item" href="#" base target="parent">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="#" base target="parent">Submenu action</a></li>
              <li><a class="dropdown-item" href="#" base target="parent">Another submenu action</a></li>
.dropdown-toggle[aria-expanded="true"]:after {
  transform: rotate(-180deg);
}


.dropdown-toggle:after {
  transition: 0.2s;
}

.dropdown-submenu {
  position: relative;
}

.dropdown-submenu a::after {
  transform: rotate(-90deg);
  position: absolute;
  right: 6px;
  top: .8em;
}

【问题讨论】:

    标签: jquery css bootstrap-4 navbar submenu


    【解决方案1】:

    为了解决这个问题,我们寻找点击.dropdown-submenu .dropdown-toggle 并添加/删除一个类,该类将插入符号的方向从左到下再向后改变。完整代码如下:

    $('.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;
    });
    
    /* for TOP LEVEL MENU */
    $('.dropdown>.dropdown-toggle').click(function() {
      if ($(this).hasClass('caretDown')) {
        $(this).removeClass('caretDown');
      } else {
        $(this).addClass('caretDown');
      }
    });
    
    /* for SUB MENUS */
    $('.dropdown-submenu>.dropdown-toggle').click(function() {
      if ($(this).hasClass('caretDown')) {
        $(this).removeClass('caretDown');
      } else {
        $(this).addClass('caretDown');
      }
    });
    .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;
    }
    
    #navbarDropdownMenuLink::after {
      transform: rotate(-90deg);
    }
    
    a.caretDown::after {
      transform: rotate(0deg) !important;
    }
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></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>

    更新:顶部导航链接插入符号的切换之前未完成,在提问者的指针后更正

    【讨论】:

    • 感谢您查看此内容!但是,在这一项中发生的情况是,原来的下拉菜单现在被禁用了。似乎该类现在仅归因于子菜单,而不是两个单独的子菜单。一个用于原始下拉插入符号,一个用于子菜单插入符号。再次感谢您!
    • 嗨@NewCodeJunkie,感谢您指出这一点,我完全错过了...代码已更新以考虑最顶级的插入符号。
    • 哇,谢谢!这抓住了我的问题,尽管我确实有一个问题,如果这是一种可能性。之前的方法我使用了 on aria-expanded:true 触发器在活动菜单未打开时将插入符号更改回原始位置。当所选菜单不再处于活动状态时,是否仍然可以将插入符号编码以恢复到原始位置?我也将您的答案标记为正确。非常感谢!
    猜你喜欢
    • 2015-04-15
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多