Langkau ke kandungan utama Langkau ke navigasi dokumen
Check
in English

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 gunakan bootstrap.bundle.min.jsyang mengandungi Popper.
  • Popovers memerlukan pemalam popover sebagai kebergantungan.
  • Popovers mengikut serta atas sebab prestasi, jadi anda mesti memulakannya sendiri .
  • Panjang sifar titledan contentnilai 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 .disabledatau disabledelemen mesti dicetuskan pada elemen pembalut.
  • Apabila dicetuskan daripada sauh yang membalut berbilang baris, popover akan dipusatkan di antara lebar keseluruhan sauh. Gunakan .text-nowrappada <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.
Secara lalai, komponen ini menggunakan sanitizer kandungan terbina dalam, yang menghilangkan sebarang elemen HTML yang tidak dibenarkan secara jelas. Lihat bahagian sanitizer dalam dokumentasi JavaScript kami untuk mendapatkan butiran lanjut.
Kesan animasi komponen ini bergantung pada prefers-reduced-motionpertanyaan 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-toggleatributnya, 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-titledan kandungan badan ditetapkan melalui data-bs-content.

Jangan ragu untuk menggunakan sama ada titleatau data-bs-titledalam HTML anda. Apabila titledigunakan, Popper akan menggantikannya secara automatik dengan data-bs-titleapabila elemen itu dipaparkan.
html
<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-placementuntuk menukar arah.

html
<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 containersupaya 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 containerialah 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.0

Anda 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;
}
html
<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 focuspencetus 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 tabindexatribut.

html
<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 disabledatribut 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.

html
<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.0

Sebagai sebahagian daripada pendekatan pembolehubah CSS Bootstrap yang berkembang, popover kini menggunakan pembolehubah CSS tempatan .popoveruntuk 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 hoversebagai 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 htmlpilihan, 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-describedbyatribut. 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 allowListatribut 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 titleakan menjadi 456dan 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}'.

Ambil perhatian bahawa atas sebab keselamatan sanitize, sanitizeFn, dan allowListpilihan 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-contentatribut tidak ada. Jika fungsi diberikan, ia akan dipanggil dengan thisset 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 titleakan dipaparkan dalam popover. Jika palsu, innerTextharta 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 autoditentukan, 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 thiskepada 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.onsokongan). 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 titleakan disuntik ke dalam .popover-inner. .popover-arrowakan menjadi anak panah popover. Elemen pembungkus paling luar harus mempunyai .popoverkelas dan role="popover".
title rentetan, unsur, fungsi '' Nilai tajuk lalai jika titleatribut tidak ada. Jika fungsi diberikan, ia akan dipanggil dengan thisset 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 selectorboleh 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.popoverperistiwa 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.popoverperistiwa 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.popoveratau hidden.bs.popoverperistiwa 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'
})
Kaedah setContentini menerima objecthujah, di mana setiap kunci harta ialah stringpemilih 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 hidekaedah 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.popoveracara apabila templat popover telah ditambahkan pada DOM.
show.bs.popover Peristiwa ini menyala serta-merta apabila showkaedah 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...
})