Popovers
Documentație și exemple pentru adăugarea popover-urilor Bootstrap, cum ar fi cele găsite în iOS, la orice element de pe site-ul dvs.
Prezentare generală
Lucruri de știut când utilizați pluginul popover:
- Popovers se bazează pe biblioteca terță parte Popper pentru poziționare. Trebuie să includeți popper.min.js înainte de
bootstrap.js
, sau să utilizați unulbootstrap.bundle.min.js
care conține Popper. - Popover-urile necesită pluginul popover ca dependență.
- Popover-urile sunt opt-in din motive de performanță, așa că trebuie să le inițializați singur .
- Lungimea zero
title
șicontent
valorile nu vor afișa niciodată un popover. - Specificați
container: 'body'
pentru a evita problemele de randare în componente mai complexe (cum ar fi grupurile noastre de intrare, grupurile de butoane etc.). - Declanșarea popover-urilor pe elemente ascunse nu va funcționa.
- Popover-urile pentru
.disabled
saudisabled
elemente trebuie să fie declanșate pe un element wrapper. - Când sunt declanșate de la ancore care se înfășoară pe mai multe linii, popover-urile vor fi centrate între lățimea totală a ancorelor. Folosește -l
.text-nowrap
pe tine<a>
pentru a evita acest comportament. - Popover-urile trebuie ascunse înainte ca elementele lor corespunzătoare să fie eliminate din DOM.
- Popover-urile pot fi declanșate datorită unui element din interiorul unui DOM umbră.
prefers-reduced-motion
interogarea media. Consultați
secțiunea cu mișcare redusă a documentației noastre de accesibilitate .
Continuați să citiți pentru a vedea cum funcționează popover-urile cu câteva exemple.
Exemple
Activați popover-urile
După cum sa menționat mai sus, trebuie să inițializați popover-urile înainte de a putea fi utilizate. O modalitate de a inițializa toate popover-urile dintr-o pagină ar fi să le selectați după data-bs-toggle
atributul lor, astfel:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Demo live
Folosim JavaScript similar cu fragmentul de mai sus pentru a reda următorul popover live. Titlurile sunt setate prin data-bs-title
și conținutul corpului este setat prin data-bs-content
.
title
sau
data-bs-title
în HTML. Când
title
este utilizat, Popper îl va înlocui automat cu
data-bs-title
atunci când elementul este randat.
<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>
Patru direcții
Sunt disponibile patru opțiuni: sus, dreapta, jos și stânga. Indicațiile sunt reflectate atunci când utilizați Bootstrap în RTL. Setați data-bs-placement
pentru a schimba direcția.
<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>
Personalizatcontainer
Când aveți unele stiluri pe un element părinte care interferează cu un popover, veți dori să specificați o personalizare container
, astfel încât HTML-ul popover-ului să apară în acel element. Acest lucru este comun în tabelele receptive, grupurile de intrare și altele asemenea.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
O altă situație în care veți dori să setați o personalizare explicită container
sunt popover-urile în interiorul unui dialog modal , pentru a vă asigura că popover-ul în sine este atașat modalului. Acest lucru este deosebit de important pentru popover-urile care conțin elemente interactive – dialogurile modale vor capta focalizarea, astfel încât, dacă nu este un element secundar al modalului, utilizatorii nu vor putea să se concentreze sau să activeze aceste elemente interactive.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Popovers personalizate
Adăugat în v5.2.0Puteți personaliza aspectul popover-urilor folosind variabile CSS . Am stabilit o clasă personalizată cu data-bs-custom-class="custom-popover"
pentru a ne defini aspectul personalizat și o folosim pentru a suprascrie unele dintre variabilele CSS locale.
.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>
Închideți la următorul clic
Utilizați focus
declanșatorul pentru a închide popover-urile la următorul clic al utilizatorului asupra unui alt element decât elementul de comutare.
Este necesar un marcaj specific pentru respingerea la clicul următor
Pentru un comportament adecvat între browsere și platforme, trebuie să utilizați <a>
eticheta, nu eticheta <button>
și, de asemenea, trebuie să includeți un 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'
})
Elemente dezactivate
Elementele cu disabled
atributul nu sunt interactive, ceea ce înseamnă că utilizatorii nu pot trece cu mouse-ul sau nu pot face clic pe ele pentru a declanșa un popover (sau un sfat instrument). Ca o soluție, veți dori să declanșați popover-ul dintr-un înveliș <div>
sau <span>
, în mod ideal, focalizat la tastatură folosind tabindex="0"
.
Pentru declanșatoarele popover dezactivate, este posibil să preferați, data-bs-trigger="hover focus"
de asemenea, ca popoverul să apară ca feedback vizual imediat pentru utilizatorii dvs., deoarece aceștia nu se așteaptă să facă clic pe un element dezactivat.
<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
Variabile
Adăugat în v5.2.0Ca parte a abordării în evoluție a variabilelor CSS a Bootstrap, popover-urile folosesc acum variabile CSS locale activate .popover
pentru personalizare îmbunătățită în timp real. Valorile pentru variabilele CSS sunt setate prin Sass, astfel încât personalizarea Sass este încă acceptată.
--#{$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);
Variabile 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;
Utilizare
Activați popover-urile prin JavaScript:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Faceți popover-urile să funcționeze pentru utilizatorii de tastatură și de tehnologie de asistență
Pentru a permite utilizatorilor de tastatură să activeze popover-urile dvs., ar trebui să le adăugați numai la elementele HTML care sunt în mod tradițional focalizate pe tastatură și interactive (cum ar fi link-uri sau comenzi de formular). Deși elementele HTML arbitrare (cum ar fi <span>
s) pot fi focalizate prin adăugarea tabindex="0"
atributului, acest lucru va adăuga tabulaturi potențial enervante și confuze pe elementele neinteractive pentru utilizatorii de tastatură, iar majoritatea tehnologiilor de asistență nu anunță în prezent conținutul popover-ului în această situație. . În plus, nu vă bazați exclusiv hover
ca declanșator pentru popover-urile dvs., deoarece acest lucru le va face imposibil de declanșat pentru utilizatorii de tastatură.
Deși puteți insera HTML bogat și structurat în popover-uri cu html
opțiunea, vă recomandăm insistent să evitați adăugarea unei cantități excesive de conținut. Modul în care funcționează în prezent popover-urile este că, odată afișate, conținutul lor este legat de elementul declanșator cu aria-describedby
atributul. Ca urmare, întregul conținut al popover-ului va fi anunțat utilizatorilor de tehnologie de asistență ca un flux lung și neîntrerupt.
În plus, deși este posibil să includeți și controale interactive (cum ar fi elemente de formular sau linkuri) în popover (prin adăugarea acestor elemente la allowList
atributele și etichetele permise), rețineți că în prezent popover-ul nu gestionează ordinea de focalizare a tastaturii. Când un utilizator de tastatură deschide un popover, focalizarea rămâne pe elementul de declanșare și, deoarece popover-ul de obicei nu urmează imediat declanșatorul din structura documentului, nu există nicio garanție că deplasarea înainte/apăsareaTABva muta un utilizator de tastatură în popover-ul propriu-zis. Pe scurt, simpla adăugare de comenzi interactive la un popover poate face aceste controale inaccesibile/inutilizabile pentru utilizatorii de tastatură și utilizatorii de tehnologii de asistență sau, cel puțin, va face o ordine generală ilogică de focalizare. În aceste cazuri, luați în considerare utilizarea unui dialog modal.
Opțiuni
Deoarece opțiunile pot fi transmise prin atribute de date sau JavaScript, puteți adăuga un nume de opțiune la data-bs-
, ca în data-bs-animation="{value}"
. Asigurați-vă că schimbați tipul de caz al numelui opțiunii din „ camelCase ” în „ kebab-case ” atunci când treceți opțiunile prin atributele de date. De exemplu, utilizați data-bs-custom-class="beautifier"
în loc de data-bs-customClass="beautifier"
.
Începând cu Bootstrap 5.2.0, toate componentele acceptă un atribut de date rezervat experimentaldata-bs-config
care poate găzdui configurarea simplă a componentelor ca șir JSON. Când un element are data-bs-config='{"delay":0, "title":123}'
și data-bs-title="456"
atribute, valoarea finală title
va fi 456
și atributele de date separate vor înlocui valorile date pe data-bs-config
. În plus, atributele de date existente pot găzdui valori JSON precum data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
opțiunile sanitizeFn
, și
allowList
nu pot fi furnizate utilizând atribute de date.
Nume | Tip | Mod implicit | Descriere |
---|---|---|---|
allowList |
obiect | Valoare implicită | Obiect care conține atribute și etichete permise. |
animation |
boolean | true |
Aplicați o tranziție de estompare CSS la popover. |
boundary |
sfoară, element | 'clippingParents' |
Limita constrângerii de depășire a popover-ului (se aplică numai modificatorului preventOverflow al lui Popper). În mod implicit, este 'clippingParents' și poate accepta o referință HTMLElement (numai prin JavaScript). Pentru mai multe informații, consultați documentele detectOverflow ale lui Popper . |
container |
șir, element, fals | false |
Adaugă popover-ul la un anumit element. Exemplu: container: 'body' . Această opțiune este deosebit de utilă prin faptul că vă permite să poziționați popover-ul în fluxul documentului lângă elementul de declanșare - ceea ce va împiedica popover-ul să plutească departe de elementul de declanșare în timpul redimensionării ferestrei. |
content |
șir, element, funcție | '' |
Valoarea implicită a conținutului dacă data-bs-content atributul nu este prezent. Dacă este dată o funcție, aceasta va fi apelată cu this referința setată la elementul la care este atașat popover-ul. |
customClass |
șir, funcție | '' |
Adăugați clase la popover când este afișat. Rețineți că aceste clase vor fi adăugate în plus față de orice clase specificate în șablon. Pentru a adăuga mai multe clase, separați-le cu spații: 'class-1 class-2' . De asemenea, puteți transmite o funcție care ar trebui să returneze un singur șir care să conțină nume de clasă suplimentare. |
delay |
număr, obiect | 0 |
Întârziere afișarea și ascunderea popoverului (ms) — nu se aplică tipului de declanșare manuală. Dacă este furnizat un număr, se aplică întârziere atât pentru ascunde/afișare. Structura obiectului este: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
șir, matrice | ['top', 'right', 'bottom', 'left'] |
Definiți destinații de plasare alternative prin furnizarea unei liste de destinații de plasare în matrice (în ordinea preferințelor). Pentru mai multe informații, consultați documentele de comportament ale lui Popper . |
html |
boolean | false |
Permite HTML în popover. Dacă este adevărat, etichetele HTML din popover title vor fi redate în popover. Dacă este fals, innerText proprietatea va fi folosită pentru a insera conținut în DOM. Folosiți text dacă vă îngrijorează atacurile XSS. |
offset |
număr, șir, funcție | [0, 0] |
Deplasarea popover-ului în raport cu ținta sa. Puteți trece un șir în atributele de date cu valori separate prin virgulă, cum ar fi: data-bs-offset="10,20" . Când o funcție este utilizată pentru a determina offset-ul, este apelată cu un obiect care conține plasarea popperului, referința și rectele popper ca prim argument. Elementul de declanșare nodul DOM este transmis ca al doilea argument. Funcția trebuie să returneze o matrice cu două numere: skidding , distance . Pentru mai multe informații, consultați documentele despre offset ale lui Popper . |
placement |
șir, funcție | 'top' |
Cum să poziționați popover-ul: automat, sus, jos, stânga, dreapta. Când auto este specificat, va reorienta în mod dinamic popover-ul. Când o funcție este utilizată pentru a determina plasarea, aceasta este apelată cu nodul popover DOM ca prim argument și elementul de declanșare nodul DOM ca al doilea. Contextul this este setat la instanța popover. |
popperConfig |
nul, obiect, funcție | null |
Pentru a schimba configurația Popper implicită a Bootstrap, consultați configurația lui Popper . Când o funcție este folosită pentru a crea configurația Popper, este apelată cu un obiect care conține configurația implicită Popper a Bootstrap. Vă ajută să utilizați și să îmbinați configurația implicită cu propria dvs. configurație. Funcția trebuie să returneze un obiect de configurare pentru Popper. |
sanitize |
boolean | true |
Activați sau dezactivați igienizarea. Dacă este activat 'template' , 'content' și 'title' opțiunile vor fi dezinfectate. |
sanitizeFn |
nulă, funcție | null |
Aici vă puteți furniza propria funcție de dezinfectare. Acest lucru poate fi util dacă preferați să utilizați o bibliotecă dedicată pentru a efectua igienizarea. |
selector |
șir, fals | false |
Dacă este furnizat un selector, obiectele popover vor fi delegate țintelor specificate. În practică, aceasta este folosită și pentru a aplica popover-uri elementelor DOM adăugate dinamic ( jQuery.on suport). Vedeți această problemă și un exemplu informativ . |
template |
şir | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
HTML de bază de utilizat la crearea popover-ului. Popover-urile title vor fi injectate în .popover-inner . .popover-arrow va deveni săgeata popover-ului. Elementul de înveliș exterior ar trebui să aibă .popover clasa și role="popover" . |
title |
șir, element, funcție | '' |
Valoarea implicită a titlului dacă title atributul nu este prezent. Dacă este dată o funcție, aceasta va fi apelată cu this referința setată la elementul la care este atașat popover-ul. |
trigger |
şir | 'hover focus' |
Cum se declanșează popoverul: clic, hover, focus, manual. Puteți trece mai multe declanșatoare; separați-le cu un spațiu. 'manual' indică faptul că popover-ul va fi declanșat programatic prin metodele și .popover('show') ; această valoare nu poate fi combinată cu niciun alt declanșator. pe cont propriu va avea ca rezultat popover-uri care nu pot fi declanșate prin intermediul tastaturii și ar trebui utilizate numai dacă sunt prezente metode alternative de transmitere a aceleiași informații pentru utilizatorii de tastatură..popover('hide') .popover('toggle') 'hover' |
Atribute de date pentru popovers individuale
Opțiunile pentru popover-uri individuale pot fi specificate alternativ prin utilizarea atributelor de date, așa cum s-a explicat mai sus.
Folosind funcția cupopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metode
Metode și tranziții asincrone
Toate metodele API sunt asincrone și încep o tranziție . Ei revin la apelant imediat ce tranziția este începută, dar înainte ca aceasta să se încheie . În plus, un apel de metodă pentru o componentă de tranziție va fi ignorat .
Consultați documentația noastră JavaScript pentru mai multe informații .
Metodă | Descriere |
---|---|
disable |
Elimină posibilitatea ca popover-ul unui element să fie afișat. Popover-ul va putea fi afișat numai dacă este reactivat. |
dispose |
Ascunde și distruge popover-ul unui element (Elimină datele stocate pe elementul DOM). Popover-urile care folosesc delegarea (care sunt create folosind opțiunea selector ) nu pot fi distruse individual pe elementele de declanșare descendente. |
enable |
Oferă popover-ului unui element posibilitatea de a fi afișat. Popover-urile sunt activate în mod implicit. |
getInstance |
Metodă statică care vă permite să obțineți instanța popover asociată cu un element DOM. |
getOrCreateInstance |
Metodă statică care vă permite să obțineți instanța popover asociată cu un element DOM sau să creați una nouă în cazul în care nu a fost inițializată. |
hide |
Ascunde popover-ul unui element. Se întoarce la apelant înainte ca popover-ul să fi fost efectiv ascuns (adică înainte de apariția hidden.bs.popover evenimentului). Aceasta este considerată o declanșare „manuală” a popover-ului. |
setContent |
Oferă o modalitate de a schimba conținutul popover-ului după inițializare. |
show |
Dezvăluie popover-ul unui element. Revine la apelant înainte ca popover-ul să fie afișat efectiv (adică înainte de apariția shown.bs.popover evenimentului). Aceasta este considerată o declanșare „manuală” a popover-ului. Popover-urile al căror titlu și conținut sunt ambele de lungime zero nu sunt niciodată afișate. |
toggle |
Comută popover-ul unui element. Revine la apelant înainte ca popover-ul să fi fost efectiv afișat sau ascuns (adică înainte ca evenimentul shown.bs.popover sau să hidden.bs.popover apară). Aceasta este considerată o declanșare „manuală” a popover-ului. |
toggleEnabled |
Comută posibilitatea ca popover-ul unui element să fie afișat sau ascuns. |
update |
Actualizează poziția popover-ului unui element. |
// 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
acceptă un
object
argument, în care fiecare cheie de proprietate este un
string
selector valid în șablonul popover, iar fiecare valoare de proprietate aferentă poate fi
string
|
element
|
function
|
null
Evenimente
Eveniment | Descriere |
---|---|
hide.bs.popover |
Acest eveniment este declanșat imediat când hide metoda instanței a fost apelată. |
hidden.bs.popover |
Acest eveniment este declanșat când popover-ul a terminat de a fi ascuns utilizatorului (va aștepta finalizarea tranzițiilor CSS). |
inserted.bs.popover |
Acest eveniment este declanșat după show.bs.popover eveniment când șablonul popover a fost adăugat la DOM. |
show.bs.popover |
Acest eveniment se declanșează imediat când show este apelată metoda instanței. |
shown.bs.popover |
Acest eveniment este declanșat atunci când popover-ul a fost făcut vizibil pentru utilizator (va aștepta finalizarea tranzițiilor CSS). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})