Skip to main content Skip to docs navigation

ツールチップ Tooltips

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

概要

tooltip プラグインを使用する際に知っておくべきこと:

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

すべて理解できましたか? それでは、いくつかの例でどのように機能するかを見てみましょう。

デフォルトでは、このコンポーネントは組み込みのコンテンツサニタイザーを使用しており、明示的に許可されていないHTML要素を除去します。詳細については、JavaScriptドキュメントのsanitizerセクションを参照してください。

このコンポーネントのアニメーション効果は、prefers-reduced-motionメディアクエリに依存しています。詳細については、アクセシビリティドキュメントのreduced motionセクションを参照してください。

Tooltip を有効にする

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

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

リンク上の Tooltip

tooltip を表示するには、以下のリンクにカーソルを合わせます:

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ではtitleまたはdata-bs-titleのいずれかを自由に使用できます。titleを使用した場合、Popperは要素がレンダリングされる際に自動的にdata-bs-titleに置き換えます。

カスタム Tooltip

Added in v5.2.0

CSS 変数を使用して、tooltip の外観をカスタマイズできます。カスタムクラスを 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つの tooltip の方向(上、右、下、左)を確認してください。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

変数

Added in v5.2.0

Bootstrap の進化する CSS 変数アプローチの一部として、tooltip は .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

使い方

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

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

親コンテナが overflow: auto または overflow: scroll を持つ場合、Tooltip は自動的に位置を変更しようとしますが、元の配置の位置決めを維持します。boundary オプション(popperConfig オプションを使用した flip modifier 用)を任意の HTMLElement に設定して、デフォルト値 'clippingParents' を上書きします。例えば document.body:

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

マークアップ

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

キーボードおよび支援技術のユーザーが tooltip にアクセスできるようにするには、従来からキーボードフォーカス可能でインタラクティブな HTML 要素(リンクやフォームコントロールなど)にのみ追加してください。他の HTML 要素は tabindex="0" を追加することでフォーカス可能にできますが、これはキーボードユーザーにとって非インタラクティブな要素に煩わしく混乱を招くタブストップを作成する可能性があり、ほとんどの支援技術は現在この状況で tooltip をアナウンスしません。さらに、tooltip のトリガーとして hover のみに依存しないでください。これにより、キーボードユーザーが tooltip をトリガーすることが不可能になります。

<!-- 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 属性を持つ要素はインタラクティブではないため、ユーザーはフォーカス、ホバー、またはクリックして tooltip(または popover)をトリガーできません。回避策として、ラッパー <div> または <span> から tooltip をトリガーし、理想的には 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>

オプション

オプションはdata属性またはJavaScriptを介して渡すことができます。data-bs-にオプション名を追加できます。例: data-bs-animation="{value}"。data属性を介してオプションを渡す場合は、オプション名の大文字小文字を"camelCase"から"kebab-case"に変更してください。例えば、data-bs-customClass="beautifier"の代わりにdata-bs-custom-class="beautifier"を使用します。

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

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

セキュリティ上の理由から、sanitizesanitizeFn、および allowList オプションは data 属性を使用して提供できないことに注意してください。

