跳到主要内容 跳到文档导航
in English

约夏克布丁

将 Bootstrap 弹出框(如 iOS 中的弹出框)添加到您网站上的任何元素的文档和示例。

概述

使用 popover 插件时要知道的事情:

  • Popovers 依赖 3rd 方库Popper进行定位。您必须在 bootstrap.js 之前包含popper.min.js或使用bootstrap.bundle.min.js/bootstrap.bundle.js其中包含 Popper 才能使弹出框工作!
  • 弹出框需要工具提示插件作为依赖项。
  • 出于性能原因,弹出框是可选的,因此您必须自己初始化它们
  • 零长度titlecontent值永远不会显示弹出框。
  • 指定container: 'body'以避免在更复杂的组件(如我们的输入组、按钮组等)中出现渲染问题。
  • 在隐藏元素上触发弹出框将不起作用。
  • .disabledor元素的弹出框disabled必须在包装元素上触发。
  • 当从跨越多行的锚点触发时,弹出框将在锚点的整体宽度之间居中。.text-nowrap在你的 s 上使用<a>以避免这种行为。
  • 在从 DOM 中删除其相应元素之前,必须隐藏弹出框。
  • 可以通过 shadow DOM 中的元素触发弹出框。
默认情况下,该组件使用内置的内容清理器,它会去除任何未明确允许的 HTML 元素。有关更多详细信息 ,请参阅 我们的 JavaScript 文档中的 sanitizer 部分。
该组件的动画效果依赖于 prefers-reduced-motion媒体查询。请参阅 我们可访问性文档的减少运动部分

继续阅读以了解弹出框如何与一些示例一起使用。

示例:在任何地方启用弹出框

初始化页面上所有弹出框的一种方法是通过它们的data-bs-toggle属性选择它们:

var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
  return new bootstrap.Popover(popoverTriggerEl)
})

示例:使用container选项

当父元素上的某些样式会干扰弹出框时,您需要指定自定义样式,container以便弹出框的 HTML 出现在该元素中。

var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
  container: 'body'
})

例子

<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

四个方向

有四个选项可用:上对齐、右对齐、下对齐和左对齐。在 RTL 中使用 Bootstrap 时会镜像方向。

<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>

下次点击关闭

使用focus触发器在用户下次单击与切换元素不同的元素时关闭弹出框。

下次单击时关闭所需的特定标记

对于正确的跨浏览器和跨平台行为,您必须使用<a>标签,而不是<button>标签,并且您还必须包含一个tabindex属性。

<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
  trigger: 'focus'
})

禁用元素

具有该disabled属性的元素不是交互式的,这意味着用户无法悬停或单击它们来触发弹出框(或工具提示)。作为一种解决方法,您需要从包装器触发弹出框,<div>或者<span>理想情况下使用tabindex="0".

对于禁用的弹出框触发器,您可能还希望data-bs-trigger="hover focus"弹出框显示为用户的即时视觉反馈,因为他们可能不希望单击禁用的元素。

<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>

萨斯

变量

$popover-font-size:                 $font-size-sm;
$popover-bg:                        $white;
$popover-max-width:                 276px;
$popover-border-width:              $border-width;
$popover-border-color:              rgba($black, .2);
$popover-border-radius:             $border-radius-lg;
$popover-inner-border-radius:       subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow:                $box-shadow;

$popover-header-bg:                 shade-color($popover-bg, 6%);
$popover-header-color:              $headings-color;
$popover-header-padding-y:          .5rem;
$popover-header-padding-x:          $spacer;

$popover-body-color:                $body-color;
$popover-body-padding-y:            $spacer;
$popover-body-padding-x:            $spacer;

$popover-arrow-width:               1rem;
$popover-arrow-height:              .5rem;
$popover-arrow-color:               $popover-bg;

$popover-arrow-outer-color:         fade-in($popover-border-color, .05);

用法

通过 JavaScript 启用弹出框:

var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)

使弹出框适用于键盘和辅助技术用户

要允许键盘用户激活您的弹出框,您应该只将它们添加到传统上可通过键盘聚焦和交互的 HTML 元素(例如链接或表单控件)。尽管可以通过添加属性使任意 HTML 元素(例如<span>s)成为焦点tabindex="0",但这会为键盘用户在非交互式元素上添加可能令人讨厌和混乱的制表位,并且目前大多数辅助技术不会在这种情况下宣布弹出框的内容. 此外,不要仅仅依靠hover作为弹出框的触发器,因为这将使键盘用户无法触发它们。

