Bootstrapでポップオーバー(Popovers)を作る方法
Contents
Bootstrapでポップオーバー(Popovers)を作る方法
デモ
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Bootstrap Popover 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>
</head>
<body>
<div class="container">
<div class="row">
<div><h4>サンプル1:デフォルト</h4></div>
<div>
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="ポップオーバータイトル" data-bs-content="ポップオーバーの内容">クリックで表示⇔非表示</button>
</div>
<script type="text/javascript">
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
});
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル2:jQuery</h4></div>
<div>
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle2="popover" title="ポップオーバータイトル" data-bs-content="ポップオーバーの内容">クリックで表示⇔非表示</button>
</div>
<!-- jQueryを利用するのでjQueryを読み込む -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript">
window.addEventListener("load", function () {
$('[data-bs-toggle2="popover"]').popover();
});
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル3:表示位置</h4></div>
<div>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="auto" data-bs-content="ポップオーバー(自動)">
ポップオーバー表示(自動)
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="ポップオーバー(上部)">
ポップオーバー表示(上部)
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="ポップオーバー(右側)">
ポップオーバー表示(右側)
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="ポップオーバー(下部)">
ポップオーバー表示(下部)
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="ポップオーバー(左側)">
ポップオーバー表示(左側)
</button>
</div>
<script type="text/javascript">
window.addEventListener("load", function () {
$('.btn-secondary').popover();
});
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル4:トリガー</h4></div>
<div>
<a tabindex="0" id="myPopover1" class="btn btn-lg btn-primary" role="button" data-bs-toggle="popover" data-bs-trigger="focus " title="消せるポップオーバー" data-bs-content="フォーカスで表示、別オブジェクトにフォーカスを当てると、非表示">フォーカス(Focus)</a>
<a tabindex="0" id="myPopover2" class="btn btn-lg btn-primary" role="button" data-bs-toggle="popover" data-bs-trigger="hover " title="消せるポップオーバー" data-bs-content="ホーバーすると表示⇔非表示になります">ホーバー(Hover)</a>
</div>
<script type="text/javascript">
var popoveerFocus = new bootstrap.Popover("#myPopover1");
var popoveerHover = new bootstrap.Popover("#myPopover2");
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル5:HTML</h4></div>
<div>
<button type="button" id="myPopover3" class="btn btn-lg btn-danger" data-bs-html="true" title="ポップオーバー<br />タイトル" data-bs-content="ポップオーバーの内容<br />HTMLタグも利用可能">クリックで表示⇔非表示</button>
</div>
<script type="text/javascript">
var popoveerFocus = new bootstrap.Popover("#myPopover3");
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル6:無効化(Disabled)</h4></div>
<div>
<span id="myPopover4" title="ポップオーバータイトル" data-bs-content="無効なのでボタンは押せません" data-bs-trigger="hover ">
<button class='btn btn-warning' disabled>ボタン(無効化)</button>
</span>
</div>
<script type="text/javascript">
var popoveerFocus = new bootstrap.Popover("#myPopover4");
</script>
</div><!-- row -->
<div class="row">
<div><h4>サンプル7:Javascript</h4></div>
<div>
<a id="myPopover5" href='#'> 表示済みポップオーバー</a>
</div>
<script type="text/javascript">
var options = {
title:'ポップオーバータイトル'
,content: 'ポップオーバー内容<br /><strong>HTMLタグ</strong>も利用可能'
,html:true
,placement:'left'
,delay :{ "show": 100, "hide": 500 }
,trigger:'manual'
};
var popoveerJvSrpt = new bootstrap.Popover("#myPopover5",options);
popoveerJvSrpt.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
id="btnExample"
type="button"
data-bs-toggle="popover"
title="ポップオーバータイトル"
data-bs-content="ポップオーバーの内容">
ボタン
</button>
ポップオーバーを設定したいオブジェクトに「title」と「data-bs-content」を設定し、「title」にはポップオーバーのタイトルを、「data-bs-content」にはポップオーバーの内容を設定してください。
ポップオーバー初期化
Javascriptの場合
Popoverの初期化をしてください。
<script type="text/javascript">
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
});
</script>
対象エレメントを取得し、「new bootstrap.Popover)」を実行し、初期化すれば、ツールチップ設定完了です。
一つのエレメントに対して初期化する場合には、以下のようにシンプルな構文で構いません。
<script type="text/javascript">
var popoveer = new bootstrap.Popover("#btnExample");
</script>
jQueryの場合
jQueryでも初期化できます。
<script type="text/javascript">
window.addEventListener("load", function () {
$('[data-bs-toggle="popover"]').popover();
});
</script>
表示位置
オプションの「placement」または属性「data-bs-placement」を設定すれば、ポップオーバーの表示位置を設定できます。
top | 上部 |
right | 右側 |
bottom | 下部 |
left | 左側 |
auto | 表示位置自動調整 |
ポップオーバーの表示トリガー
オプションの「trigger」または属性「data-bs-trigger」を設定すれば、ポップオーバーの表示トリガーを変更できます。
trigger | 説明 |
---|---|
click | クリックするたびにポップオーバーが表示/非表示する |
focus | フォーカスが当たったり、外れたりするたびにポップオーバーが表示/非表示する |
hover | オブジェクトにポイントが乗ったり外れたりするたびに、ポップオーバーが表示/非表示する |
manual | ポップオーバーを表示させたり、非表示させるには、Javascriptでコーディングしなければならない |
HTMLタグ有効化
ポップオーバーのタイトルおよび内容にもHTMLタグを利用することもできます。
オプションの「html」または属性「data-bs-html」を設定し、値を『true』とすれば、HTMLタグが有効になります。
<button type="button"
data-bs-html="true"
title="ポップオーバー<br />タイトル"
data-bs-content="ポップオーバーの内容<br />HTMLタグも利用可能"
>
クリックで表示⇔非表示
</button>
無効化されたオブジェクトにポップオーバーを設定するには?
「disabled」が設定されていて、無効化されたオブジェクトには、ポップオーバーが設定できません。
そのため、無効化されたオブジェクトをspanタグでラップすることで、ポップオーバーが設定できません。
<span
title="ポップオーバータイトル"
data-bs-content="無効なのでボタンは押せません"
data-bs-trigger="hover ">
<button disabled>ボタン(無効化)</button>
</span>
Javascriptで設定する方法
属性ではなく、Javascriptでオプションを指定することでも、ポップオーバーのタイトルや内容を設定することもできます。
<a id="myPopover5" href='#'> 表示済みポップオーバー</a>
<script type="text/javascript">
var options = {
title:'ポップオーバータイトル'
,content: 'ポップオーバー内容<br /><strong>HTMLタグ</strong>も利用可能'
,html:true
,placement:'left'
,delay :{ "show": 100, "hide": 500 }
,trigger:'manual'
};
var popoveerJvSrpt = new bootstrap.Popover("#myPopover5",options);
popoveerJvSrpt.show();
</script>
オプション
初期化時に指定するオプションについては、以下のレファレンスを参照してください。
ご参考
関連ページ
- フレームワークBootstrap5の導入方法
- Bootstrapでツールチップ(Tooltip)を作る方法
- jQuery UIでTooltip(ツールチップ)を実装する方法
- jQuery UIでTooltip(ツールチップ)を表示する位置を設定する方法
- jQueryプラグイン「Tooltipster」を使ってツールチップを実装する方法