【问题标题】:Bootstrap 4 nav dropdown menu overflows the windowBootstrap 4 导航下拉菜单溢出窗口
【发布时间】:2018-07-07 05:47:22
【问题描述】:

我在下面给出了navbardropdown 的示例。当我单击下拉菜单时,菜单会向右溢出,导致窗口中出现水平滚动。

即使在移动视图中,我如何才能始终将下拉菜单保留在窗口中?

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" 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.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>


<nav id="navbar-example2" class="navbar navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <ul class="nav nav-pills">

    <li class="nav-item dropdown">
      <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
      <div class="dropdown-menu">
        <a class="dropdown-item" href="#one">one</a>
        <a class="dropdown-item" href="#two">two</a>
        <div role="separator" class="dropdown-divider"></div>
        <a class="dropdown-item" href="#three">three</a>
      </div>
    </li>
  </ul>
</nav>

【问题讨论】:

  • 为什么要加载 jQuery 的两个版本?
  • @WebDevBooster 编辑了它。那是个错误
  • @Raj 检查我的答案,它会帮助你

标签: html css twitter-bootstrap bootstrap-4


【解决方案1】:

来自 bootstrap 4 文档:

默认情况下,下拉菜单会自动 100% 定位在其父级的顶部和左侧。将 .dropdown-menu-right 添加到 .dropdown-menu 以右对齐下拉菜单。

所以,只需添加.dropdown-menu-right,菜单就会右对齐。

【讨论】:

  • 这应该是 Bootstrap 4 的公认答案,因为它不会强制覆盖引导默认值,也不会在不需要时包装在容器中。如文档所述:“默认情况下,导航栏及其内容是流动的。使用可选容器来限制它们的水平宽度。” (getbootstrap.com/docs/4.5/components/navbar/#how-it-works)
  • 别搞混了,你需要两个类一起,dropdown-menu dropdown-menu-right
【解决方案2】:

覆盖引导 CSS:

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

它会为你工作

【讨论】:

  • 覆盖 Bootstrap css 通常不是一个好主意。尤其是在原生 Bootstrap 类可以完成这项工作的情况下。
  • @WebDevBooster 是的,但是如果我们遇到问题,那么我们需要更新。但我们应该使用我们的类而不是引导
  • 是的,当您添加不必要的 css hack 时,稍后您将需要更多 css hack 来解决原始 css hack 引起的问题。这绝对是真的。
  • 在我看来,像这样的 CSS hack 使 Bootstrap 的使用毫无意义。 Bootstrap 的重点是避免使用 css hack。
  • 它现在从屏幕的左侧而不是右侧出来。
【解决方案3】:

在 bootstrap4 中,需要添加“dropdown-menu-right”,例如:

  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      Dropdown
    </a>
    <div class="dropdown-menu dropdown-menu-right  " aria-labelledby="navbarDropdown">
      <a class="dropdown-item" href="#">Action</a>
      <a class="dropdown-item" href="#">Another action</a>
      <div class="dropdown-divider"></div>
      <a class="dropdown-item" href="#">Something else here</a>
    </div>

  </li>

【讨论】:

    【解决方案4】:

    要解决您的问题,您只需将导航栏包装在 container(或 container-fluid)类中,如下所示:

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    
    <nav id="navbar-example2" class="navbar navbar-light bg-light">
       <div class="container">
           <a class="navbar-brand" href="#">Navbar</a>
           <ul class="nav nav-pills">
    
               <li class="nav-item dropdown pr-3 pr-sm-2">
                   <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
                   <div class="dropdown-menu">
                       <a class="dropdown-item" href="#one">one</a>
                       <a class="dropdown-item" href="#two">two</a>
                       <div role="separator" class="dropdown-divider"></div>
                       <a class="dropdown-item" href="#three">three</a>
                   </div>
               </li>
           </ul>
       </div>
    </nav>
    
    <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.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

    此外,pr-3 pr-sm-2 类在下拉列表中添加了一点“向右填充”。

    【讨论】:

    • 好的,它可以在大屏幕上工作,但在小屏幕上它仍然会出现在窗口之外。
    • 我编辑了我的代码 sn-p。现在检查。添加的pr-3 pr-sm-2 类在下拉列表中添加了一点“padding-right”。
    猜你喜欢
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多