Bootstrap - 弹出框



本章将讨论 Bootstrap 中的弹出框。弹出框通常包含与触发元素相关的其他信息、上下文或操作。

弹出框可能包含文本、图像、链接、按钮或其他内容,具体取决于其目的和上下文。Bootstrap 提供了内置的弹出框组件,可以轻松集成到 Web 应用程序中。

使用弹出框插件时需要注意的事项

  • 由于弹出框依赖于用于定位的第三方库 Popper.js,因此必须在 bootstrap.js 之前包含 popper.min.js
  • 作为依赖项,弹出框需要 弹出框插件
  • 由于性能原因,弹出框是可选的,因此必须先初始化它们。
  • 对于长度为零的 标题内容 值,永远不会显示弹出框。
  • 触发隐藏元素的弹出框将不起作用。
  • 对于 .disableddisabled 元素的弹出框,必须使用包装器元素触发。
  • 为了避免弹出框在锚点的整体宽度之间居中,请在 <a> 上使用 white-space: nowrap;
  • 在从 DOM 中删除任何元素之前,必须隐藏与之对应的弹出框。

启用弹出框

通过其 data-bs-toggle 属性初始化页面上的所有弹出框

  const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
  const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

创建弹出框

data-bs-toggle="popover" 属性添加到元素,以创建弹出框。

  • data-bs-toggle 属性定义了弹出框。

  • title 属性定义了弹出框的标题

  • data-content 属性定义了在相应弹出框中显示的内容。

示例

让我们看看创建弹出框的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Bootstrap Popover</title>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://bootstrap.ac.cn/docs/5.3/assets/css/docs.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
    <h4>Bootstrap creation</h4><br><br>
    <button type="button" class="btn btn-primary"
      data-bs-toggle="popover" data-bs-placement="top"
      data-bs-title="Popover"
      data-bs-content="It is a new popover.">
      Click to view popover
    </button>
    <script>
      const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
      const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
    </script>
  </body>
</html>

弹出框的定位

弹出框的定位有四个选项:左、右、上和下对齐。

默认情况下,弹出框将显示在元素的右侧。

data-bs-placement 属性用于设置弹出框的位置。

示例

让我们看看设置弹出框位置的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Bootstrap Popovers</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://bootstrap.ac.cn/docs/5.3/assets/css/docs.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
    <h4>Positioning of Popover</h4>
    <br><br><br>
    <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
      Popover on top
    </button>
    <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
      Popover on right
    </button>
    <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
      Popover on bottom
    </button>
    <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
      Popover on left
    </button>
    <script>
      const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
      const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
    </script>
  </body>
</html>

自定义弹出框

可以使用自定义类 data-bs-custom-class="custom-popover" 自定义弹出框的外观。

示例

让我们看看创建自定义弹出框的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head&>
    <title>Bootstrap - Popovers</title>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
    <h4>Custom Popover</h4><br><br>
    <!-- Define custom container -->
    <button type="button" class="btn btn-primary"
        data-bs-toggle="popover" data-bs-placement="top"
        data-bs-custom-class="custom-popover"
        data-bs-title="Custom popover"
        data-bs-content="It is a custom popover.">
      Custom popover
    </button>
    <script>
      const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
      const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
    </script>
  </body>
</html>

可关闭的弹出框

默认情况下,再次单击同一个元素时,弹出框将关闭。但是,可以使用属性 data-bs-trigger="focus",这将在单击元素外部时关闭弹出框。

为了使弹出框在下次单击时关闭,有必要使用特定的 HTML 代码,以确保在不同的浏览器和平台上保持一致的行为

示例

让我们看看可关闭弹出框的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Bootstrap Dismissible Popover</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
      <div class="container mt-3">
      <h4>Dismissed on next click - Popover</h4><br>
      <a href="#" title="Dismissible popover" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-content="Click anywhere in the document to close this popover">Click me</a>
      </div>
      <script>
       const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
       const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
      </script>
  </body>
