本文へスキップ ドキュメントナビゲーションへスキップ

ツールチップ

CSS3によるアニメーションと、ローカルタイトルの保存にdata-bs-属性を使用するCSSとJavaScriptを用いた、カスタムBootstrapツールチップの追加に関するドキュメントと例。

概要

ツールチッププラグインを使用する際の注意点

  • ツールチップは、位置決めのためにサードパーティライブラリPopperに依存しています。popper.min.jsbootstrap.jsの前に読み込むか、Popperを含むbootstrap.bundle.min.jsを使用する必要があります。
  • パフォーマンス上の理由から、ツールチップはオプトインとなっています。そのため、**自分で初期化する必要があります**。
  • 長さ0のタイトルを持つツールチップは表示されません。
  • 複雑なコンポーネント(入力グループ、ボタングループなど)でのレンダリングの問題を回避するには、container: 'body'を指定します。
  • 非表示の要素でツールチップをトリガーしても機能しません。
  • .disabledまたはdisabled要素のツールチップは、ラッパー要素でトリガーする必要があります。
  • 複数行にまたがるハイパーリンクからトリガーされた場合、ツールチップは中央揃えになります。この動作を回避するには、<a>white-space: nowrap;を使用します。
  • 対応する要素がDOMから削除される前に、ツールチップを非表示にする必要があります。
  • シャドウDOM内の要素からツールチップをトリガーできます。

すべて理解できましたか?素晴らしい!それでは、いくつかの例を見てみましょう。

デフォルトでは、このコンポーネントは組み込みのコンテンツサニタイザーを使用しており、明示的に許可されていないHTML要素はすべて削除されます。詳細については、JavaScriptドキュメントのサニタイザーセクションを参照してください。
このコンポーネントのアニメーション効果は、prefers-reduced-motionメディアクエリに依存しています。アクセシビリティドキュメントの低モーションセクションを参照してください。

ツールチップを有効にする

前述のように、ツールチップを使用する前に初期化する必要があります。ページ上のすべてのツールチップを初期化する方法の1つは、次のようにdata-bs-toggle属性で選択することです。

const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))

以下のリンクにカーソルを合わせると、ツールチップが表示されます。

ツールチップ付きのインラインリンクをいくつか示すためのプレースホルダーテキスト。これは単なるフィラーであり、キラーではありません。ここに配置されたコンテンツは、実際のテキストの存在を模倣するだけです。そして、それらすべてが、あなたがリンク上のこれらのツールチップが、あなた自身のサイトやプロジェクトで使用したときにどのように機能するかを理解できるようにするためです。

HTML
<p class="muted">Placeholder text to demonstrate some <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">inline links</a> with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">real text</a>. And all that just to give you an idea of how tooltips would look when used in real-world situations. So hopefully you've now seen how <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">these tooltips on links</a> can work in practice, once you use them on <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">your own</a> site or project.</p>
HTMLでは、titleまたはdata-bs-titleのいずれかを使用できます。titleが使用されている場合、要素がレンダリングされると、Popperによって自動的にdata-bs-titleに置き換えられます。

カスタムツールチップ

v5.2.0で追加

CSS変数を使用して、ツールチップの外観をカスタマイズできます。カスタムの外観をスコープするために、data-bs-custom-class="custom-tooltip"を使用してカスタムクラスを設定し、それをローカルCSS変数のオーバーライドに使用します。

.custom-tooltip {
  --bs-tooltip-bg: var(--bd-violet-bg);
  --bs-tooltip-color: var(--bs-white);
}
HTML
<button type="button" class="btn btn-secondary"
        data-bs-toggle="tooltip" data-bs-placement="top"
        data-bs-custom-class="custom-tooltip"
        data-bs-title="This top tooltip is themed via CSS variables.">
  Custom tooltip
</button>

方向

以下のボタンにカーソルを合わせると、4つのツールチップの方向(上、右、下、左)が表示されます。RTLでBootstrapを使用する場合、方向は反転されます。

<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">
  Tooltip on top
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">
  Tooltip on right
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">
  Tooltip on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">
  Tooltip on left
</button>

カスタムHTMLを追加

<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
  Tooltip with HTML
</button>

SVG付き

CSS

変数

v5.2.0で追加

