简体   繁体   English

Bootstrap 移动菜单 100%

[英]Bootstrap Mobile Menu 100%

I have a very long mobile menu with 4 menu items, each of those items has dropdown menus, the first dropdown is very long and when I'm scrolling through my nav with the first dropdown open, I can't get to the last dropdown in my menu, unless I close the first dropdown, but I would like to be able to get to the last dropdown even if the first dropdown is open.我有一个很长的移动菜单,有 4 个菜单项,每个菜单项都有下拉菜单,第一个下拉菜单很长,当我在第一个下拉菜单打开的情况下滚动导航时,我无法进入最后一个下拉菜单在我的菜单中,除非我关闭第一个下拉列表,但即使第一个下拉列表打开,我也希望能够进入最后一个下拉列表。

Here is the HTML这是 HTML

 .navbar-collapse { height: 100vh; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/"><img src="~/Images/logo.png" class="img-responsive" /></a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <div class="dropdown-menu dropdown-communities" role="menu"> <div class="row current-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> </div> <hr class="current-communities-hr" /> <div class="row upcoming-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> </div> </div> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> </ul> </div> </div> </div>

I have tried the following:我尝试了以下方法:

.navbar-collapse {
    height: 100vh;
}

But I still can't get to the last dropdown when the first one is open.但是当第一个打开时,我仍然无法进入最后一个下拉列表。

First of all navbar is fixed element so you can't scroll it even though it's overflowing in body element.首先, navbar是固定元素,因此即使它在 body 元素中溢出,您也无法滚动它。

Now you are giving height 100vh to .navbar-collapse现在,你是给高度100vh.navbar-collapse

let say vh = 300px假设vh = 300px

Now .navbar-collapse 's height is 300px but after expending it navbar height is 350px ( .navbar-header + .navbar-collapse height ) and it will overflow body element which current height is 300px .现在.navbar-collapse的高度是300px但在350px它之后navbar高度是350px.navbar-header + .navbar-collapse height )并且它会溢出当前高度是300px body 元素。

Now you can only scroll .navbar-collapse not navbar that's why forth item is hiding.现在您只能滚动.navbar-collapse而不是navbar ,这就是隐藏.navbar-collapse的原因。

You need to reduce height of .navbar-collapse by 50px (height of .navbar-header).您需要将.navbar-collapse的高度降低50px (.navbar-header 的高度)。

.navbar-collapse {
  height: calc(100vh - 50px);
}

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <style> .navbar-collapse { height: calc(100vh - 50px); } </style> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/"><img src="~/Images/logo.png" class="img-responsive" /></a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 1</a> <div class="dropdown-menu dropdown-communities" role="menu"> <div class="row current-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> </div> <hr class="current-communities-hr" /> <div class="row upcoming-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> </div> </div> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 2</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 3</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 4</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> </ul> </div> </div> </div>

Bootstrap puts absolute positioning on their .dropdown-menu class. Bootstrap 将绝对定位放在他们的 .dropdown-menu 类上。 Simply position it relatively and you should be golden.简单地将它相对定位,你应该是金色的。 See the modification in the snippet.请参阅代码段中的修改。

 .dropdown-menu{ position:relative; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <style> .navbar-collapse { height: calc(100vh - 50px); } </style> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/"><img src="~/Images/logo.png" class="img-responsive" /></a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 1</a> <div class="dropdown-menu dropdown-communities" role="menu"> <div class="row current-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> </div> <hr class="current-communities-hr" /> <div class="row upcoming-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> </div> </div> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 2</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 3</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option 4</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> </ul> </div> </div> </div>

Your issue is located in the selector .navbar-collapse which has set the max-height to 340px .您的问题位于选择器.navbar-collapse ,该选择器.navbar-collapse max-height设置为340px To work around it you need to first override that to your desire height and add !Important to override the existing style.要解决它,您需要首先将其覆盖到您想要的高度并添加!Important以覆盖现有样式。

Also, you're using columns inside your menu, so you need to keep in mind that will break some of the bootstrap styling (like dropmenu style for instance).此外,您在菜单中使用了列,因此您需要记住这会破坏一些引导程序样式(例如 dropmenu 样式)。 that's because how the selectors has been configured in a hierarchy structure.那是因为选择器是如何在层次结构中配置的。 So, anything out of the bootstrap structure needs to be reconfigured in your favor (This is also applied in most CSS frameworks).因此,引导程序结构之外的任何内容都需要根据您的喜好重新配置(这也适用于大多数 CSS 框架)。

Here is the CodePen这是CodePen

I have applied我已经申请

.navbar-collapse {
  max-height: 90vh !Important;
  height: 90vh;
}

the max-height has been overridden with 90% of the vh on any device, that will make sure the menu will not exceed the device height. max-height已被任何设备上 90% 的 vh 覆盖,这将确保菜单不会超过设备高度。 As you know most of smart devices has built-in tab navigation and the address bar located on top and bottom of the web browser.如您所知,大多数智能设备都有内置的标签导航和位于 Web 浏览器顶部和底部的地址栏。 So, the 10% will take care of that, and make the menu appear correctly.因此,10% 会处理这个问题,并使菜单正确显示。

This code has been tasted on my iPhone 6 and it works just fine.这段代码已经在我的 iPhone 6 上试用过,效果很好。

You do not need to set the height , but max-height .您不需要设置height ,而是max-height In bootstran .navbar-collapse max-height: 340px;.在 bootstran .navbar-collapse max-height: 340px; 中。 For mobile devices, the menu should occupy the entire screen.对于移动设备,菜单应占据整个屏幕。

<style>
  .navbar-collapse {
     max-height: calc(100vh - 50px)!important;
  }
</style>

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <style> .navbar-collapse { max-height: calc(100vh - 50px)!important; } </style> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/"><img src="~/Images/logo.png" class="img-responsive" /></a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <div class="dropdown-menu dropdown-communities" role="menu"> <div class="row current-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </div> </div> <hr class="current-communities-hr" /> <div class="row upcoming-communities"> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> <div class="col-md-4"> <h4>Option</h4> <ul> <li><a href="/Link/">Link</a></li> </ul> </div> </div> </div> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Option</a> <ul class="dropdown-menu" role="menu"> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> <li><a href="/Link/">Link</a></li> </ul> </li> </ul> </div> </div> </div>

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

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