虽然您可以使用该选项在弹出框中插入丰富的结构化 HTML html,但我们强烈建议您避免添加过多的内容。弹出框当前的工作方式是,一旦显示,它们的内容就会与具有aria-describedby属性的触发器元素相关联。因此,弹出框的全部内容将作为一个不间断的长流向辅助技术用户公布。

此外,虽然还可以在弹出框中包含交互式控件(例如表单元素或链接)(通过将这些元素添加到allowList允许的属性和标签中),但请注意,当前弹出框不管理键盘焦点顺序。当键盘用户打开一个弹出框时,焦点仍然在触发元素上,并且由于弹出框通常不会立即跟随文档结构中的触发器,因此无法保证向前/按下TAB会将键盘用户移动到弹出框本身。简而言之,简单地将交互式控件添加到弹出框可能会使键盘用户和辅助技术用户无法访问/无法使用这些控件,或者至少会导致不合逻辑的整体焦点顺序。在这些情况下,请考虑改用模态对话框。

选项

选项可以通过数据属性或 JavaScript 传递。对于数据属性,将选项名称附加到 中data-bs-,如data-bs-animation="". 通过数据属性传递选项时,请确保将选项名称的大小写类型从 camelCase 更改为 kebab-case。例如,不要使用 ,而是data-bs-customClass="beautifier"使用data-bs-custom-class="beautifier"

请注意,出于安全原因 sanitize, 不能使用数据属性提供 sanitizeFn、 和 选项。allowList
姓名 类型 默认 描述
animation 布尔值 true 对弹出框应用 CSS 淡入淡出过渡
container 字符串 | 元素 | 错误的 false

将弹出框附加到特定元素。示例:container: 'body'。此选项特别有用,因为它允许您将弹出框定位在靠近触发元素的文档流中 - 这将防止弹出框在窗口调整大小期间从触发元素浮动。

content 字符串 | 元素 | 功能 ''

data-bs-content如果属性不存在,则默认内容值。

如果给定了一个函数,它将被调用,并将其this引用设置为弹出框附加到的元素。

delay 号码 | 目的 0

延迟显示和隐藏弹出框(毫秒) - 不适用于手动触发类型

如果提供了一个数字,延迟将应用于隐藏/显示

对象结构为:delay: { "show": 500, "hide": 100 }

html 布尔值 false 将 HTML 插入弹出框。如果为 false,innerText属性将用于将内容插入 DOM。如果您担心 XSS 攻击,请使用文本。
placement 字符串 | 功能 'right'

如何定位弹出框 - 自动 | 顶部 | 底部 | 离开 | 正确的。
指定时auto,它将动态地重新定向弹出框。

当一个函数用于确定位置时,它会以弹出框 DOM 节点作为其第一个参数,触发元素 DOM 节点作为其第二个参数来调用。this上下文设置为弹出框实例。

selector 字符串 | 错误的 false 如果提供了选择器,弹出框对象将被委托给指定的目标。在实践中,这用于启用动态 HTML 内容以添加弹出框。请参阅this一个内容丰富的示例
template 细绳 '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'

创建弹出框时要使用的基本 HTML。

弹出框title将被注入到.popover-header.

弹出框content将被注入到.popover-body.

.popover-arrow将成为弹出框的箭头。

最外层的包装元素应该有.popover类。

title 字符串 | 元素 | 功能 ''

title如果属性不存在,则默认标题值。

如果给定了一个函数,它将被调用,并将其this引用设置为弹出框附加到的元素。

trigger 细绳 'click' 弹出框是如何触发的 - 点击 | 悬停 | 焦点 | 手动的。您可以传递多个触发器;用空格分隔它们。manual不能与任何其他触发器结合使用。
fallbackPlacements 大批 ['top', 'right', 'bottom', 'left'] 通过提供数组中的展示位置列表(按优先顺序)来定义后备展示位置。有关更多信息,请参阅 Popper 的行为文档
boundary 字符串 | 元素 'clippingParents' popover 的溢出约束边界(仅适用于 Popper 的 preventOverflow 修饰符)。默认情况下,它'clippingParents'可以接受 HTMLElement 引用(仅通过 JavaScript)。有关更多信息,请参阅 Popper 的detectOverflow 文档
customClass 字符串 | 功能 ''

