ポップオーバー
iOS に見られるような Bootstrap ポップオーバーをサイトの任意の要素に追加するためのドキュメントと例。
概要
popover プラグインを使用する際に知っておくべきこと:
- ポップオーバーは、ポジショニングのためにサードパーティのライブラリPopperに依存しています。ポップオーバーを機能させるには、 popper.min.jsを bootstrap.js の前に含めるか、Popper を含む
bootstrap.bundle.min.js
/を使用する必要があります。bootstrap.bundle.js
- ポップオーバーには、依存関係としてツールチップ プラグインが必要です。
- ポップオーバーはパフォーマンス上の理由からオプトインであるため、自分で初期化する必要があります。
- 長さ
title
とcontent
値がゼロの場合、ポップオーバーは表示されません。 container: 'body'
より複雑なコンポーネント (入力グループ、ボタン グループなど) でのレンダリングの問題を回避するために指定します。- 非表示の要素でポップオーバーをトリガーしても機能しません。
.disabled
または要素のポップオーバーはdisabled
、ラッパー要素でトリガーする必要があります。- 複数の行にまたがるアンカーからトリガーされると、ポップオーバーはアンカーの幅全体の中央に配置されます。この動作を回避するには、 でを使用
.text-nowrap
します。<a>
- 対応する要素が DOM から削除される前に、ポップオーバーを非表示にする必要があります。
- Shadow DOM 内の要素のおかげで、ポップオーバーをトリガーできます。
prefers-reduced-motion
メディア クエリに依存します。アクセシビリティ ドキュメントの縮小モーション セクションを参照してください
。
読み続けて、いくつかの例でポップオーバーがどのように機能するかを確認してください。
例: どこでもポップオーバーを有効にする
ページ上のすべてのポップオーバーを初期化する 1 つの方法は、data-bs-toggle
属性で選択することです。
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
例:container
オプションの使用
親要素にポップオーバーに干渉するスタイルがある場合、container
代わりにポップオーバーの HTML がその要素内に表示されるようにカスタムを指定する必要があります。
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
})
例
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
四方
上揃え、右揃え、下揃え、左揃えの 4 つのオプションを使用できます。RTL で Bootstrap を使用すると、方向がミラーリングされます。
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
Popover on left
</button>
次のクリックで閉じる
トリガーを使用してfocus
、トグル要素とは異なる要素をユーザーが次にクリックしたときにポップオーバーを閉じます。
次のクリックで閉じるには特定のマークアップが必要
クロスブラウザーおよびクロスプラットフォームで適切に動作させるには、タグではなくタグを使用する必要<a>
があり、属性<button>
も含める必要があります。tabindex
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
trigger: 'focus'
})
無効な要素
この属性を持つ要素disabled
はインタラクティブではありません。つまり、ユーザーはそれらをホバーしたりクリックしたりして、ポップオーバー (またはツールヒント) をトリガーすることはできません。回避策として、ラッパーからポップオーバーをトリガーする<div>
か<span>
、理想的には を使用してキーボード フォーカス可能にしtabindex="0"
ます。
無効化されたポップオーバー トリガーの場合、ユーザーは無効化された要素をクリックdata-bs-trigger="hover focus"
することを期待していない可能性があるため、ポップオーバーが即座に視覚的なフィードバックとしてユーザーに表示されるようにすることもできます。
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
サス
変数
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: rgba($black, .2);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$popover-header-bg: shade-color($popover-bg, 6%);
$popover-header-color: $headings-color;
$popover-header-padding-y: .5rem;
$popover-header-padding-x: $spacer;
$popover-body-color: $body-color;
$popover-body-padding-y: $spacer;
$popover-body-padding-x: $spacer;
$popover-arrow-width: 1rem;
$popover-arrow-height: .5rem;
$popover-arrow-color: $popover-bg;
$popover-arrow-outer-color: fade-in($popover-border-color, .05);
使用法
JavaScript でポップオーバーを有効にします。
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
キーボードと支援技術のユーザー向けにポップオーバーを機能させる
キーボード ユーザーがポップオーバーをアクティブにできるようにするには、従来キーボード フォーカス可能でインタラクティブな HTML 要素 (リンクやフォーム コントロールなど) にのみ追加する必要があります。属性を追加することで、任意の HTML 要素 ( <span>
s など) をフォーカス可能にできますがtabindex="0"
、これにより、キーボード ユーザーの非対話型要素に迷惑で紛らわしいタブ ストップが追加される可能性があります。現在、ほとんどの支援技術は、この状況でポップオーバーのコンテンツを通知しません。 . hover
さらに、ポップオーバーのトリガーとしてのみに依存しないでください。キーボード ユーザーがポップオーバーをトリガーできなくなります。
オプションを使用してリッチで構造化された HTML をポップオーバーに挿入できますがhtml
、過剰な量のコンテンツを追加しないことを強くお勧めします。ポップオーバーが現在機能する方法は、一度表示されると、それらのコンテンツがaria-describedby
属性を持つトリガー要素に結び付けられるというものです。その結果、ポップオーバーのコンテンツ全体が、1 つの長く途切れのないストリームとして支援技術ユーザーに通知されます。
さらに、ポップオーバーにインタラクティブなコントロール (フォーム要素やリンクなど) を含めることもできますが (これらの要素をallowList
許可された属性とタグに追加することによって)、現在のところポップオーバーはキーボード フォーカスの順序を管理しないことに注意してください。キーボード ユーザーがポップオーバーを開くと、フォーカスはトリガー要素に残ります。ポップオーバーは通常、ドキュメントの構造内でトリガーのすぐ後に続くわけではないため、前方に移動したり押したりする保証はありません。TABキーボード ユーザーをポップオーバー自体に移動します。要するに、単純にインタラクティブなコントロールをポップオーバーに追加すると、キーボード ユーザーや支援技術のユーザーがこれらのコントロールにアクセスできなくなったり、使用できなくなったり、少なくとも全体的なフォーカス順序が非論理的になる可能性があります。このような場合は、代わりにモーダル ダイアログの使用を検討してください。
オプション
オプションは、データ属性または JavaScript を介して渡すことができます。data-bs-
データ属性の場合、オプション名をのようにに追加しますdata-bs-animation=""
。データ属性を介してオプションを渡すときは、オプション名のケース タイプを camelCase から kebab-case に変更してください。たとえば、 を使用する代わりに、 をdata-bs-customClass="beautifier"
使用しますdata-bs-custom-class="beautifier"
。
sanitize
て
sanitizeFn
ください
allowList
。
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
animation |
ブール値 | true |
ポップオーバーに CSS フェード トランジションを適用する |
container |
文字列 | 要素 | 間違い | false |
ポップオーバーを特定の要素に追加します。例: |
content |
文字列 | 要素 | 関数 | '' |
関数が指定されている場合 |
delay |
数 | 物体 | 0 |
ポップオーバーの表示と非表示の遅延 (ミリ秒) - 手動トリガー タイプには適用されません 数値が指定されている場合、表示/非表示の両方に遅延が適用されます オブジェクト構造は次のとおりです。 |
html |
ブール値 | false |
ポップオーバーに HTML を挿入します。false の場合、innerText プロパティを使用してコンテンツを DOM に挿入します。XSS 攻撃が心配な場合は、テキストを使用してください。 |
placement |
文字列 | 関数 | 'right' |
ポップオーバーの配置方法 - 自動 | トップ | ボトム | 左 | 左 | 右。 配置を決定するために関数が使用される場合、最初の引数として popover DOM ノード、2 番目の引数としてトリガー要素 DOM ノードで関数が呼び出されます。 |
selector |
文字列 | 間違い | false |
セレクターが提供されている場合、ポップオーバー オブジェクトは指定されたターゲットに委譲されます。実際には、これは動的 HTML コンテンツにポップオーバーを追加できるようにするために使用されます。これと有益な例を参照してください。 |
template |
ストリング | '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>' |
ポップオーバーの作成時に使用するベース HTML。 ポップオーバー ポップオーバー
最も外側のラッパー要素には |
title |
文字列 | 要素 | 関数 | '' |
関数が指定されている場合 |
trigger |
ストリング | 'click' |
ポップオーバーのトリガー方法 - クリック | ホバー | フォーカス | マニュアル。複数のトリガーを渡すことができます。スペースで区切ります。manual 他のトリガーと組み合わせることはできません。 |
fallbackPlacements |
配列 | ['top', 'right', 'bottom', 'left'] |
プレースメントのリストを配列 (優先順) で指定して、フォールバック プレースメントを定義します。詳細については、Popper の動作に関するドキュメントを参照してください。 |
boundary |
文字列 | エレメント | 'clippingParents' |
ポップオーバーのオーバーフロー制約境界 (Popper の preventOverflow 修飾子にのみ適用されます)。デフォルトで'clippingParents' は、HTMLElement 参照を受け入れることができます (JavaScript 経由のみ)。詳細については、Popper のdetectOverflow docsを参照してください。 |
customClass |
文字列 | 関数 | '' |
ポップオーバーが表示されたらクラスを追加します。これらのクラスは、テンプレートで指定されたクラスに加えて追加されることに注意してください。複数のクラスを追加するには、クラスをスペースで区切ります: 追加のクラス名を含む単一の文字列を返す関数を渡すこともできます。 |
sanitize |
ブール値 | true |
サニタイズを有効または無効にします。有効'template' にする'content' と、'title' オプションがサニタイズされます。JavaScript ドキュメントのサニタイザーのセクションを参照してください。 |
allowList |
物体 | デフォルト値 | 許可された属性とタグを含むオブジェクト |
sanitizeFn |
null | null | 関数 | null |
ここでは、独自のサニタイズ関数を指定できます。これは、専用のライブラリを使用してサニタイズを実行したい場合に役立ちます。 |
offset |
配列 | 文字列 | 関数 | [0, 8] |
ターゲットに対するポップオーバーのオフセット。次のようなカンマ区切りの値を使用して、データ属性に文字列を渡すことができます。 オフセットを決定するために関数が使用される場合、その関数は、最初の引数としてポッパーの配置、参照、およびポッパーの四角形を含むオブジェクトで呼び出されます。トリガー要素の DOM ノードは、2 番目の引数として渡されます。この関数は、2 つの数値を含む配列を返す必要があります: . 詳細については、Popper のオフセット ドキュメントを参照してください。 |
popperConfig |
null | null | オブジェクト | 関数 | null |
Bootstrap のデフォルトの Popper 設定を変更するには、Popper の設定を参照してください。 関数を使用して Popper 構成を作成する場合、Bootstrap のデフォルトの Popper 構成を含むオブジェクトで呼び出されます。デフォルトを使用して独自の構成にマージするのに役立ちます。この関数は、Popper の構成オブジェクトを返さなければなりません。 |
個々のポップオーバーのデータ属性
個々のポップオーバーのオプションは、上記で説明したように、データ属性を使用して指定することもできます。
関数の使用popperConfig
var popover = new bootstrap.Popover(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
メソッド
非同期メソッドと遷移
すべての API メソッドは非同期であり、遷移を開始します。トランジションが開始されるとすぐに呼び出し元に戻りますが、トランジションが終了する前に戻ります。さらに、遷移中のコンポーネントでのメソッド呼び出しは無視されます。
見せる
要素のポップオーバーを表示します。ポップオーバーが実際に表示される前 (つまり、イベントが発生する前)に呼び出し元に戻ります。shown.bs.popover
これは、ポップオーバーの「手動」トリガーと見なされます。タイトルとコンテンツの長さがどちらもゼロのポップオーバーは表示されません。
myPopover.show()
隠れる
要素のポップオーバーを非表示にします。ポップオーバーが実際に非表示になる前 (つまり、イベントが発生する前)に呼び出し元に戻ります。hidden.bs.popover
これは、ポップオーバーの「手動」トリガーと見なされます。
myPopover.hide()
トグル
要素のポップオーバーを切り替えます。ポップオーバーが実際に表示または非表示になる前 (つまり、orイベントが発生する前)に呼び出し元に戻ります。これは、ポップオーバーの「手動」トリガーと見なされます。shown.bs.popover
hidden.bs.popover
myPopover.toggle()
廃棄
要素のポップオーバーを非表示にして破棄します (DOM 要素に保存されたデータを削除します)。委任を使用するポップオーバー (オプションを使用しselector
て作成される) は、子孫トリガー要素で個別に破棄できません。
myPopover.dispose()
有効
要素のポップオーバーを表示できるようにします。ポップオーバーはデフォルトで有効になっています。
myPopover.enable()
無効にする
要素のポップオーバーを表示する機能を削除します。ポップオーバーは、再度有効にした場合にのみ表示できます。
myPopover.disable()
トグル有効
要素のポップオーバーを表示または非表示にする機能を切り替えます。
myPopover.toggleEnabled()
アップデート
要素のポップオーバーの位置を更新します。
myPopover.update()
getInstance
DOM 要素に関連付けられたポップオーバー インスタンスを取得できる静的メソッド
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
getOrCreateInstance
DOM 要素に関連付けられたポップオーバー インスタンスを取得したり、初期化されていない場合に新しいインスタンスを作成したりできる静的メソッド
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
イベント
イベントタイプ | 説明 |
---|---|
show.bs.popover | show このイベントは、インスタンス メソッドが呼び出されるとすぐに発生します。 |
shown.bs.popover | このイベントは、ポップオーバーがユーザーに表示されるようになったときに発生します (CSS トランジションが完了するのを待ちます)。 |
hide.bs.popover | hide このイベントは、インスタンス メソッドが呼び出されるとすぐに発生します。 |
hidden.bs.popover | このイベントは、ポップオーバーがユーザーから非表示になったときに発生します (CSS トランジションが完了するのを待ちます)。 |
挿入された.bs.popover | このイベントはshow.bs.popover 、ポップオーバー テンプレートが DOM に追加されたときに、イベントの後に発生します。 |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})