Bootstrapの進化するCSS変数アプローチの一部として、ツールチップは、リアルタイムのカスタマイズを強化するために、.tooltipでローカルCSS変数を使用するようになりました。CSS変数の値はSassを介して設定されるため、Sassのカスタマイズも引き続きサポートされています。

--#{$prefix}tooltip-zindex: #{$zindex-tooltip};
--#{$prefix}tooltip-max-width: #{$tooltip-max-width};
--#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};
--#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};
--#{$prefix}tooltip-margin: #{$tooltip-margin};
@include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);
--#{$prefix}tooltip-color: #{$tooltip-color};
--#{$prefix}tooltip-bg: #{$tooltip-bg};
--#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};
--#{$prefix}tooltip-opacity: #{$tooltip-opacity};
--#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};
--#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};

Sass変数

$tooltip-font-size:                 $font-size-sm;
$tooltip-max-width:                 200px;
$tooltip-color:                     var(--#{$prefix}body-bg);
$tooltip-bg:                        var(--#{$prefix}emphasis-color);
$tooltip-border-radius:             var(--#{$prefix}border-radius);
$tooltip-opacity:                   .9;
$tooltip-padding-y:                 $spacer * .25;
$tooltip-padding-x:                 $spacer * .5;
$tooltip-margin:                    null; // TODO: remove this in v6

$tooltip-arrow-width:               .8rem;
$tooltip-arrow-height:              .4rem;
// fusv-disable
$tooltip-arrow-color:               null; // Deprecated in Bootstrap 5.2.0 for CSS variables
// fusv-enable

使用方法

ツールチッププラグインは、オンデマンドでコンテンツとマークアップを生成し、デフォルトではトリガー要素の後にツールチップを配置します。JavaScriptを介してツールチップをトリガーします。

const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)

親コンテナにoverflow: autoまたはoverflow: scrollがある場合、ツールチップは自動的に位置を変更しようとしますが、元の配置の位置は維持されます。boundaryオプションpopperConfigオプションを使用してフリップ修飾子を使用)を任意のHTMLElementに設定して、デフォルト値'clippingParents'(例:document.body)をオーバーライドします。

const tooltip = new bootstrap.Tooltip('#example', {
  boundary: document.body // or document.querySelector('#boundary')
})

マークアップ

ツールチップに必要なマークアップは、ツールチップを表示するHTML要素のdata属性とtitleだけです。ツールチップの生成されたマークアップは非常にシンプルですが、位置(デフォルトではプラグインによってtopに設定されます)が必要です。

キーボードと支援技術のユーザーがツールチップにアクセスできるようにするには、伝統的にキーボードでフォーカス可能でインタラクティブなHTML要素(リンクやフォームコントロールなど)にのみ追加してください。他のHTML要素はtabindex="0"を追加することでフォーカス可能にすることができますが、これにより、キーボードユーザーにとって非インタラクティブな要素に煩わしく混乱を招くタブストップが作成され、多くの支援技術は現在、この状況ではツールチップを発表しません。さらに、ツールチップのトリガーとしてhoverだけに依存しないでください。これは、キーボードユーザーにとってツールチップをトリガーできなくするためです。
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" data-bs-title="Some tooltip text!">Hover over me</a>

<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-auto" role="tooltip">
  <div class="tooltip-arrow"></div>
  <div class="tooltip-inner">
    Some tooltip text!
  </div>
</div>

無効な要素

disabled属性を持つ要素はインタラクティブではないため、ユーザーはツールチップ(またはポップオーバー)をトリガーするためにフォーカス、ホバー、またはクリックできません。回避策として、ツールチップをラッパー<div>または<span>からトリガーし、理想的にはtabindex="0"を使用してキーボードでフォーカス可能にする必要があります。

HTML
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Disabled tooltip">
  <button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>

オプション

オプションはデータ属性またはJavaScriptを介して渡すことができるため、data-bs-にオプション名を追加できます(例:data-bs-animation="{value}")。データ属性を介してオプションを渡す場合は、オプション名のケースタイプを「_camelCase_」から「_kebab-case_」に変更してください。たとえば、data-bs-customClass="beautifier"ではなくdata-bs-custom-class="beautifier"を使用します。

Bootstrap 5.2.0以降、すべてのコンポーネントは、シンプルなコンポーネント構成をJSON文字列として格納できる、**実験的な**予約済みデータ属性data-bs-configをサポートしています。要素にdata-bs-config='{"delay":0, "title":123}'data-bs-title="456"属性がある場合、最終的なtitleの値は456になり、個別のデータ属性がdata-bs-configで指定された値をオーバーライドします。さらに、既存のデータ属性はdata-bs-delay='{"show":0,"hide":150}'のようなJSON値を格納できます。

最終的な設定オブジェクトは、data-bs-configdata-bs-、およびjsオブジェクトをマージした結果であり、最後に指定されたキーと値が他のものを上書きします。

セキュリティ上の理由から、sanitizesanitizeFn、およびallowListオプションは、データ属性を使用して指定できません。
名前 デフォルト値 説明
allowList オブジェクト デフォルト値 許可される属性とタグを含むオブジェクト。
animation ブール値 true ツールチップにCSSフェードトランジションを適用します。
boundary 文字列、要素 'clippingParents' ツールチップのオーバーフロー制約境界(PopperのpreventOverflow修飾子にのみ適用されます)。デフォルトでは'clippingParents'であり、HTMLElement参照(JavaScriptのみ)を受け入れることができます。詳細については、PopperのdetectOverflow ドキュメントを参照してください。
container 文字列、要素、false false ツールチップを特定の要素に追加します。例:container: 'body'。このオプションは、トリガー要素の近くにドキュメントの流れの中でツールチップを配置できるため、ウィンドウサイズ変更時にツールチップがトリガー要素から離れて浮いてしまうのを防ぐのに特に役立ちます。
customClass 文字列、関数 '' ツールチップが表示されるときにクラスを追加します。これらのクラスは、テンプレートで指定されたクラスに追加して追加されます。複数のクラスを追加するには、スペースで区切ります。'class-1 class-2'。追加のクラス名を含む単一の文字列を返す関数を渡すこともできます。
delay 数値、オブジェクト 0 ツールチップの表示と非表示の遅延(ms)—手動トリガータイプには適用されません。数値を指定すると、遅延は非表示/表示の両方に適用されます。オブジェクト構造は次のとおりです。delay: { "show": 500, "hide": 100 }
fallbackPlacements 配列 ['top', 'right', 'bottom', 'left'] 配列で配置のリストを提供することにより、フォールバック配置を定義します(優先順位順)。詳細については、Popperの動作に関するドキュメントを参照してください。
HTML ブール値 false ツールチップでHTMLを許可します。trueの場合、ツールチップのtitle内のHTMLタグはツールチップでレンダリングされます。falseの場合、innerTextプロパティを使用してコンテンツをDOMに挿入します。XSS攻撃を懸念する場合は、テキストを使用してください。
offset 配列、文字列、関数 [0, 0] ターゲットに対するツールチップのオフセット。カンマ区切りの値を使用してデータ属性に文字列を渡すことができます。例:data-bs-offset="10,20"。オフセットを決定するために関数を使用する場合、Popperの配置、参照、Popperの四角形を含むオブジェクトを最初の引数として持つオブジェクトを使用して呼び出されます。トリガー要素のDOMノードが2番目の引数として渡されます。関数は、2つの数値の配列を返す必要があります。スキッド距離。詳細については、Popperのoffset ドキュメントを参照してください。
placement 文字列、関数 'top' ツールチップの配置方法:auto、top、bottom、left、right。autoを指定すると、ツールチップが動的に再配置されます。配置を決定するために関数を使用する場合、ツールチップのDOMノードを最初の引数として、トリガー要素のDOMノードを2番目の引数として呼び出されます。thisコンテキストはツールチップインスタンスに設定されます。
popperConfig null、オブジェクト、関数 null BootstrapのデフォルトのPopper設定を変更するには、Popperの設定を参照してください。Popper設定を作成するために関数を使用する場合、BootstrapのデフォルトのPopper設定を含むオブジェクトを使用して呼び出されます。デフォルトの設定と独自の構成を組み合わせて使用​​するのに役立ちます。関数はPopperの設定オブジェクトを返す必要があります。
sanitize ブール値 true サニタイゼーションを有効または無効にします。有効な場合、'template''content'、および'title'オプションがサニタイズされます。
sanitizeFn null、関数 null ここで独自のサニタイズ関数を指定できます。これは、サニタイゼーションを実行するために専用のライブラリを使用する場合に役立ちます。
selector 文字列、false false セレクターが提供されている場合、ツールチップオブジェクトは指定されたターゲットに委任されます。実際には、これは動的に追加されたDOM要素(jQuery.onサポート)にもツールチップを適用するために使用されます。この問題参考例を参照してください。注意title属性はセレクターとして使用できません。
template 文字列 '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' ツールチップを作成するときに使用する基本的なHTML。ツールチップのtitle.tooltip-innerに挿入されます。.tooltip-arrowはツールチップの矢印になります。最も外側のラッパー要素には、.tooltipクラスとrole="tooltip"が必要です。
title 文字列、要素、関数 '' ツールチップのタイトル。関数が指定されている場合、そのthis参照は、ポッパーがアタッチされている要素に設定されて呼び出されます。
trigger 文字列 'hover focus' ツールチップのトリガー方法:click、hover、focus、manual。複数のトリガーを渡すことができます。スペースで区切ります。'manual'は、ツールチップが.tooltip('show').tooltip('hide').tooltip('toggle')メソッドを使用してプログラムでトリガーされることを示します。この値は、他のトリガーと組み合わせることはできません。'hover'のみでは、キーボードからトリガーできないツールチップになり、キーボードユーザーに同じ情報を伝える代替方法が存在する場合にのみ使用してください。

個々のツールチップのデータ属性

個々のツールチップのオプションは、上記のようにデータ属性を使用して指定することもできます。

popperConfigを使用した関数

const tooltip = new bootstrap.Tooltip(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

メソッド

すべてのAPIメソッドは非同期であり、トランジションを開始します。トランジションが開始されるとすぐに、終了する前に呼び出し元に返されます。さらに、トランジション中のコンポーネントに対するメソッド呼び出しは無視されます。JavaScriptドキュメントで詳しく学習してください。
メソッド 説明
disable 要素のツールチップが表示される機能を削除します。ツールチップは、再度有効にされた場合にのみ表示できます。
dispose 要素のツールチップを非表示にして破棄します(DOM要素に保存されたデータを削除します)。委任を使用するツールチップ(selectorオプションを使用して作成されたツールチップ)は、子孫のトリガー要素で個別に破棄できません。
enable 要素のツールチップが表示される機能を与えます。ツールチップはデフォルトで有効になっています。
getInstance 静的メソッドであり、DOM要素に関連付けられたツールチップインスタンスを取得するか、初期化されていない場合に新しいインスタンスを作成できます。
getOrCreateInstance 静的メソッドであり、DOM要素に関連付けられたツールチップインスタンスを取得するか、初期化されていない場合に新しいインスタンスを作成できます。
hide 要素のツールチップを非表示にします。ツールチップが実際に非表示になる前(つまり、hidden.bs.tooltipイベントが発生する前)に呼び出し元に返されます。これは、ツールチップの手動トリガーと見なされます。
setContent 初期化後にツールチップのコンテンツを変更する方法を提供します。
show 要素のツールチップを表示します。ツールチップが実際に表示される前(つまり、shown.bs.tooltipイベントが発生する前)に呼び出し元に返されます。これは、ツールチップの手動トリガーと見なされます。長さ0のタイトルを持つツールチップは表示されません。
toggle 要素のツールチップを切り替えます。ツールチップが実際に表示または非表示になる前(つまり、shown.bs.tooltipまたはhidden.bs.tooltipイベントが発生する前)に呼び出し元に返されます。これは、ツールチップの手動トリガーと見なされます。
toggleEnabled 要素のツールチップの表示または非表示の機能を切り替えます。
update 要素のツールチップの位置を更新します。
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance

// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })
setContentメソッドはオブジェクト引数を受け入れます。各プロパティキーは、ツールチップテンプレート内の有効な文字列セレクターであり、各関連プロパティ値は文字列|要素|関数|nullになります。

イベント

イベント 説明
hide.bs.tooltip このイベントは、hideインスタンスメソッドが呼び出されるとすぐに発生します。
hidden.bs.tooltip このイベントは、ツールチップがユーザーから非表示になった後(CSSトランジションが完了するのを待ちます)に発生します。
inserted.bs.tooltip このイベントは、ツールチップテンプレートがDOMに追加された後、show.bs.tooltipイベントの後で発生します。
show.bs.tooltip このイベントは、showインスタンスメソッドが呼び出されるとすぐに発生します。
shown.bs.tooltip このイベントは、ツールチップがユーザーに表示された後(CSSトランジションが完了するのを待ちます)に発生します。
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)

myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
  // do something...
})

tooltip.hide()