NameTypeDefaultDescription
allowListobjectデフォルト値許可されたタグと属性を含むオブジェクト。明示的に許可されていないものは、コンテンツサニタイザーによって削除されます。
このリストに追加する際は注意してください。 詳細については、OWASP のクロスサイトスクリプティング防止チートシートを参照してください。
animationbooleantruetooltip に CSS フェードトランジションを適用します。
boundarystring, element'clippingParents'tooltip のオーバーフロー制約境界(Popper の preventOverflow modifier にのみ適用されます)。デフォルトでは 'clippingParents' で、HTMLElement 参照を受け入れることができます(JavaScript 経由のみ)。詳細については、Popper の detectOverflow ドキュメントを参照してください。
containerstring, element, falsefalsetooltip を特定の要素に追加します。例: container: 'body'。このオプションは、ドキュメントのフロー内のトリガー要素の近くに tooltip を配置できるため特に便利です。これにより、ウィンドウのサイズ変更中に tooltip がトリガー要素から離れて浮遊するのを防ぎます。
customClassstring, function''tooltip が表示されたときにクラスを追加します。これらのクラスは、テンプレートで指定されたクラスに加えて追加されることに注意してください。複数のクラスを追加するには、スペースで区切ります: 'class-1 class-2'。追加のクラス名を含む単一の文字列を返す関数を渡すこともできます。
delaynumber, object0tooltip の表示と非表示の遅延(ms) - 手動トリガータイプには適用されません。数値が指定された場合、遅延は非表示/表示の両方に適用されます。オブジェクト構造: delay: { "show": 500, "hide": 100 }
fallbackPlacementsarray['top', 'right', 'bottom', 'left']配置のリストを提供することでフォールバック配置を定義します(優先順位)。詳細については、Popper の behavior ドキュメントを参照してください。
htmlbooleanfalsetooltip で HTML を許可します。true の場合、tooltip の title の HTML タグが tooltip にレンダリングされます。false の場合、innerText プロパティを使用してコンテンツを DOM に挿入します。ユーザー生成入力を処理する際は、XSS 攻撃を防ぐためにテキストを優先してください。
offsetarray, string, function[0, 6]ターゲットに対する tooltip のオフセット。data 属性でカンマ区切りの値を持つ文字列を渡すことができます: data-bs-offset="10,20"。関数を使用してオフセットを決定する場合、最初の引数として popper の配置、参照、popper の rect を含むオブジェクトで呼び出されます。トリガー要素 DOM ノードは2番目の引数として渡されます。関数は2つの数値を持つ配列を返す必要があります: skiddingdistance。詳細については、Popper の offset ドキュメントを参照してください。
placementstring, function'top'tooltip の配置方法: auto、top、bottom、left、right。auto が指定されると、tooltip を動的に再配置します。関数を使用して配置を決定する場合、最初の引数として tooltip DOM ノードで呼び出され、2番目の引数としてトリガー要素 DOM ノードで呼び出されます。this コンテキストは tooltip インスタンスに設定されます。
popperConfignull, object, functionnullBootstrap のデフォルト Popper 設定を変更するには、Popper の設定を参照してください。関数を使用して Popper 設定を作成する場合、Bootstrap のデフォルト Popper 設定を含むオブジェクトで呼び出されます。デフォルトを使用およびマージするのに役立ちます。関数は Popper の設定オブジェクトを返す必要があります。
sanitizebooleantrueコンテンツサニタイゼーションを有効にします。true の場合、templatecontenttitle オプションがサニタイズされます。
コンテンツサニタイゼーションを無効にする際は注意してください。 詳細については、OWASP のクロスサイトスクリプティング防止チートシートを参照してください。コンテンツサニタイゼーションを無効にすることによってのみ発生する脆弱性は、Bootstrap のセキュリティモデルのスコープ内とは見なされません。
sanitizeFnnull, functionnull代替のコンテンツサニタイゼーション関数を提供します。これは、専用のライブラリを使用してサニタイゼーションを実行したい場合に便利です。
selectorstring, falsefalseセレクターが提供されている場合、tooltip オブジェクトは指定されたターゲットに委譲されます。実際には、これは動的に追加された DOM 要素にも tooltip を適用するために使用されます(jQuery.on サポート)。この issueおよび有益な例を参照してください。注意: title 属性はセレクターとして使用してはいけません。
templatestring'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'tooltip を作成する際に使用するベース HTML。tooltip の title.tooltip-inner に挿入されます。.tooltip-arrow は tooltip の矢印になります。最も外側のラッパー要素は .tooltip クラスと role="tooltip" を持つ必要があります。
titlestring, element, function''tooltip のタイトル。関数が指定されている場合、popover がアタッチされている要素への this 参照が設定された状態で呼び出されます。
triggerstring'hover focus'tooltip のトリガー方法: click、hover、focus、manual。複数のトリガーを渡すことができます。スペースで区切ってください。'manual' は、tooltip が .tooltip('show').tooltip('hide').tooltip('toggle') メソッドを介してプログラム的にトリガーされることを示します。この値は他のトリガーと組み合わせることはできません。'hover' 単独では、キーボードでトリガーできない tooltip になり、キーボードユーザーに同じ情報を伝える代替方法が存在する場合にのみ使用する必要があります。

個別の tooltip の data 属性

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

popperConfig で関数を使用する

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

メソッド

すべてのAPIメソッドは非同期でトランジションを開始します。 トランジションが開始されるとすぐに呼び出し元に戻りますが、終了する前に戻ります。さらに、トランジション中のコンポーネントに対するメソッド呼び出しは無視されます。JavaScriptドキュメントで詳細を確認してください。

MethodDescription
disable要素の tooltip を表示する機能を削除します。tooltip は、再度有効にした場合にのみ表示できるようになります。
dispose要素の tooltip を非表示にして破棄します(DOM 要素に保存されているデータを削除します)。委譲を使用する tooltip(selector オプションを使用して作成されたもの)は、子孫トリガー要素で個別に破棄できません。
enable要素の tooltip を表示する機能を与えます。Tooltip はデフォルトで有効になっています。
getInstanceDOM 要素に関連付けられた tooltip インスタンスを取得できる Static メソッド。
getOrCreateInstanceDOM 要素に関連付けられた tooltip インスタンスを取得するか、初期化されていない場合は新しいものを作成できる Static メソッド。
hide要素の tooltip を非表示にします。tooltip が実際に非表示になる前に呼び出し元に戻ります(つまり、hidden.bs.tooltip イベントが発生する前)。これは tooltip の「手動」トリガーと見なされます。
setContent初期化後に tooltip のコンテンツを変更する方法を提供します。
show要素の tooltip を表示します。tooltip が実際に表示される前に呼び出し元に戻ります(つまり、shown.bs.tooltip イベントが発生する前)。これは tooltip の「手動」トリガーと見なされます。長さがゼロのタイトルを持つ tooltip は表示されません。
toggle要素の tooltip を切り替えます。tooltip が実際に表示または非表示になる前に呼び出し元に戻ります(つまり、shown.bs.tooltip または hidden.bs.tooltip イベントが発生する前)。これは tooltip の「手動」トリガーと見なされます。
toggleEnabled要素の tooltip を表示または非表示にする機能を切り替えます。
update要素の tooltip の位置を更新します。
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance

// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })

setContent メソッドは object 引数を受け取ります。各プロパティキーは tooltip テンプレート内の有効な string セレクターで、各関連プロパティ値は string | element | function | null です。

イベント

EventDescription
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()