Bootstrap 下拉菜单

使用 Bootstrap 创建下拉菜单的方法和示例

问题

如何使用 Bootstrap 制作下拉菜单?

解答

基本下拉菜单

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 下拉菜单</title>
  <!-- 引入 Bootstrap CSS -->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="zxwuk">

  <!-- 基本下拉菜单 -->
  <div class="dropdown">
    <!-- 触发按钮:需要 dropdown-toggle 类和 data-bs-toggle 属性 -->
    <button class="btn btn-primary dropdown-toggle" 
            type="button" 
            data-bs-toggle="dropdown">
      选择操作
    </button>
    <!-- 下拉菜单内容 -->
    <ul class="dropdown-menu">
      <li><a class="dropdown-item" href="#">编辑</a></li>
      <li><a class="dropdown-item" href="#">复制</a></li>
      <li><hr class="dropdown-divider"></li> <!-- 分隔线 -->
      <li><a class="dropdown-item" href="#">删除</a></li>
    </ul>
  </div>

  <!-- 引入 Bootstrap JS -->
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

不同方向的下拉菜单

<!-- 向上弹出 -->
<div class="dropup">
  <button class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown">
    向上
  </button>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="#">选项 1</a></li>
    <li><a class="dropdown-item" href="#">选项 2</a></li>
  </ul>
</div>

<!-- 向右弹出 -->
<div class="dropend">
  <button class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown">
    向右
  </button>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="#">选项 1</a></li>
    <li><a class="dropdown-item" href="#">选项 2</a></li>
  </ul>
</div>

<!-- 向左弹出 -->
<div class="dropstart">
  <button class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown">
    向左
  </button>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="#">选项 1</a></li>
    <li><a class="dropdown-item" href="#">选项 2</a></li>
  </ul>
</div>

通过 JavaScript 控制

// 获取下拉菜单元素
const dropdownEl = document.querySelector('.dropdown-toggle')

// 创建实例
const dropdown = new bootstrap.Dropdown(dropdownEl)

// 手动控制
dropdown.show()   // 显示
dropdown.hide()   // 隐藏
dropdown.toggle() // 切换

// 监听事件
dropdownEl.addEventListener('show.bs.dropdown', function () {
  console.log('菜单即将显示')
})

dropdownEl.addEventListener('shown.bs.dropdown', function () {
  console.log('菜单已显示')
})

禁用菜单项

<ul class="dropdown-menu">
  <li><a class="dropdown-item" href="#">正常选项</a></li>
  <!-- 添加 disabled 类禁用选项 -->
  <li><a class="dropdown-item disabled" href="#">禁用选项</a></li>
  <!-- 激活状态 -->
  <li><a class="dropdown-item active" href="#">当前选中</a></li>
</ul>

关键点

  • 容器使用 dropdown 类,按钮需要 dropdown-toggle 类和 data-bs-toggle="dropdown" 属性
  • 菜单列表使用 dropdown-menu 类,菜单项使用 dropdown-item
  • 改变弹出方向:dropup(上)、dropend(右)、dropstart(左)
  • 必须引入 Bootstrap 的 JS 文件(或 bundle 版本)才能使下拉功能生效
  • 可通过 bootstrap.Dropdown 实例用 JavaScript 控制显示隐藏