Popovers
Dokumentasi dan contoh untuk menambahkan popover Bootstrap, seperti yang terdapat dalam iOS, pada mana-mana elemen di tapak anda.
Gambaran keseluruhan
Perkara yang perlu diketahui apabila menggunakan pemalam popover:
- Popovers bergantung pada pustaka pihak ketiga Popper untuk kedudukan. Anda mesti menyertakan popper.min.js sebelum
bootstrap.js
, atau gunakanbootstrap.bundle.min.js
yang mengandungi Popper. - Popovers memerlukan pemalam popover sebagai kebergantungan.
- Popovers mengikut serta atas sebab prestasi, jadi anda mesti memulakannya sendiri .
- Panjang sifar
title
dancontent
nilai tidak akan menunjukkan popover. - Tentukan
container: 'body'
untuk mengelakkan masalah rendering dalam komponen yang lebih kompleks (seperti kumpulan input kami, kumpulan butang, dll). - Mencetuskan popover pada elemen tersembunyi tidak akan berfungsi.
- Popover untuk
.disabled
ataudisabled
elemen mesti dicetuskan pada elemen pembalut. - Apabila dicetuskan daripada sauh yang membalut berbilang baris, popover akan dipusatkan di antara lebar keseluruhan sauh. Gunakan
.text-nowrap
pada<a>
s anda untuk mengelakkan tingkah laku ini. - Popover mesti disembunyikan sebelum elemen yang sepadan dialih keluar daripada DOM.
- Popover boleh dicetuskan terima kasih kepada elemen dalam DOM bayangan.
prefers-reduced-motion
pertanyaan media. Lihat bahagian
gerakan yang dikurangkan dalam dokumentasi kebolehaksesan kami .
Teruskan membaca untuk melihat cara popover berfungsi dengan beberapa contoh.
Contoh
Dayakan popovers
Seperti yang dinyatakan di atas, anda mesti memulakan popover sebelum ia boleh digunakan. Satu cara untuk memulakan semua popover pada halaman adalah dengan memilihnya mengikut 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 serupa dengan coretan di atas untuk memaparkan popover langsung berikut. Tajuk ditetapkan melalui data-bs-title
dan kandungan badan ditetapkan melalui data-bs-content
.
title
atau
data-bs-title
dalam HTML anda. Apabila
title
digunakan, Popper akan menggantikannya secara automatik dengan
data-bs-title
apabila elemen itu dipaparkan.
<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
Empat pilihan tersedia: atas, kanan, bawah dan kiri. Arah dicerminkan apabila menggunakan Bootstrap dalam RTL. Tetapkan data-bs-placement
untuk menukar 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>
Adatcontainer
Apabila anda mempunyai beberapa gaya pada elemen induk yang mengganggu popover, anda perlu menentukan tersuai container
supaya HTML popover muncul dalam elemen itu. Ini adalah perkara biasa dalam jadual responsif, kumpulan input dan seumpamanya.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
Satu lagi situasi di mana anda ingin menetapkan adat eksplisit container
ialah popover dalam dialog modal , untuk memastikan bahawa popover itu sendiri dilampirkan pada modal. Ini amat penting untuk popover yang mengandungi unsur interaktif – dialog ragam akan memerangkap fokus, jadi melainkan jika popover ialah elemen anak bagi ragam, pengguna tidak akan dapat memfokus atau mengaktifkan elemen interaktif ini.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Popover tersuai
Ditambah dalam v5.2.0Anda boleh menyesuaikan penampilan popover menggunakan pembolehubah CSS . Kami menetapkan kelas tersuai dengan data-bs-custom-class="custom-popover"
skop penampilan tersuai kami dan menggunakannya untuk mengatasi beberapa pembolehubah CSS setempat.
.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>
Tolak pada klik seterusnya
Gunakan focus
pencetus untuk mengetepikan popover pada klik seterusnya pengguna bagi elemen yang berbeza daripada elemen togol.
Penanda khusus diperlukan untuk dismiss-on-next-click
Untuk kelakuan merentas penyemak imbas dan merentas platform yang betul, anda mesti menggunakan <a>
teg, bukan teg<button>
, dan anda juga mesti memasukkan 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 dilumpuhkan
Elemen dengan disabled
atribut tidak interaktif, bermakna pengguna tidak boleh menuding atau mengkliknya untuk mencetuskan popover (atau petua alat). Sebagai penyelesaian, anda perlu mencetuskan popover daripada pembalut <div>
atau <span>
, yang idealnya boleh difokuskan papan kekunci menggunakan tabindex="0"
.
Untuk pencetus popover yang dilumpuhkan, anda juga boleh memilih data-bs-trigger="hover focus"
supaya popover muncul sebagai maklum balas visual segera kepada pengguna anda kerana mereka mungkin tidak menjangkakan untuk mengklik pada elemen yang dilumpuhkan.
<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
Pembolehubah
Ditambah dalam v5.2.0Sebagai sebahagian daripada pendekatan pembolehubah CSS Bootstrap yang berkembang, popover kini menggunakan pembolehubah CSS tempatan .popover
untuk penyesuaian masa nyata yang dipertingkatkan. Nilai untuk pembolehubah CSS ditetapkan melalui Sass, jadi penyesuaian Sass masih disokong juga.
--#{$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);
Pembolehubah 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
Dayakan popovers melalui JavaScript:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Membuat popover berfungsi untuk papan kekunci dan pengguna teknologi bantuan
Untuk membenarkan pengguna papan kekunci mengaktifkan popover anda, anda hanya perlu menambahkannya pada elemen HTML yang secara tradisinya boleh memfokus papan kekunci dan interaktif (seperti pautan atau kawalan borang). Walaupun elemen HTML sewenang-wenangnya (seperti <span>
s) boleh dibuat boleh difokuskan dengan menambahkan tabindex="0"
atribut, ini akan menambah hentian tab yang berpotensi menjengkelkan dan mengelirukan pada elemen bukan interaktif untuk pengguna papan kekunci, dan kebanyakan teknologi bantuan pada masa ini tidak mengumumkan kandungan popover dalam situasi ini. . Selain itu, jangan bergantung semata-mata hover
sebagai pencetus popover anda, kerana ini akan menjadikannya mustahil untuk dicetuskan untuk pengguna papan kekunci.
Walaupun anda boleh memasukkan HTML yang kaya dan berstruktur dalam popover dengan html
pilihan, kami amat mengesyorkan agar anda mengelak daripada menambah jumlah kandungan yang berlebihan. Cara popover berfungsi pada masa ini ialah, setelah dipaparkan, kandungannya terikat pada elemen pencetus dengan aria-describedby
atribut. Akibatnya, keseluruhan kandungan popover akan diumumkan kepada pengguna teknologi bantuan sebagai satu aliran yang panjang dan tanpa gangguan.
Selain itu, walaupun mungkin juga untuk memasukkan kawalan interaktif (seperti elemen bentuk atau pautan) dalam popover anda (dengan menambahkan elemen ini pada allowList
atribut dan teg yang dibenarkan), ambil perhatian bahawa pada masa ini popover tidak mengurus susunan fokus papan kekunci. Apabila pengguna papan kekunci membuka popover, fokus kekal pada elemen pencetus, dan memandangkan popover biasanya tidak serta-merta mengikut pencetus dalam struktur dokumen, tiada jaminan bahawa bergerak ke hadapan/menekanTABakan memindahkan pengguna papan kekunci ke dalam popover itu sendiri. Ringkasnya, hanya menambah kawalan interaktif pada popover berkemungkinan menjadikan kawalan ini tidak dapat dicapai/tidak boleh digunakan untuk pengguna papan kekunci dan pengguna teknologi bantuan, atau sekurang-kurangnya membuat susunan fokus keseluruhan yang tidak logik. Dalam kes ini, pertimbangkan untuk menggunakan dialog modal.
Pilihan
Memandangkan pilihan boleh dihantar melalui atribut data atau JavaScript, anda boleh menambahkan nama pilihan pada data-bs-
, seperti dalam data-bs-animation="{value}"
. Pastikan anda menukar jenis kes bagi nama pilihan daripada " camelCase " kepada " kebab-case " apabila menghantar pilihan melalui atribut data. Sebagai contoh, gunakan data-bs-custom-class="beautifier"
bukannya data-bs-customClass="beautifier"
.
Mulai Bootstrap 5.2.0, semua komponen menyokong atribut data simpanan percubaandata-bs-config
yang boleh menempatkan konfigurasi komponen ringkas sebagai rentetan JSON. Apabila elemen mempunyai data-bs-config='{"delay":0, "title":123}'
dan data-bs-title="456"
atribut, nilai akhir title
akan menjadi 456
dan atribut data yang berasingan akan mengatasi nilai yang diberikan pada data-bs-config
. Selain itu, atribut data sedia ada dapat menempatkan nilai JSON seperti data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
sanitizeFn
, dan
allowList
pilihan tidak boleh dibekalkan menggunakan atribut data.
Nama | taip | Lalai | Penerangan |
---|---|---|---|
allowList |
objek | Nilai asal | Objek yang mengandungi atribut dan tag yang dibenarkan. |
animation |
boolean | true |
Gunakan peralihan pudar CSS ke popover. |
boundary |
rentetan, unsur | 'clippingParents' |
Sempadan kekangan limpahan popover (hanya digunakan untuk pengubah suai preventOverflow Popper). Secara lalai, ia 'clippingParents' dan boleh menerima rujukan HTMLElement (melalui JavaScript sahaja). Untuk maklumat lanjut rujuk kepada Popper's detectOverflow docs . |
container |
rentetan, unsur, palsu | false |
Menambah popover pada elemen tertentu. Contoh: container: 'body' . Pilihan ini amat berguna kerana ia membolehkan anda meletakkan popover dalam aliran dokumen berhampiran elemen pencetus - yang akan menghalang popover daripada terapung daripada elemen pencetus semasa saiz semula tetingkap. |
content |
rentetan, unsur, fungsi | '' |
Nilai kandungan lalai jika data-bs-content atribut tidak ada. Jika fungsi diberikan, ia akan dipanggil dengan this set rujukannya kepada elemen yang dilampirkan popover. |
customClass |
rentetan, fungsi | '' |
Tambahkan kelas pada popover apabila ia ditunjukkan. Ambil perhatian bahawa kelas ini akan ditambah sebagai tambahan kepada mana-mana kelas yang dinyatakan dalam templat. Untuk menambah berbilang kelas, pisahkan mereka dengan ruang: 'class-1 class-2' . Anda juga boleh lulus fungsi yang harus mengembalikan rentetan tunggal yang mengandungi nama kelas tambahan. |
delay |
nombor, objek | 0 |
Kelewatan menunjukkan dan menyembunyikan popover (ms)—tidak digunakan untuk jenis pencetus manual. Jika nombor dibekalkan, kelewatan dikenakan pada kedua-dua sembunyi/tunjukkan. Struktur objek ialah: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
rentetan, tatasusunan | ['top', 'right', 'bottom', 'left'] |
Tentukan peletakan sandaran dengan menyediakan senarai peletakan dalam tatasusunan (mengikut keutamaan). Untuk maklumat lanjut rujuk kepada dokumen tingkah laku Popper . |
html |
boolean | false |
Benarkan HTML dalam popover. Jika benar, teg HTML dalam popover title akan dipaparkan dalam popover. Jika palsu, innerText harta akan digunakan untuk memasukkan kandungan ke dalam DOM. Gunakan teks jika anda bimbang tentang serangan XSS. |
offset |
nombor, rentetan, fungsi | [0, 0] |
Mengimbangi popover berbanding sasarannya. Anda boleh menghantar rentetan dalam atribut data dengan nilai dipisahkan koma seperti: data-bs-offset="10,20" . Apabila fungsi digunakan untuk menentukan ofset, ia dipanggil dengan objek yang mengandungi peletakan popper, rujukan, dan popper rects sebagai hujah pertamanya. Nod DOM elemen pencetus diluluskan sebagai hujah kedua. Fungsi mesti mengembalikan tatasusunan dengan dua nombor: tergelincir , jarak . Untuk maklumat lanjut rujuk kepada dokumen offset Popper . |
placement |
rentetan, fungsi | 'top' |
Cara meletakkan popover: auto, atas, bawah, kiri, kanan. Apabila auto ditentukan, ia akan mengorientasikan semula popover secara dinamik. Apabila fungsi digunakan untuk menentukan peletakan, ia dipanggil dengan nod DOM popover sebagai hujah pertamanya dan nod DOM elemen pencetus sebagai yang kedua. Konteks ditetapkan this kepada contoh popover. |
popperConfig |
null, objek, fungsi | null |
Untuk menukar konfigurasi Popper lalai Bootstrap, lihat konfigurasi Popper . Apabila fungsi digunakan untuk mencipta konfigurasi Popper, ia dipanggil dengan objek yang mengandungi konfigurasi Popper lalai Bootstrap. Ia membantu anda menggunakan dan menggabungkan lalai dengan konfigurasi anda sendiri. Fungsi mesti mengembalikan objek konfigurasi untuk Popper. |
sanitize |
boolean | true |
Dayakan atau lumpuhkan sanitasi. Jika diaktifkan 'template' , 'content' dan 'title' pilihan akan dibersihkan. |
sanitizeFn |
null, fungsi | null |
Di sini anda boleh membekalkan fungsi sanitasi anda sendiri. Ini boleh berguna jika anda lebih suka menggunakan perpustakaan khusus untuk melakukan sanitasi. |
selector |
rentetan, palsu | false |
Jika pemilih disediakan, objek popover akan diwakilkan kepada sasaran yang ditentukan. Dalam amalan, ini digunakan untuk turut menggunakan popover pada elemen DOM yang ditambah secara dinamik ( jQuery.on sokongan). Lihat isu ini dan contoh bermaklumat . |
template |
tali | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
HTML asas untuk digunakan semasa membuat popover. Popover title akan disuntik ke dalam .popover-inner . .popover-arrow akan menjadi anak panah popover. Elemen pembungkus paling luar harus mempunyai .popover kelas dan role="popover" . |
title |
rentetan, unsur, fungsi | '' |
Nilai tajuk lalai jika title atribut tidak ada. Jika fungsi diberikan, ia akan dipanggil dengan this set rujukannya kepada elemen yang dilampirkan popover. |
trigger |
tali | 'hover focus' |
Cara popover dicetuskan: klik, tuding, fokus, manual. Anda boleh melepasi pelbagai pencetus; pisahkan mereka dengan ruang. 'manual' menunjukkan bahawa popover akan dicetuskan secara pemprograman melalui kaedah .popover('show') , .popover('hide') dan .popover('toggle') ; nilai ini tidak boleh digabungkan dengan mana-mana pencetus lain. 'hover' dengan sendirinya akan menghasilkan popover yang tidak boleh dicetuskan melalui papan kekunci, dan hanya boleh digunakan jika kaedah alternatif untuk menyampaikan maklumat yang sama untuk pengguna papan kekunci ada. |
Atribut data untuk popover individu
Pilihan untuk popover individu boleh 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
}
})
Kaedah
Kaedah dan peralihan tak segerak
Semua kaedah API adalah tak segerak dan mulakan peralihan . Mereka kembali kepada pemanggil sebaik sahaja peralihan dimulakan tetapi sebelum ia tamat . Selain itu, panggilan kaedah pada komponen peralihan akan diabaikan .
Lihat dokumentasi JavaScript kami untuk mendapatkan maklumat lanjut .
Kaedah | Penerangan |
---|---|
disable |
Mengalih keluar keupayaan untuk popover elemen untuk ditunjukkan. Popover hanya akan dapat ditunjukkan jika ia didayakan semula. |
dispose |
Menyembunyikan dan memusnahkan popover elemen (Mengalih keluar data yang disimpan pada elemen DOM). Popover yang menggunakan perwakilan (yang dibuat menggunakan pilihan ) tidak selector boleh dimusnahkan secara individu pada elemen pencetus keturunan. |
enable |
Memberi popover elemen keupayaan untuk ditunjukkan. Popovers didayakan secara lalai. |
getInstance |
Kaedah statik yang membolehkan anda mendapatkan contoh popover yang dikaitkan dengan elemen DOM. |
getOrCreateInstance |
Kaedah statik yang membolehkan anda mendapatkan contoh popover yang dikaitkan dengan elemen DOM, atau mencipta yang baharu sekiranya ia tidak dimulakan. |
hide |
Menyembunyikan popover elemen. Kembali kepada pemanggil sebelum popover sebenarnya telah disembunyikan (iaitu sebelum hidden.bs.popover peristiwa berlaku). Ini dianggap sebagai "manual" pencetus popover. |
setContent |
Memberi cara untuk menukar kandungan popover selepas permulaannya. |
show |
Mendedahkan popover elemen. Kembali kepada pemanggil sebelum popover sebenarnya telah ditunjukkan (iaitu sebelum shown.bs.popover peristiwa berlaku). Ini dianggap sebagai "manual" pencetus popover. Popover yang tajuk dan kandungannya sama-sama panjang sifar tidak pernah dipaparkan. |
toggle |
Menogol popover elemen. Kembali kepada pemanggil sebelum popover sebenarnya telah ditunjukkan atau disembunyikan (iaitu sebelum shown.bs.popover atau hidden.bs.popover peristiwa berlaku). Ini dianggap sebagai "manual" pencetus popover. |
toggleEnabled |
Togol keupayaan untuk popover elemen untuk ditunjukkan atau disembunyikan. |
update |
Mengemas kini kedudukan 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
ini menerima
object
hujah, di mana setiap kunci harta ialah
string
pemilih yang sah dalam templat popover, dan setiap nilai harta berkaitan boleh
string
|
element
|
function
|
null
Peristiwa
Peristiwa | Penerangan |
---|---|
hide.bs.popover |
Peristiwa ini dicetuskan serta-merta apabila hide kaedah contoh telah dipanggil. |
hidden.bs.popover |
Acara ini dicetuskan apabila popover telah selesai disembunyikan daripada pengguna (akan menunggu peralihan CSS selesai). |
inserted.bs.popover |
Acara ini dicetuskan selepas show.bs.popover acara apabila templat popover telah ditambahkan pada DOM. |
show.bs.popover |
Peristiwa ini menyala serta-merta apabila show kaedah contoh dipanggil. |
shown.bs.popover |
Peristiwa ini dicetuskan apabila popover telah dilihat kepada pengguna (akan menunggu peralihan CSS selesai). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})