Skip to main content Skip to docs navigation

ツールチップ

Tooltips

アニメーション用のCSS3とローカルタイトルストレージ用のdata-bs-attributesを使用して、CSSとJavaScriptでカスタムBootstrapツールチップを追加するためのドキュメントと例です。

概要

ツールチッププラグインを使うときに知っておきたいこと

  • ツールチップの配置はサードパーティライブラリPopperに依存します。bootstrap.jsの前にpopper.min.jsをインクルードするか、ツールチップを動作させるためにはPopper.jsをインクルードしたbootstrap.bundle.min.js / bootstrap.bundle.jsを使用する必要があります。
  • ツールチップはパフォーマンス上の理由でオプトインされているため、自分で初期化する必要があります。
  • 長さゼロのタイトルを持つツールチップは表示されません。
  • 複雑なコンポーネント(入力グループやボタングループなど)でのレンダリングの問題を避けるためにcontainer: 'body'を指定します。
  • 隠された要素でツールチップをトリガーすると機能しません。
  • .disableddisabled要素のツールチップは、ラッパー要素上でトリガされなければなりません。
  • 複数行にまたがるハイパーリンクからトリガーされた場合、ツールチップは中央に配置されます。この動作を避けるには、<a>white-space: nowrap;を使用してください。
  • ツールチップは、対応する要素がDOMから削除される前に非表示にしなければなりません。
  • ツールチップは、shadow 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))

リンク上のツールチップ

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

Placeholder text to demonstrate some inline links with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of real text. 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 these tooltips on links can work in practice, once you use them on your own site or project.

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内ではtitledata-bs-titleのどちらかを使用して下さい。titleを使用した場合、ポップオーバーは要素がレンダリングされるときに自動的にdata-bs-titleに置き換えます。

カスタムツールチップ

Added in v5.2.0

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

.custom-tooltip {
  --bs-tooltip-bg: var(--bs-primary);
}
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>

方向

下のボタンにカーソルを合わせると、top、right、bottom、leftの4つのツールチップの方向が表示されます。BootstrapをRTLで使用する場合、方向はミラーリングされます。

<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

変数

Added in 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)

.table-responsiveのように、親コンテナoverflow: autoまたはoverflow: scrollを持つ場合、ツールチップの位置は自動的に変更されますが、元の配置の位置は保持されます。これを解決するには、boundaryオプション(popperConfigオプションを使用した flip モディファイアの場合)を任意のHTML要素に設定し、document.bodyのようなデフォルト値の'clippingParents'を上書きします。:

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-top" role="tooltip">
  <div class="tooltip-arrow"></div>
  <div class="tooltip-inner">
    Some tooltip text!
  </div>
</div>

無効化された要素

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

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-animation="{value}"のように、data-bs-にオプション名を付加することができる。データ属性でオプションを渡す場合は、オプション名の大文字と小文字を"camelCase“から”kebab-case“に変更することを忘れないようにしましょう。例えば、data-bs-customClass="beautifier"の代わりに data-bs-custom-class="beautifier"を使用します。

Bootstrap 5.2.0では、全てのコンポーネントが 実験的 予約データ属性 data-bs-config をサポートしており、JSON文字列として簡単なコンポーネント設定を収容することができます。要素に 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 objectのマージ結果であり、最新のキー値が他の値を上書きする。

