简体   繁体   English

Bootstrap 4 菜单下拉菜单和子菜单下拉菜单具有相同的高度

[英]Bootstrap 4 menu-dropdown and sub-menu-dropdown to have same height

I'm using Bootstrap 4 and trying to get menu-dropdown and sub-menu-dropdown to have equal heights.我正在使用 Bootstrap 4 并试图让菜单下拉菜单和子菜单下拉菜单具有相同的高度。

So far, I manage to get menu-dropdown height to be equal to sub-menu-dropdown and not the other way around using jQuery.到目前为止,我设法让菜单下拉菜单的高度等于子菜单下拉菜单,而不是使用 jQuery。 How do I manage to make it look like this as shown below:我如何设法使它看起来像这样,如下所示: 在此处输入图像描述

JSFiddle: https://jsfiddle.net/g9thp3j5/ JSFiddle: https://jsfiddle.net/g9thp3j5/

HTML: HTML:

<div id="main-nav" class="justify-content-end">
  <ul id="menu-main-menu" class="navbar-nav">
    <li class="menu-item current-menu-item current_page_item menu-item-home active nav-item"><a href="#" class="nav-link">Main Menu 1</a>
    </li>
    <li class="menu-item menu-item-has-children dropdown nav-item"><a href="#" data-toggle="dropdown" class="dropdown-toggle nav-link">Main Menu 2</a>
      <ul class="dropdown-menu" role="menu">
        <li class="menu-item menu-item-has-children dropdown nav-item"><a href="#" class="dropdown-item">Menu 1</a>
          <ul class="dropdown-menu" role="menu">
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 1</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 2</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 3</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 4</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 5</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 6</a></li>
          </ul>
        </li>
        <li class="menu-item menu-item-has-children dropdown nav-item"><a href="#" class="dropdown-item">Menu 2</a>
          <ul class="dropdown-menu" role="menu">
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 11</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 12</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 13</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 14</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 15</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 16</a></li>
            <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 17</a></li>
          </ul>
        </li>
        <li class="menu-item nav-item"><a href="#" class="dropdown-item">Menu 3</a>
        </li>
      </ul>
    </li>
    <li class="menu-item nav-item"><a href="#" class="nav-link">Main Menu 3</a></li>
    <li class="menu-item nav-item"><a href="#" class="nav-link">Main Menu 4</a></li>
  </ul>
</div>

CSS: CSS:

.navbar-nav {
    -ms-flex-direction: row;
    flex-direction: row;
}
.navbar-nav .dropdown-menu {
    position: absolute;
}
.navbar-nav > li {
  margin: 0 15px;
}
.dropdown-menu .dropdown-toggle::after {
  border-bottom: 0.3em solid transparent;
  border-left: 0.3em solid;
  border-top: 0.3em solid transparent;
}
.dropdown-menu.show {
  border: 1px solid #999;
  background-color: #ffffff;
}
.dropdown.menu-item-has-children .dropdown.menu-item-has-children {
    position: relative;
}
.dropdown.menu-item-has-children .dropdown.menu-item-has-children>.dropdown-menu {
    top: 0;
    left: 100%;
    margin-top: -6px;
    margin-left: -1px;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
    box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.11);
    background-color: #ffffff;
    border: 1px solid #999;
}
.dropdown.menu-item-has-children .dropdown.menu-item-has-children:hover>.dropdown-menu {
    display: block;
}

.dropdown.menu-item-has-children .dropdown.menu-item-has-children>a:after {
    display: block;
    content: " ";
    float: right;
    width: 0;
    height: 0;
    border-color: transparent;
    border-style: solid;
    border-width: 5px 0 5px 5px;
    border-left-color: #ccc;
    margin-top: 5px;
    margin-right: -10px;
}

.dropdown.menu-item-has-children .dropdown.menu-item-has-children:hover>a:after {
    border-left-color: #fff;
}

.dropdown.menu-item-has-children .dropdown.menu-item-has-children.pull-left {
    float: none;
}

