Popover
Dokumentasi dan contoh untuk menambahkan popover Bootstrap, seperti yang ditemukan di iOS, ke elemen apa pun di situs Anda.
Ringkasan
Hal-hal yang perlu diketahui saat menggunakan plugin popover:
- Popover mengandalkan perpustakaan pihak ketiga Popper untuk penentuan posisi. Anda harus menyertakan popper.min.js sebelum
bootstrap.js
, atau menggunakanbootstrap.bundle.min.js
yang berisi Popper. - Popover memerlukan plugin popover sebagai ketergantungan.
- Popover diikutsertakan karena alasan kinerja, jadi Anda harus menginisialisasinya sendiri .
- Panjang nol
title
dancontent
nilai tidak akan pernah menampilkan popover. - Tentukan
container: 'body'
untuk menghindari masalah rendering dalam komponen yang lebih kompleks (seperti grup input, grup tombol, dll.). - Memicu popover pada elemen tersembunyi tidak akan berfungsi.
- Popover untuk
.disabled
ataudisabled
elemen harus dipicu pada elemen pembungkus. - Saat dipicu dari jangkar yang membungkus beberapa garis, popover akan dipusatkan di antara lebar keseluruhan jangkar. Gunakan
.text-nowrap
pada<a>
s Anda untuk menghindari perilaku ini. - Popover harus disembunyikan sebelum elemen terkaitnya dihapus dari DOM.
- Popover dapat dipicu berkat elemen di dalam shadow DOM.
prefers-reduced-motion
kueri media. Lihat bagian
pengurangan gerakan pada dokumentasi aksesibilitas kami .
Teruslah membaca untuk melihat bagaimana popover bekerja dengan beberapa contoh.
Contoh
Aktifkan popover
Seperti disebutkan di atas, Anda harus menginisialisasi popover sebelum dapat digunakan. Salah satu cara untuk menginisialisasi semua popover pada halaman adalah dengan memilihnya berdasarkan data-bs-toggle
atributnya, seperti:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Demo langsung
Kami menggunakan JavaScript yang mirip dengan cuplikan di atas untuk merender popover langsung berikut. Judul diatur melalui data-bs-title
dan isi isi diatur melalui data-bs-content
.
title
atau
data-bs-title
dalam HTML Anda. Saat
title
digunakan, Popper akan menggantinya secara otomatis dengan
data-bs-title
saat elemen dirender.
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Empat arah
Tersedia empat pilihan: atas, kanan, bawah, dan kiri. Arah dicerminkan saat menggunakan Bootstrap di RTL. Atur data-bs-placement
untuk mengubah arah.
<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>
Kebiasaancontainer
Saat Anda memiliki beberapa gaya pada elemen induk yang mengganggu popover, Anda akan ingin menentukan kustom container
sehingga HTML popover muncul di dalam elemen itu. Ini umum di tabel responsif, grup input, dan sejenisnya.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
Situasi lain di mana Anda ingin menyetel kustom eksplisit container
adalah popover di dalam modal dialog , untuk memastikan popover itu sendiri ditambahkan ke modal. Ini sangat penting untuk popover yang berisi elemen interaktif – dialog modal akan menjebak fokus, jadi kecuali jika popover adalah elemen turunan dari modal, pengguna tidak akan dapat memfokuskan atau mengaktifkan elemen interaktif ini.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Popover khusus
Ditambahkan di v5.2.0Anda dapat menyesuaikan tampilan popover menggunakan variabel CSS . Kami menetapkan kelas khusus dengan data-bs-custom-class="custom-popover"
cakupan tampilan khusus kami dan menggunakannya untuk menimpa beberapa variabel CSS lokal.
.custom-popover {
--bs-popover-max-width: 200px;
--bs-popover-border-color: var(--bs-primary);
--bs-popover-header-bg: var(--bs-primary);
--bs-popover-header-color: var(--bs-white);
--bs-popover-body-padding-x: 1rem;
--bs-popover-body-padding-y: .5rem;
}
<button type="button" class="btn btn-secondary"
data-bs-toggle="popover" data-bs-placement="right"
data-bs-custom-class="custom-popover"
data-bs-title="Custom popover"
data-bs-content="This popover is themed via CSS variables.">
Custom popover
</button>
Singkirkan pada klik berikutnya
Gunakan focus
pemicu untuk menutup popover pada klik berikutnya pengguna dari elemen yang berbeda dari elemen sakelar.
Markup khusus diperlukan untuk pemberhentian-pada-klik-berikutnya
Untuk perilaku lintas-browser dan lintas-platform yang tepat, Anda harus menggunakan <a>
tag, bukan tag <button>
, dan Anda juga harus menyertakan tabindex
atribut.
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
const popover = new bootstrap.Popover('.popover-dismiss', {
trigger: 'focus'
})
Elemen yang dinonaktifkan
Elemen dengan disabled
atribut tidak interaktif, artinya pengguna tidak dapat mengarahkan atau mengkliknya untuk memicu popover (atau tooltip). Sebagai solusinya, Anda ingin memicu popover dari wrapper <div>
atau <span>
, idealnya membuat keyboard-focusable menggunakan tabindex="0"
.
Untuk pemicu popover yang dinonaktifkan, Anda juga dapat memilih data-bs-trigger="hover focus"
agar popover muncul sebagai umpan balik visual langsung kepada pengguna Anda karena mereka mungkin tidak mengharapkan untuk mengklik elemen yang dinonaktifkan.
<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>
CSS
Variabel
Ditambahkan di v5.2.0Sebagai bagian dari pendekatan variabel CSS Bootstrap yang berkembang, popover sekarang menggunakan variabel CSS lokal .popover
untuk penyesuaian waktu nyata yang ditingkatkan. Nilai untuk variabel CSS diatur melalui Sass, jadi kustomisasi Sass juga masih didukung.
--#{$prefix}popover-zindex: #{$zindex-popover};
--#{$prefix}popover-max-width: #{$popover-max-width};
@include rfs($popover-font-size, --#{$prefix}popover-font-size);
--#{$prefix}popover-bg: #{$popover-bg};
--#{$prefix}popover-border-width: #{$popover-border-width};
--#{$prefix}popover-border-color: #{$popover-border-color};
--#{$prefix}popover-border-radius: #{$popover-border-radius};
--#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};
--#{$prefix}popover-box-shadow: #{$popover-box-shadow};
--#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};
--#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};
@include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);
--#{$prefix}popover-header-color: #{$popover-header-color};
--#{$prefix}popover-header-bg: #{$popover-header-bg};
--#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};
--#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};
--#{$prefix}popover-body-color: #{$popover-body-color};
--#{$prefix}popover-arrow-width: #{$popover-arrow-width};
--#{$prefix}popover-arrow-height: #{$popover-arrow-height};
--#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);
Variabel Sass
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: var(--#{$prefix}border-color-translucent);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$popover-header-font-size: $font-size-base;
$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;
Penggunaan
Aktifkan popover melalui JavaScript:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Membuat popover berfungsi untuk pengguna keyboard dan teknologi bantu
Untuk mengizinkan pengguna keyboard mengaktifkan popover Anda, Anda hanya boleh menambahkannya ke elemen HTML yang biasanya berfokus pada keyboard dan interaktif (seperti tautan atau kontrol formulir). Meskipun elemen HTML arbitrer (seperti <span>
s) dapat dibuat fokus dengan menambahkan tabindex="0"
atribut, ini akan menambahkan penghentian tab yang berpotensi mengganggu dan membingungkan pada elemen non-interaktif untuk pengguna keyboard, dan sebagian besar teknologi pendukung saat ini tidak mengumumkan konten popover dalam situasi ini . Selain itu, jangan hanya mengandalkan hover
sebagai pemicu popover Anda, karena ini akan membuat mereka tidak mungkin dipicu untuk pengguna keyboard.
Meskipun Anda dapat menyisipkan HTML yang kaya dan terstruktur dalam popover dengan html
opsi tersebut, kami sangat menyarankan agar Anda menghindari menambahkan konten dalam jumlah berlebihan. Cara kerja popover saat ini adalah, setelah ditampilkan, kontennya terikat ke elemen pemicu dengan aria-describedby
atribut. Akibatnya, keseluruhan konten popover akan diumumkan kepada pengguna teknologi pendukung sebagai satu aliran yang panjang dan tidak terputus.
Selain itu, meskipun dimungkinkan untuk juga menyertakan kontrol interaktif (seperti elemen formulir atau tautan) di popover Anda (dengan menambahkan elemen ini ke allowList
atribut dan tag yang diizinkan), perlu diketahui bahwa saat ini popover tidak mengelola urutan fokus keyboard. Ketika pengguna keyboard membuka popover, fokus tetap pada elemen pemicu, dan karena popover biasanya tidak segera mengikuti pemicu dalam struktur dokumen, tidak ada jaminan bahwa bergerak maju/menekanTABakan memindahkan pengguna keyboard ke popover itu sendiri. Singkatnya, hanya menambahkan kontrol interaktif ke popover kemungkinan akan membuat kontrol ini tidak dapat dijangkau/tidak dapat digunakan untuk pengguna keyboard dan pengguna teknologi bantu, atau setidaknya membuat urutan fokus keseluruhan yang tidak logis. Dalam kasus ini, pertimbangkan untuk menggunakan dialog modal sebagai gantinya.
Pilihan
Karena opsi dapat diteruskan melalui atribut data atau JavaScript, Anda dapat menambahkan nama opsi ke data-bs-
, seperti pada data-bs-animation="{value}"
. Pastikan untuk mengubah jenis huruf dari nama opsi dari “ camelCase ” menjadi “ kebab-case ” saat meneruskan opsi melalui atribut data. Misalnya, gunakan data-bs-custom-class="beautifier"
alih-alih data-bs-customClass="beautifier"
.
Pada Bootstrap 5.2.0, semua komponen mendukung atribut data cadangan eksperimentaldata-bs-config
yang dapat menampung konfigurasi komponen sederhana sebagai string JSON. Ketika suatu elemen memiliki data-bs-config='{"delay":0, "title":123}'
dan data-bs-title="456"
atribut, nilai akhir title
akan menjadi 456
dan atribut data yang terpisah akan menimpa nilai yang diberikan pada data-bs-config
. Selain itu, atribut data yang ada dapat menampung nilai JSON seperti data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
sanitizeFn
, dan
allowList
tidak dapat diberikan menggunakan atribut data.
Nama | Jenis | Bawaan | Keterangan |
---|---|---|---|
allowList |
obyek | Nilai default | Objek yang berisi atribut dan tag yang diizinkan. |
animation |
boolean | true |
Terapkan transisi fade CSS ke popover. |
boundary |
string, elemen | 'clippingParents' |
Batas batasan overflow dari popover (hanya berlaku untuk pengubah preventOverflow Popper). Secara default, ini 'clippingParents' dan dapat menerima referensi HTMLElement (hanya melalui JavaScript). Untuk informasi lebih lanjut, lihat dokumen detectOverflow Popper . |
container |
string, elemen, salah | false |
Menambahkan popover ke elemen tertentu. Contoh: container: 'body' . Opsi ini sangat berguna karena memungkinkan Anda untuk memposisikan popover dalam aliran dokumen di dekat elemen pemicu - yang akan mencegah popover melayang menjauh dari elemen pemicu selama pengubahan ukuran jendela. |
content |
string, elemen, fungsi | '' |
Nilai konten default jika data-bs-content atribut tidak ada. Jika suatu fungsi diberikan, itu akan dipanggil dengan this referensi yang disetel ke elemen tempat popover dilampirkan. |
customClass |
string, fungsi | '' |
Tambahkan kelas ke popover saat ditampilkan. Perhatikan bahwa kelas-kelas ini akan ditambahkan sebagai tambahan untuk setiap kelas yang ditentukan dalam template. Untuk menambahkan beberapa kelas, pisahkan dengan spasi: 'class-1 class-2' . Anda juga dapat melewatkan fungsi yang seharusnya mengembalikan satu string yang berisi nama kelas tambahan. |
delay |
nomor, objek | 0 |
Penundaan menampilkan dan menyembunyikan popover (ms)—tidak berlaku untuk jenis pemicu manual. Jika nomor diberikan, penundaan diterapkan pada kedua sembunyikan/tampilkan. Struktur objek adalah: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
string, larik | ['top', 'right', 'bottom', 'left'] |
Tentukan penempatan pengganti dengan memberikan daftar penempatan dalam larik (dalam urutan preferensi). Untuk informasi lebih lanjut, lihat dokumen perilaku Popper . |
html |
boolean | false |
Izinkan HTML di popover. Jika benar, tag HTML di popover title akan ditampilkan di popover. Jika salah, innerText properti akan digunakan untuk memasukkan konten ke dalam DOM. Gunakan teks jika Anda khawatir tentang serangan XSS. |
offset |
nomor, string, fungsi | [0, 0] |
Offset popover relatif terhadap targetnya. Anda dapat meneruskan string dalam atribut data dengan nilai yang dipisahkan koma seperti: data-bs-offset="10,20" . Ketika sebuah fungsi digunakan untuk menentukan offset, itu dipanggil dengan objek yang berisi penempatan popper, referensi, dan popper rect sebagai argumen pertamanya. Node DOM elemen pemicu dilewatkan sebagai argumen kedua. Fungsi harus mengembalikan array dengan dua angka: skidding , distance . Untuk informasi lebih lanjut, lihat dokumen offset Popper . |
placement |
string, fungsi | 'top' |
Cara memposisikan popover: otomatis, atas, bawah, kiri, kanan. Ketika auto ditentukan, itu akan secara dinamis mengorientasikan ulang popover. Ketika suatu fungsi digunakan untuk menentukan penempatan, itu dipanggil dengan simpul DOM popover sebagai argumen pertamanya dan elemen pemicu simpul DOM sebagai argumen kedua. Konteks this diatur ke instance popover. |
popperConfig |
null, objek, fungsi | null |
Untuk mengubah konfigurasi Popper default Bootstrap, lihat Konfigurasi Popper . Ketika sebuah fungsi digunakan untuk membuat konfigurasi Popper, itu dipanggil dengan objek yang berisi konfigurasi Popper default Bootstrap. Ini membantu Anda menggunakan dan menggabungkan default dengan konfigurasi Anda sendiri. Fungsi harus mengembalikan objek konfigurasi untuk Popper. |
sanitize |
boolean | true |
Mengaktifkan atau menonaktifkan sanitasi. Jika diaktifkan 'template' , 'content' dan 'title' opsi akan dibersihkan. |
sanitizeFn |
nol, fungsi | null |
Di sini Anda dapat menyediakan fungsi sanitasi Anda sendiri. Ini dapat berguna jika Anda lebih suka menggunakan perpustakaan khusus untuk melakukan sanitasi. |
selector |
string, salah | false |
Jika pemilih disediakan, objek popover akan didelegasikan ke target yang ditentukan. Dalam praktiknya, ini juga digunakan untuk menerapkan popover ke elemen DOM yang ditambahkan secara dinamis ( jQuery.on dukungan). Lihat edisi ini dan contoh yang informatif . |
template |
rangkaian | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
Dasar HTML untuk digunakan saat membuat popover. Popover title akan disuntikkan ke file .popover-inner . .popover-arrow akan menjadi panah popover. Elemen pembungkus terluar harus memiliki .popover kelas dan role="popover" . |
title |
string, elemen, fungsi | '' |
Nilai judul default jika title atribut tidak ada. Jika suatu fungsi diberikan, itu akan dipanggil dengan this referensi yang disetel ke elemen tempat popover dilampirkan. |
trigger |
rangkaian | 'hover focus' |
Bagaimana popover dipicu: klik, arahkan kursor, fokus, manual. Anda dapat melewati beberapa pemicu; pisahkan dengan spasi. 'manual' menunjukkan bahwa popover akan dipicu secara terprogram melalui .popover('show') , .popover('hide') dan .popover('toggle') metode; nilai ini tidak dapat digabungkan dengan pemicu lainnya. 'hover' dengan sendirinya akan menghasilkan popover yang tidak dapat dipicu melalui keyboard, dan hanya boleh digunakan jika ada metode alternatif untuk menyampaikan informasi yang sama untuk pengguna keyboard. |
Atribut data untuk popover individu
Opsi untuk popover individual dapat ditentukan secara alternatif melalui penggunaan atribut data, seperti yang dijelaskan di atas.
Menggunakan fungsi denganpopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metode
Metode dan transisi asinkron
Semua metode API tidak sinkron dan memulai transisi . Mereka kembali ke penelepon segera setelah transisi dimulai tetapi sebelum berakhir . Selain itu, pemanggilan metode pada komponen transisi akan diabaikan .
Lihat dokumentasi JavaScript kami untuk informasi lebih lanjut .
metode | Keterangan |
---|---|
disable |
Menghapus kemampuan popover elemen untuk ditampilkan. Popover hanya akan dapat ditampilkan jika diaktifkan kembali. |
dispose |
Menyembunyikan dan menghancurkan popover elemen (Menghapus data yang tersimpan di elemen DOM). Popover yang menggunakan delegasi (yang dibuat menggunakan opsi selector ) tidak dapat dimusnahkan satu per satu pada elemen pemicu turunan. |
enable |
Memberikan popover elemen kemampuan untuk ditampilkan. Popover diaktifkan secara default. |
getInstance |
Metode statis yang memungkinkan Anda mendapatkan instance popover yang terkait dengan elemen DOM. |
getOrCreateInstance |
Metode statis yang memungkinkan Anda mendapatkan instance popover yang terkait dengan elemen DOM, atau membuat yang baru jika tidak diinisialisasi. |
hide |
Menyembunyikan popover elemen. Kembali ke pemanggil sebelum popover sebenarnya disembunyikan (yaitu sebelum hidden.bs.popover acara terjadi). Ini dianggap sebagai pemicu "manual" dari popover. |
setContent |
Memberikan cara untuk mengubah konten popover setelah inisialisasi. |
show |
Mengungkapkan popover elemen. Kembali ke pemanggil sebelum popover benar-benar ditampilkan (yaitu sebelum shown.bs.popover acara terjadi). Ini dianggap sebagai pemicu "manual" dari popover. Popover yang judul dan kontennya sama-sama panjangnya nol tidak pernah ditampilkan. |
toggle |
Mengalihkan popover elemen. Kembali ke pemanggil sebelum popover benar-benar ditampilkan atau disembunyikan (yaitu sebelum shown.bs.popover atau hidden.bs.popover peristiwa terjadi). Ini dianggap sebagai pemicu "manual" dari popover. |
toggleEnabled |
Mengalihkan kemampuan popover elemen untuk ditampilkan atau disembunyikan. |
update |
Memperbarui posisi popover elemen. |
// getOrCreateInstance example
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance
// setContent example
myPopover.setContent({
'.popover-header': 'another title',
'.popover-body': 'another content'
})
setContent
menerima
object
argumen, di mana setiap kunci properti adalah
string
pemilih yang valid dalam template popover, dan setiap nilai properti terkait dapat
string
|
element
|
function
|
null
Acara
Peristiwa | Keterangan |
---|---|
hide.bs.popover |
Acara ini dipecat segera ketika hide metode instance telah dipanggil. |
hidden.bs.popover |
Acara ini dipicu ketika popover telah selesai disembunyikan dari pengguna (akan menunggu transisi CSS selesai). |
inserted.bs.popover |
Acara ini dipicu setelah show.bs.popover acara ketika template popover telah ditambahkan ke DOM. |
show.bs.popover |
Acara ini langsung aktif ketika show metode instance dipanggil. |
shown.bs.popover |
Acara ini dipicu ketika popover telah dibuat terlihat oleh pengguna (akan menunggu transisi CSS selesai). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})