セキュリティ上の理由から、sanitize,sanitizeFnおよびallowListオプションはデータ属性を用いて指定することができないことに注意してください。
Name Type Default Description
allowList object Default value Object which contains allowed attributes and tags.
animation boolean true CSSのフェード遷移を適用します。
boundary string, element 'clippingParents' ツールチップのオーバーフロー制約境界(PopperのpreventOverflowモディファイアにのみ適用されます)。デフォルトでは'clippingParents'で、HTML要素の参照を受け付けます(JavaScriptのみ)。詳しくはPopperのdetectOverflow docsを参照してください。
container string, element, false false 特定の要素にtooltipを追加します。例container: 'body'. このオプションは、文書の流れの中で tooltipをトリガ要素の近くに配置することができるので、便利です。 - ウィンドウのサイズ変更中にツールチップがトリガー要素から離れて浮いてしまうのを防ぐためのものです。
customClass string, function '' ツールチップが表示されるときにクラスを追加します。これらのクラスはテンプレートで指定されたクラスに加えて追加されることに注意してください。複数のクラスを追加するには、空白で区切ります:'class-1 class-2'. また、追加のクラス名を含む文字列を返す関数を渡すこともできます。
delay number, object 0 tooltipの表示と非表示の時間(ms)-手動トリガータイプには適用されません。数値が与えられた場合、非表示/表示の両方に遅延が適用されます。オブジェクト構造は:delay: { "show": 500, "hide": 100 }.
fallbackPlacements array ['top', 'right', 'bottom', 'left'] フォールバック・プレイスメントを定義するには、プレイスメントのリストを配列で指定します(優先順)。詳しくはポッパーのbehavior docsを参照してください。
html boolean false ツールチップのHTMLを許可します。trueの場合、ツールチップのtitleに含まれるHTMLタグがツールチップにレンダリングされる。falseの場合、innerTextプロパティがDOMにコンテンツを挿入するために使用される。XSS攻撃が心配な場合はテキストを使用してください。
offset array, string, function [0, 0] ターゲットに対するツールチップのオフセット。data 属性にカンマ区切りの文字列を渡すことができます:data-bs-offset="10,20". オフセットを決定するために関数が使用される場合、その関数はポッパーの配置、参照、popper rectsを含むオブジェクトを第一引数として呼び出されます。トリガーとなる要素のDOMノードは、第二引数として渡されます。この関数は2つの数値からなる配列を返さなければなりません:skidding,distance. 詳しくは Popper のoffset docsを参照してください。
placement string, function 'top' 配置方法 - auto
popperConfig null, object, function null BootstrapのデフォルトPopperコンフィギュレーションを変更するには、Popperコンフィギュレーションを参照してください。Popperコンフィギュレーションを作成するために関数が使われるとき、 BootstrapのデフォルトPopperコンフィギュレーションを含むオブジェクトで呼び出されます。これは、デフォルトとあなたのコンフィギュレーションを使用したりマージしたりするのに役立ちます。関数はPopperのためのコンフィギュレーション・オブジェクトを返さなければなりません。
sanitize boolean true サニタイズ処理を有効または無効にする。有効にするとtemplate'content'title'オプションがサニタイズされます。
sanitizeFn null, function null ここでは、独自のサニタイズ関数を指定することができます。これは、サニタイズ処理に専用のライブラリを使いたい場合に便利です。
selector string, false false セレクタが指定された場合、ツールチップオブジェクトは指定されたターゲットに委譲されます。実際には、これは動的に追加されたDOM要素にもツールチップを適用するために使用されます(jQuery.onサポート)。この問題参考例を参照してください。注意title属性はセレクタとして使用してはいけません。
template string '<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 string, element, function '' title属性が存在しない場合のデフォルトのタイトル値です。関数が指定された場合、その関数はポップオーバーがアタッチされている要素にthisリファレンスが設定された状態で呼び出されます。
trigger string 'hover focus' ツールチップのトリガー方法:'click','hover','focus','manual'。複数のトリガーを渡す場合、スペースで区切ってください。'manual'.tooltip('show').tooltip('hide').tooltip('toggle')メソッドによってプログラム的にツールチップをトリガーすることを示します。この値は他のトリガーと組み合わせることはできません。'hover'を単独で使用すると、キーボードからトリガーすることができないツールチップになります。

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

個々のtooltipのオプションは、上で説明したように、データ属性を使用して指定することもできます。

popperConfigで関数を使用する

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

Methods

すべてのAPIメソッドは非同期でトランジションを開始します。 トランジションが開始されるとすぐに、しかし終了する前に、呼び出し元に戻ります。また、遷移中のコンポーネントに対するメソッド呼び出しは無視されます。詳しくはJavaScriptのドキュメントをご覧ください
Method Description
disable 要素のツールチップを表示する機能を削除します。ツールチップは、再度有効にした場合にのみ表示できるようになります。
dispose 要素のツールチップを非表示にして破棄する(DOM要素に保存されているデータを削除する)。デリゲーション(selectorオプションを使用して作成される)を使用しているツールチップは、子孫のトリガー要素で個別に破棄することはできません。
enable 要素のツールチップを表示する機能を付与します。ツールチップはデフォルトで有効になっています
getInstance DOM要素に関連付けられたツールチップのインスタンスを取得したり、初期化されていない場合に新しいインスタンスを作成することができるStatic メソッドです。
getOrCreateInstance DOM要素に関連付けられたツールチップのインスタンスを取得したり、初期化されていない場合に新しいインスタンスを作成することができるStatic メソッドです。
hide 要素のツールチップを非表示にします。ツールチップが実際に隠される前に呼び出し元に返される(すなわち、hidden.bs.tooltipイベントが発生する前に)。これは、ツールチップの「手動」トリガーとみなされます。
setContent ツールチップの初期化後に、その内容を変更する方法を提供する。
show 要素のツールチップを表示する。ツールチップが実際に表示される前に呼び出し元に返される(すなわち、shown.bs.tooltipイベントが発生する前に)。これは、ツールチップの「手動」トリガーとみなされます。長さがゼロのタイトルを持つツールチップは決して表示されません。
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メソッドはobject引数を受け取り、それぞれのproperty-keyはポップオーバーテンプレートの中で有効なstringセレクタで、関連する property-valueは string | element | function | null です。

イベント

Event Description
hide.bs.tooltip hideインスタンスメソッドが呼び出されたときに発生します。
hidden.bs.tooltip tooltipの非表示が完了したときに発生します(CSSトランジションが完了するのを待ちます)。
inserted.bs.tooltip tooltipがDOMに追加されて、show.bs.tooltipイベントの後に発生します。
show.bs.tooltip showインスタンスメソッドが呼び出されたときにすぐに発生します。
shown.bs.tooltip tooltipがユーザーに表示されたときに発生します(CSSトランジションが完了するのを待ちます)。
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)

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

tooltip.hide()