.dropdown.menu-item-has-children .dropdown.menu-item-has-children.pull-left>.dropdown-menu {
    left: -100%;
    margin-left: 10px;
    -webkit-border-radius: 6px 0 6px 6px;
    -moz-border-radius: 6px 0 6px 6px;
    border-radius: 6px 0 6px 6px;
}

JS: JS:

$("#main-nav > ul > li").each(function(){
  var maxHeight = 0;
  var myUl=$("ul", $(this));

  myUl.each(function(){
    maxHeight = maxHeight > $(this).height() ? maxHeight : $(this).height();
  });

  myUl.height(maxHeight);
});

Run this snippet to see how your problems are compounded with a smaller resolution.运行此代码段以查看您的问题如何与较小的分辨率相结合。 The answer to your question is only going to work for a certain size screen unless you write css/js for all the different possible resolutions.除非您为所有不同的可能分辨率编写 css/js,否则您的问题的答案仅适用于特定尺寸的屏幕。 There is a fiddle link at the bottom.底部有一个小提琴链接。 Check that out too.也检查一下。

 $("#main-nav > ul > li").each(function() { var maxHeight = 0; var myUl = $("ul", $(this)); var marginsOfParentElement = 20; // this should be calculated myUl.each(function() { // console.log($(myUl).height(), $(this).height()); maxHeight = maxHeight > $(this).height()? maxHeight: $(this).height(); }); // uncomment here to see diff myUl.parent().height(maxHeight - marginsOfParentElement); });
 .navbar-nav { -ms-flex-direction: row; flex-direction: row; }.navbar-nav.dropdown-menu { position: absolute; }.navbar-nav>li { margin: 0 15px; }.dropdown-menu.dropdown-toggle::after { border-bottom: 0.3em solid transparent; border-left: 0.3em solid; border-top: 0.3em solid transparent; }.dropdown-menu.show { border: 1px solid #999; background-color: #ffffff; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children { position: relative; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children>.dropdown-menu { top: 0; left: 100%; margin-top: -6px; margin-left: -1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.11); background-color: #ffffff; border: 1px solid #999; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children:hover>.dropdown-menu { display: block; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children>a:after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: #ccc; margin-top: 5px; margin-right: -10px; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children:hover>a:after { border-left-color: #fff; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children.pull-left { float: none; }.dropdown.menu-item-has-children.dropdown.menu-item-has-children.pull-left>.dropdown-menu { left: -100%; margin-left: 10px; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; }
 <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/> <div id="main-nav" class="justify-content-end"> <ul id="menu-main-menu" class="navbar-nav"> <li class="menu-item current-menu-item current_page_item menu-item-home active nav-item"><a href="#" class="nav-link">Main Menu 1</a> </li> <li class="menu-item menu-item-has-children dropdown nav-item"><a href="#" data-toggle="dropdown" class="dropdown-toggle nav-link">Main Menu 2</a> <ul class="dropdown-menu" role="menu"> <li class="menu-item menu-item-has-children dropdown nav-item"><a href="#" class="dropdown-item">Menu 1</a> <ul class="dropdown-menu" role="menu"> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 1</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 2</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 3</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 4</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 5</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 6</a></li> </ul> </li> <li class="menu-item menu-item-has-children dropdown nav-item"><a href="#" class="dropdown-item">Menu 2</a> <ul class="dropdown-menu" role="menu"> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 11</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 12</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 13</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 14</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 15</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 16</a></li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Sub Menu 17</a></li> </ul> </li> <li class="menu-item nav-item"><a href="#" class="dropdown-item">Menu 3</a> </li> </ul> </li> <li class="menu-item nav-item"><a href="#" class="nav-link">Main Menu 3</a></li> <li class="menu-item nav-item"><a href="#" class="nav-link">Main Menu 4</a></li> </ul> </div>

It looks different in fiddle.它在小提琴中看起来不同。 Check it out.一探究竟。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM