Bootstrapでツールチップ(Tooltip)を作る方法
Bootstrapでツールチップ(Tooltip)を作る方法
デモ
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Bootstrap Tooltip demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<!-- JSファイル読み込み -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<style type="text/css">
.red div {
background-color:red;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div><h4>サンプル1(デフォルト)</h4></div>
<div>
<br />
<p>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="ツールチップ(上)">
ツールチップ(上)
</button>
</p>
<p>
<a href="#" data-bs-toggle="tooltip" data-bs-placement="right" title="ツールチップ(右)">
ツールチップ(右)
</a>
</p>
<p>
<img src="https://www.single-life.tokyo/wp-content/uploads/2021/07/DSC04799.jpg" style="width:20%;height:20%" data-bs-toggle="tooltip" data-bs-placement="bottom" title="ツールチップ(下)" />
</p>
<p>
<input type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="ツールチップ(左)" value="ツールチップ(左)" />
</p>
</div>
<script type="text/javascript">
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
});
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル2(HTML)</h4></div>
<p>
<button type="button" class="btn btn-secondary" id="example1" data-bs-html="true" title="<strong>HTML</strong><br />改行あり">
ツールチップ(HTML)
</button>
</p>
<script type="text/javascript">
var options = {delay:{ "show": 100, "hide": 500 }, placement:'right',template:'<div><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',customClass:'red'};
var exampleEl = document.getElementById('example1');
var tooltip = new bootstrap.Tooltip(exampleEl, options);
</script>
<p>
<button type="button" class="btn btn-secondary" id="example2">
ツールチップ(HTML);jQuery
</button>
</p>
<!-- jQueryを利用するのでjQueryを読み込む -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$('#example2').tooltip({html:true,title:'<strong>HTML</strong><br />改行あり<br />jQuery'});
});
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル3(初期表示)</h4></div>
<p>
<button type="button" class="btn btn-secondary" id="example3" title="初期表示">
初期表示ツールチップ
</button>
</p>
<script type="text/javascript">
var options = {delay:{ "show": 100, "hide": 500 }, placement:'auto'};
var exampleEl = document.getElementById('example3');
var tooltip = new bootstrap.Tooltip(exampleEl, options);
tooltip.show();
</script>
</div><!-- row -->
</div><!-- container -->
</body>
</html>
実装方法
Bootstrap導入
まず、BootstrapのCSSファイルとJSファイルを読み込みます。
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
導入方法の詳細は、以下のページをご覧ください。
ツールチップ実装
ツールチップ文字列設定
<button type="button" data-bs-toggle="tooltip" data-bs-placement="top" title="ツールチップ(右)">
ボタンにツールチップ
</button>
まず、ツールチップを設定したいオブジェクトにtitle属性を設定し値にツールチップ内容を設定します。
リンクや画像でも同じようになります。
<a href="#" data-bs-toggle="tooltip" data-bs-placement="right" title="ツールチップ(下)">
<img src="(画像URI)" data-bs-toggle="tooltip" data-bs-placement="bottom" title="ツールチップ(下)" />
ツールチップ初期化
文字列を設定後、最後にJavascriptでTooltipオブジェクトを初期化して、ツールチップを有効化します。
Javascriptの場合
対象エレメントを取得し、初期化します。
<script type="text/javascript">
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
});
</script>
対象エレメントを取得し、「new bootstrap.Tooltip()」を実行し、初期化すれば、ツールチップ設定完了です。
jQueryの場合
<script type="text/javascript">
$(function () {
$('[data-bs-toggle="tooltip"]').tooltip();
});
</script>
jQueryの場合は、セレクタでツールチップを設定したいオブジェクトを選択し、.tooltip()を実行し、初期化してください。
ツールチップにHTMLタグを設定する方法
Javascriptで初期化する際、渡すオプションで、または、HTMLの属性でツールチップのHTMLタグ有効化が可能です。なお、オプションのパラメータ名と属性の名称について、「オプションと属性の関係」をご覧ください。
HTMLの属性で有効化
<button type="button" id="example1" data-bs-html="true" title="<strong>HTML</strong><br />改行あり">
ツールチップ(HTML)
</button>
属性に『data-bs-html』を設定し「true」を設定すれば、ツールチップにHTMLタグが有効化されます。
Javascriptで有効化
<button type="button" id="example2">
ツールチップ(HTML);jQuery
</button>
<script type="text/javascript">
$(function () {
$('#example2').tooltip({html:true,title:'<strong>HTML</strong><br />改行あり<br />jQuery'});
});
</script>
初期化時に指定するオプションで『html』に「true」を設定すると、HTMLタグが有効化されます。
ツールチップのスタイルを変更する方法
オプションの「template」と「customCss」を利用することでスタイルも変更可能です。
ここではツールチップを赤くします。
CSSクラス定義
<style type="text/css">
.red div {
background-color:red;
}
</style>
まず、CSSクラスを定義しておきます。クラス名は「red」で背景色を赤くします。ただし、定義的には、指定クラスの下位のdivオブジェクトに適用するようにします。これは次のパラメータ「template」の定義に依存します。
オプション指定
<script type="text/javascript">
var options = {template:'<div><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',customClass:'red'};
var exampleEl = document.getElementById('example1');
var tooltip = new bootstrap.Tooltip(exampleEl, options);
</script>
まず、オプションで「customClass」に、定義していた『red』クラスを指定します。
また、オプション「template」には、ツールチップのデフォルト定義を指定しておきました。この定義でわかる通り、CSSクラス『red』は最上位のdivオブジェクトの下位のdivオブジェクトに適用されることがわかります。これで赤いツールチップが実現できます。以下のようになります。
オプション
オプションと属性の関係
オプションで指定できるパラメータはHTMLタグ内に属性としても設定可能です。ルールは以下の2つになります。
- Javascriptのオプション名にプレフィックス『data-bs-』を設定する
- オプション名が複数の単語から構成される場合は、単語間にハイフンを付け、かつ、大文字を小文字にする
例えば『customClass』というオプションは『data-bs-custom-class』という属性名に変わります。
なお、「sanitize」と「sanitizeF」、「allowList」はセキュリティの関係上、属性値に設定できません。
オプション紹介
いくつか代表的なオプションを紹介しておきます。
animation
ツールチップ表示、または非表示時、アニメーション効果をするかどうかのオプションです。デフォルトは「true」です。
delay
ツールチップ表示、または非表示されるまでの時間を指定できるオプションです。
デフォルトは「0」で遅延なしです。
指定する場合には「{ “show”: 500, “hide”: 100 }」のように配列で表示時(show)と非表示時(hide)の時間を各々、ミリ秒で指定してください。
html
ツールチップに指定できる文字列に、HTMLタグを利用することができるオプションです。
デフォルトは「false」でHTMLタグを利用することはできません。
placement
ツールチップの表示位置を指定できるオプションです。
デフォルトは「top」で、上部に表示されます。
そのほかには「right」「bottom」「left」も指定可能です。
さらに「auto」も指定可能で、この場合は、位置は自動調整されます。
template
ツールチップを生成する際のHTML定義を指定できるオプションです。
デフォルトは「<div class=”tooltip” role=”tooltip”><div class=”tooltip-arrow”></div><div class=”tooltip-inner”></div></div>」です。
title
ツールチップに表示する文字列を指定できるオプションです。
title属性が存在しない場合、このオプション指定文字列が使用されます。
trigger
ツールチップを表示するイベントを指定できるオプションです。
デフォルトは「hover focus」で、ホーバーイベントと、フォーカスイベントでツールチップが表示/非表示されます。
例えば「click」と指定すれば、クリックイベントでツールチップを表示/非表示させることができるようになります。
customClass
ツールチップにCSSクラスを追加で定義することのできるオプションです。
オプション「template」と合わせて利用するといいでしょう。
offset
ツールチップの表示位置のオフセット値を指定できます。デフォルトは「{0,0]」でX軸もY軸もともに0です。
ご参考
関連ページ
- フレームワークBootstrap5の導入方法
- Bootstrapでポップオーバー(Popovers)を作る方法
- jQuery UIでTooltip(ツールチップ)を実装する方法
- jQuery UIでTooltip(ツールチップ)を表示する位置を設定する方法
- jQueryプラグイン「Tooltipster」を使ってツールチップを実装する方法
- CSSでツールチップ(Tooltip)を自作する方法