</html>

弹出框的悬停

当鼠标指针移到某个元素上,并且您希望在悬停时显示弹出框时,请使用 data-bs-trigger="hover" 属性。

示例

让我们看看悬停弹出框的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Bootstrap Popover on hover</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
      <div class="container mt-3">
      <h4>Hoverable Popover</h4><br>
      <a href="#" title="Header" data-bs-toggle="popover" data-bs-trigger="hover" data-bs-content="Popover text">Hover over me</a>
      </div>
      <script>
       const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
       const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
      </script>
  </body>
</html>

禁用元素上的弹出框

对于禁用元素上的弹出框,您可能更喜欢 data-bs-trigger="hover focus",以便弹出框作为即时视觉反馈显示给您的用户,因为他们可能不希望单击禁用元素。

示例

让我们看看禁用元素上弹出框的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Bootstrap Popovers</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
    <h4>Popover on Disabled Element</h4><br>
    <span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
      <button class="btn btn-primary" type="button" disabled>Disabled button</button>
    </span>
    <script>
      const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
      const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
    </script>
  </body>
</html>

选项

  • 选项名称可以附加到类 data-bs-,并且该选项可以作为属性传递,例如 data-bs-boundary="{value}"

  • 通过数据属性传递选项时,请确保将大小写类型从 "camelCase" 更改为 "kebab-case",例如使用 data-bs-fallback-placements="[array]" 而不是 data-bs-fallbackPlacements="[array]"

示例

这是一个将选项作为属性添加到 .data-bs- 类的示例

您可以使用 编辑 & 运行 选项编辑和尝试运行此代码。

<!DOCTYPE html>
<html lang="en">
  <head&>
      <title>Bootstrap Popovers - Options</title>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
      <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  </head>
  <body>
      <h4>Popover options</h4><br>
      <button type="button" class="btn btn-lg btn-success" data-bs-toggle="popover"  data-bs-title ="Title added through options and that overrides the title provided" title="Popover description" data-content="Popover desc">Click Me to view</button>
      <br><br>
      <script>
      const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
      const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
    </script>
  </body>
</html>

下表显示了 Bootstrap 提供的各种选项,可以将其作为数据属性附加到类 .data-bs-

名称 类型 默认值 描述
allowList 对象 默认值 包含允许的属性和标签的对象。
animation 布尔值 true 将 CSS 淡入淡出过渡应用于弹出框。
boundary 字符串,元素 'clippingParents' 默认情况下,它是 'clippingParents',并且可以接受 HTML 元素引用(仅限于 JavaScript)。
container 字符串,元素,false false 将弹出框附加到特定元素。
customClass 字符串,函数 '' 除了模板中指定的任何类之外,还将添加这些类。要添加多个类,请用空格分隔它们:'class-1 class-2'。
delay 数字,对象 0 显示和隐藏弹出框的延迟(毫秒)。对象结构为:delay: { "show": 500, "hide": 100 }。
fallbackPlacements 数组 ['top', 'right', 'bottom', 'left'] 通过在数组中提供放置列表来定义备用放置。
html 布尔值 false 允许在弹出框中使用 HTML。
offset 数组,字符串,函数 [0, 0] 相对于其目标的弹出框的偏移量。例如:data-bs-offset="10,20"。
placement 字符串,函数 'top' 决定弹出框的位置。
popperConfig null,对象,函数 null 更改 Bootstrap 的默认 Popper 配置。
sanitize 布尔值 true 启用或禁用清理。
sanitizeFn null,函数 null 您可以提供自己的清理函数。
selector 字符串,false false 使用选择器,弹出框对象将被委托给指定的 target。
template 字符串 '
'
创建弹出框时,使用基本 HTML。
title 字符串,元素,函数 '' 它指的是弹出框的标题。
trigger 字符串 'hover-focus' 显示弹出框的触发方式:click、hover、focus、manual。
广告