显示时将类添加到弹出框。请注意,除了模板中指定的任何类之外,还将添加这些类。要添加多个类,请用空格分隔它们:'class-1 class-2'.

您还可以传递一个函数,该函数应返回包含其他类名的单个字符串。

sanitize 布尔值 true 启用或禁用清理。如果激活'template',选项将被清理'content''title'请参阅我们的 JavaScript 文档中的消毒剂部分
allowList 目的 默认值 包含允许的属性和标签的对象
sanitizeFn 空 | 功能 null 在这里,您可以提供自己的消毒功能。如果您更喜欢使用专用库来执行清理,这会很有用。
offset 数组 | 字符串 | 功能 [0, 8]

弹出框相对于其目标的偏移量。您可以使用逗号分隔值在数据属性中传递字符串,例如:data-bs-offset="10,20"

当一个函数用于确定偏移量时,调用它时会使用一个包含 popper 放置、引用和 popper rects 作为其第一个参数的对象。触发元素 DOM 节点作为第二个参数传递。该函数必须返回一个包含两个数字的数组:.[skidding, distance]

有关更多信息,请参阅 Popper 的偏移量文档

popperConfig 空 | 对象 | 功能 null

要更改 Bootstrap 的默认 Popper 配置,请参阅Popper 的配置

当一个函数用于创建 Popper 配置时,它会被一个包含 Bootstrap 的默认 Popper 配置的对象调用。它可以帮助您使用默认设置并将其与您自己的配置合并。该函数必须为 Popper 返回一个配置对象。

单个弹出框的数据属性

如上所述,可以通过使用数据属性来指定单个弹出框的选项。

使用函数popperConfig

var popover = new bootstrap.Popover(element, {
  popperConfig: function (defaultBsPopperConfig) {
    // var newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

方法

异步方法和转换

所有 API 方法都是异步的并开始一个转换他们在转换开始但在结束之前立即返回给调用者。此外,过渡组件上的方法调用将被忽略

有关更多信息,请参阅我们的 JavaScript 文档

节目

显示元素的弹出框。在弹出框实际显示之前(即在事件发生之前)返回给调用者。shown.bs.popover这被认为是弹出框的“手动”触发。标题和内容都为零长度的弹出框永远不会显示。

myPopover.show()

隐藏

隐藏元素的弹出框。在弹出框实际上被隐藏之前(即在事件发生之前)返回给调用者。hidden.bs.popover这被认为是弹出框的“手动”触发。

myPopover.hide()

切换

切换元素的弹出框。在弹出框实际显示或隐藏之前(即在or事件发生之前)返回给调用者。这被认为是弹出框的“手动”触发。shown.bs.popoverhidden.bs.popover

myPopover.toggle()

处置

隐藏和销毁元素的弹出框(删除 DOM 元素上存储的数据)。使用委托(使用选项创建)selector弹出框不能在后代触发器元素上单独销毁。

myPopover.dispose()

使能够

使元素的弹出框能够显示。弹出框默认启用。

myPopover.enable()

禁用

移除显示元素弹出框的能力。只有重新启用弹出框才能显示。

myPopover.disable()

切换启用

切换元素的弹出框是否显示或隐藏。

myPopover.toggleEnabled()

更新

更新元素弹出框的位置。

myPopover.update()

获取实例

允许您获取与 DOM 元素关联的弹出框实例的静态方法

var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance

获取或创建实例

静态方法,允许您获取与 DOM 元素关联的弹出框实例,或创建一个新的实例以防它未初始化

var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance

活动

事件类型 描述
show.bs.popover show调用实例方法时立即触发此事件。
显示的.bs.popover 当弹出框对用户可见时触发此事件(将等待 CSS 转换完成)​​。
hide.bs.popover hide调用实例方法时立即触发此事件。
hidden.bs.popover 当弹出窗口完成对用户隐藏时触发此事件(将等待 CSS 转换完成)​​。
插入的.bs.popover 该事件show.bs.popover在弹出框模板添加到 DOM 后触发。
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
  // do something...
})