强制 Bootstrap 下拉菜单始终显示在底部并允许其离开屏幕

问题描述 投票:0回答:4

当视口底部没有空间容纳下拉菜单时,它会显示在下拉按钮的顶部。是否可以改变这种行为并使下拉菜单始终出现在底部?

    <div class="dropdown">
  <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown button
  </button>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    <a class="dropdown-item" href="#">Action</a>
    <a class="dropdown-item" href="#">Another action</a>
    <a class="dropdown-item" href="#">Something else here</a>
  </div>
</div>
drop-down-menu bootstrap-4 popper.js
4个回答
52
投票

对于 Bootstrap 5 (≥ 5.0)

通过在 data-bs-display="static" 元素(按钮或链接)上设置

dropdown-toggle
来完全禁用
Popper.js
动态定位。

来自 Bootstrap 5 文档 > 下拉菜单:选项

默认情况下,我们使用Popper.js进行动态定位。使用 static 禁用此功能。

.window {
    height: 8em;
    overflow: auto;
    margin: 1em;
    padding: 1em;
    border: 10px solid #DFEAF2;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>

<div class="window">
    <div class="dropdown">
        <button data-bs-display="static" class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false">
            Dropdown dropdown-toggle with data-bs-display="static"
        </button>
        <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
        </ul>
    </div>
</div>

提示:有关其他相关选项,另请检查 Bootstrap 5 文档 > 下拉菜单:响应式对齐

对于 Bootstrap 4 (4.1 - 4.6)

通过在 data-display="static" 元素(按钮或链接)上设置

dropdown-toggle
来完全禁用
Popper.js
动态定位。

来自 Bootstrap 4 文档 > 下拉菜单:选项

默认情况下,我们使用Popper.js进行动态定位。使用 static 禁用此功能。

.window {
  height: 8em;
  overflow: auto;
  margin: 1em;
  padding: 1em;
  border: 10px solid #DFEAF2;
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<div class="window">
  <div class="dropdown">
    <button data-display="static" class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      Dropdown dropdown-toggle with data-display="static"
    </button>
    <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
      <a class="dropdown-item" href="#">Action</a>
      <a class="dropdown-item" href="#">Another action</a>
      <a class="dropdown-item" href="#">Something else here</a>
      <a class="dropdown-item" href="#">Action</a>
      <a class="dropdown-item" href="#">Another action</a>
      <a class="dropdown-item" href="#">Something else here</a>
    </div>
  </div>
</div>


26
投票

我想单独用 CSS 来解决这个问题。

Bootstrap 的下拉菜单使用 Popper.js 来定位下拉菜单。这使得任务具有挑战性,因为 Popper.js 似乎会在窗口滚动时检查和评估下拉列表的位置,因此我需要使用

!important
规则来覆盖 Popper.js。

这是我根据您的示例想出的代码。

.dropdown-menu{
    transform: translate3d(5px, 35px, 0px)!important;
}

示例代码笔:https://codepen.io/Washable/pen/xPdqVp

这将始终强制下拉菜单位于按钮下方,即使按钮位于屏幕底部。


23
投票

Bootstrap 4 使用 Popper.js 来定位下拉菜单。此外,Bootstrap 4 允许您传递一些

data-*
属性来控制 Popper.js 在该下拉列表中的行为。

需要调整的选项是 Popper.js 的

flip
选项。默认情况下,Bootstrap 4 将其设置为
true
,当视口底部没有足够的空间时,会导致下拉菜单出现在下拉切换元素上方。

要强制下拉列表始终显示在底部,请添加

data-flip="false"
作为
dropdown-toggle
元素的属性。例如:

<div class="dropdown">
  <button class="btn btn-secondary dropdown-toggle" data-flip="false" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown button
  </button>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    <a class="dropdown-item" href="#">Action</a>
    <a class="dropdown-item" href="#">Another action</a>
    <a class="dropdown-item" href="#">Something else here</a>
  </div>
</div>


1
投票

对于 Bootstrap 5 及更高版本,要禁用动态定位,请将其添加到下拉按钮类中:

data-bs-display="static"

我必须这样做,因为它根据窗口的滚动位置随机地将实际的下拉菜单放在错误的位置。可能是 Popper、Bootstrap 5.1 或 Chromium 的错误...不确定,这将是另一个线程的主题。

请参阅此处:https://getbootstrap.com/docs/5.1/components/dropdowns/#responsive-alignment

© www.soinside.com 2019 - 2024. All rights reserved.