使用 Bootstrap 5 创建自定义工具提示

cdu*_*dub 4 css twitter-bootstrap twitter-bootstrap-tooltip bootstrap-5

我正在使用 Bootstrap 5 并尝试创建自定义工具提示。我在这里看到了 Bootstrap 5 文档中使用的标记。

Bootsta5 工具提示标记

我收集(并在网上查看)工具提示不在调用元素中,并且是同级元素。我正在尝试使用像下面这样的自定义类和以下标记。

// CSS test option #1
.custom-tooltip + .tooltip > .tooltip-inner
{
    text-align: left;
    max-width: 500px;
}

// CSS test option #2
.custom-tooltip ~ .tooltip > .tooltip-inner
{
    text-align: left;
    max-width: 500px;
}

<span class="custom-tooltip" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="The tooltip text<br/>Extra textC">
    <svg ... ></svg>
</span>
Run Code Online (Sandbox Code Playgroud)

因此,如果您只使用.tooltip-inner,显然,它工作得很好,但我不想要全局工具提示,并且需要有不同的自定义工具提示。

小智 9

(这个问题花了一些时间才弄清楚,因为规范的答案不起作用——这很可能是 JSFiddle 的问题,或者是 BS5 的 bug .. 不确定。)

记录的方法是将自定义类添加到选项中customClass,如下所示:

<span data-bs-customClass="custom-tooltip" data-bs-toggle="tooltip" data-bs-html="true" title="The tooltip text<br/>Extra text">
  STUFF
</span>
Run Code Online (Sandbox Code Playgroud)

但我无法让它在JSFiddle上工作。这是因为 html 以全小写形式呈现(在 Chrome 上),而“customClass”中的“C”呈现“customclass”.. 所以 BS5 JS 永远不会选择它。解决方法是在工具提示初始化程序中传递该选项,如下所示:

var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  return new bootstrap.Tooltip(tooltipTriggerEl, {
    'customClass': 'custom-tooltip'
  })
})
Run Code Online (Sandbox Code Playgroud)

然后你的 CSS 应该可以正常工作:

.custom-tooltip.tooltip > .tooltip-inner
{
    text-align: left;
    max-width: 500px;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

事实证明这是固定的......正确的方法是在大写选项之前添加连字符“-”并使用小写形式,如下所示:

<span data-bs-custom-class="custom-tooltip" data-bs-toggle="tooltip" data-bs-html="true" title="The tooltip text<br/>Extra text">
  STUFF
</span>
Run Code Online (Sandbox Code Playgroud)

然后,初始化程序还应该排除该选项(添加它会覆盖数据属性)。初始化程序是根据文档:

var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  return new bootstrap.Tooltip(tooltipTriggerEl)
})
Run Code Online (Sandbox Code Playgroud)