Popovers
Dokumentáció és példák Bootstrap felugró ablakok – például az iOS rendszerben találhatók – hozzáadásához a webhely bármely eleméhez.
Áttekintés
Tudnivalók a popover beépülő modul használatakor:
- A popover a harmadik fél Popper könyvtárára támaszkodik a pozicionáláshoz. Meg kell adnia a popper.min.js fájlt az előtt
bootstrap.js
, vagy használjon olyat,bootstrap.bundle.min.js
amely tartalmazza a Poppert. - A popoverekhez függőségként a popover beépülő modul szükséges .
- A felugró ablakok teljesítmény miatt engedélyezettek, ezért Önnek kell inicializálnia őket .
- A nulla hosszúság
title
éscontent
az értékek soha nem fognak felbukkanni. - Adja meg
container: 'body'
, hogy elkerülje a megjelenítési problémákat az összetettebb összetevőkben (például beviteli csoportjaink, gombcsoportjaink stb.). - A rejtett elemek felbukkanásának kiváltása nem fog működni.
.disabled
A vagy elemek felbukkanását adisabled
burkolóelemen kell aktiválni.- Ha több vonalon átívelő horgonyok aktiválják, a felugró ablakok a horgonyok teljes szélessége között lesznek középen. Használja
.text-nowrap
a<a>
s-én, hogy elkerülje ezt a viselkedést. - A felugró ablakokat el kell rejteni, mielőtt a megfelelő elemeiket eltávolítanák a DOM-ból.
- A popoverek az árnyék DOM-on belüli elemnek köszönhetően válthatók ki.
prefers-reduced-motion
. Tekintse
meg akadálymentesítési dokumentációnk csökkentett mozgással foglalkozó részét .
Olvasson tovább, hogy megtudja, hogyan működnek a popoverek néhány példával.
Példák
Előugró ablakok engedélyezése
Ahogy fentebb említettük, használat előtt inicializálnia kell a felugró ablakokat. data-bs-toggle
Az oldal összes felugró ablakának inicializálásának egyik módja az lenne, ha attribútumuk alapján választaná ki őket , például:
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Élő demó
A fenti kódrészlethez hasonló JavaScriptet használunk a következő élő popover megjelenítéséhez. A címek beállítása ezen keresztül data-bs-title
, a törzstartalom pedig a következőn keresztül történik data-bs-content
.
title
a
data-bs-title
HTML-ben. Amikor
title
használatban van, a Popper automatikusan lecseréli a következőre,
data-bs-title
amikor az elem renderelésre kerül.
<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>
Négy irány
Négy lehetőség áll rendelkezésre: felső, jobb, alsó és bal. A Bootstrap RTL-ben történő használatakor az irányok tükröződnek. Állítsa data-bs-placement
be az irány megváltoztatására.
<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>
Egyedicontainer
Ha egy szülőelemen vannak olyan stílusok, amelyek megzavarják a felbukkanást, akkor meg kell adnia egy egyéni beállítást container
, hogy az előugró elem HTML-kódja helyett az adott elemen belül jelenjen meg. Ez gyakori a reszponzív táblákban, beviteli csoportokban és hasonlókban.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
Egy másik szituáció, amikor kifejezetten egyéni beállítást szeretne beállítani, a modális párbeszédpanelencontainer
belüli felugró ablakok , hogy megbizonyosodjon arról, hogy maga az előugró ablak hozzá van fűzve a modálishoz. Ez különösen fontos az interaktív elemeket tartalmazó felugró ablakok esetében – a modális párbeszédpanelek csapdába ejtik a fókuszt, így hacsak a popover nem a modális gyermek eleme, a felhasználók nem tudják fókuszálni vagy aktiválni ezeket az interaktív elemeket.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Egyedi popovers
Hozzáadva a v5.2.0-hozA felugró ablakok megjelenését CSS -változók segítségével testreszabhatja . Beállítunk egy egyéni osztályt data-bs-custom-class="custom-popover"
az egyéni megjelenés hatóköréhez, és ezt használjuk néhány helyi CSS-változó felülbírálására.
.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>
Elvetés a következő kattintással
Használja a focus
triggert a felugró ablakok elvetésére, amikor a felhasználó a kapcsoló elemtől eltérő elemre kattint következő alkalommal.
Speciális jelölés szükséges a következő kattintáskor történő elvetéshez
A megfelelő, több böngésző és platform közötti viselkedés érdekében a címkét kell használnia <a>
, nem a <button>
címkét, és egy tabindex
attribútumot is tartalmaznia kell.
<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'
})
Letiltott elemek
Az disabled
attribútummal rendelkező elemek nem interaktívak, ami azt jelenti, hogy a felhasználók nem vihetik az egérmutatót vagy kattinthatnak rájuk, hogy előugró ablakot (vagy elemleírást) indítsanak el. Megkerülő megoldásként a felbukkanást egy burkolóból <div>
vagy <span>
ideális esetben a billentyűzetre fókuszálhatóvá kell tenni a segítségével tabindex="0"
.
A letiltott popover triggereknél azt is előnyben részesítheti data-bs-trigger="hover focus"
, hogy a felbukkanó üzenet azonnali vizuális visszajelzésként jelenjen meg a felhasználók számára, mivel előfordulhat, hogy nem számítanak rá, hogy egy letiltott elemre kattintanak .
<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
Változók
Hozzáadva a v5.2.0-hozA Bootstrap fejlődő CSS-változókra vonatkozó megközelítésének részeként a popoverek helyi CSS-változókat használnak .popover
a továbbfejlesztett valós idejű testreszabás érdekében. A CSS-változók értékeit a Sass segítségével állítjuk be, így a Sass testreszabása továbbra is támogatott.
--#{$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);
Sass változók
$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;
Használat
Előugró ablakok engedélyezése JavaScripten keresztül:
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Az előugró ablakok működése a billentyűzet és a kisegítő technológiák felhasználói számára
Ahhoz, hogy a billentyűzetet használók aktiválhassák az előugró ablakokat, csak olyan HTML-elemekhez adja hozzá őket, amelyek hagyományosan a billentyűzetre fókuszálhatók és interaktívak (például hivatkozások vagy űrlapvezérlők). Bár tetszőleges HTML-elemek (például <span>
s) fókuszálhatóvá tehetők az tabindex="0"
attribútum hozzáadásával, ez potenciálisan bosszantó és zavaró tabulátorokat ad a nem interaktív elemekhez a billentyűzet-felhasználók számára, és a legtöbb segítő technológia ebben a helyzetben jelenleg nem jelenti be a popover tartalmát. . Ezenkívül ne hagyatkozzon kizárólag hover
az előugró ablakok kiváltójára, mivel ez lehetetlenné teszi a billentyűzetet használók számára.
Bár a lehetőséggel gazdag, strukturált HTML-kódot illeszthet be az előugró ablakokba html
, erősen javasoljuk, hogy kerülje a túlzott mennyiségű tartalom hozzáadását. Az előugró ablakok jelenleg úgy működnek, hogy a megjelenítést követően tartalmuk az aria-describedby
attribútummal rendelkező trigger elemhez van kötve. Ennek eredményeként a popover teljes tartalma egyetlen hosszú, megszakítás nélküli adatfolyamként jelenik meg a kisegítő technológia felhasználói számára.
Ezenkívül, bár lehetséges, hogy interaktív vezérlőket (például űrlapelemeket vagy hivatkozásokat) is tartalmazzon az előugró ablakban (azáltal, hogy ezeket az elemeket hozzáadja az allowList
engedélyezett attribútumokhoz és címkékhez), vegye figyelembe, hogy jelenleg az előugró ablak nem kezeli a billentyűzet fókuszának sorrendjét. Amikor a billentyűzet felhasználója megnyit egy felugró ablakot, a fókusz a kiváltó elemen marad, és mivel az előugró elem általában nem követi azonnal az indítógombot a dokumentum szerkezetében, nincs garancia arra, hogy az előrelépés/lenyomásTABa billentyűzet felhasználóját magába az előugró ablakba helyezi át. Röviden, ha egyszerűen hozzáadunk interaktív vezérlőket egy felugró ablakhoz, ezek a vezérlők valószínűleg elérhetetlenek/használhatatlanok lesznek a billentyűzet-felhasználók és a kisegítő technológiák felhasználói számára, vagy legalábbis logikátlan általános fókuszsorrendet eredményez. Ilyen esetekben fontolja meg egy modális párbeszédpanel használatát.
Lehetőségek
Mivel az opciók átadhatók adatattribútumokon vagy JavaScript-en keresztül, hozzáfűzhet egy beállításnevet a -hoz data-bs-
, mint például a data-bs-animation="{value}"
. Ügyeljen arra, hogy az opció nevének esettípusát „ camelCase ”-ról „ kebab-case ”-re változtassa, amikor a beállításokat adatattribútumokon keresztül adja át. Például használja data-bs-custom-class="beautifier"
a helyett data-bs-customClass="beautifier"
.
A Bootstrap 5.2.0-tól kezdve minden összetevő támogatja a kísérleti fenntartott adatattribútumot, data-bs-config
amely JSON-karakterláncként tartalmazhat egyszerű összetevőkonfigurációt. Ha egy elemnek data-bs-config='{"delay":0, "title":123}'
és data-bs-title="456"
attribútumai vannak, a végső title
érték a következő lesz, 456
és a különálló adatattribútumok felülírják a megadott értékeket data-bs-config
. Ezenkívül a meglévő adatattribútumok JSON-értékeket, például data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
sanitizeFn
, és
allowList
opciók nem adhatók meg adatattribútumokkal.
Név | típus | Alapértelmezett | Leírás |
---|---|---|---|
allowList |
tárgy | Alapértelmezett érték | Objektum, amely engedélyezett attribútumokat és címkéket tartalmaz. |
animation |
logikai érték | true |
Alkalmazzon CSS-eltolási átmenetet az előugró ablakra. |
boundary |
karakterlánc, elem | 'clippingParents' |
Az előugró ablak túlcsordulási kényszerhatára (csak a Popper preventOverflow módosítójára vonatkozik). Alapértelmezés szerint 'clippingParents' elfogadja a HTMLElement hivatkozást (csak JavaScripten keresztül). További információkért tekintse meg a Popper detectOverflow dokumentumait . |
container |
karakterlánc, elem, false | false |
Egy adott elemhez fűzi az előugró ablakot. Példa: container: 'body' . Ez az opció különösen hasznos, mivel lehetővé teszi, hogy a felugró ablakot a dokumentum folyamában az indítóelem közelében helyezze el – ami megakadályozza, hogy az ablak átméretezése során a felugró elem elmozduljon a kiváltó elemtől. |
content |
karakterlánc, elem, függvény | '' |
Alapértelmezett tartalomérték, ha data-bs-content az attribútum nincs jelen. Ha adott egy függvény, akkor az úgy lesz meghívva, hogy a this hivatkozása arra az elemre van beállítva, amelyhez a popover kapcsolódik. |
customClass |
karakterlánc, függvény | '' |
Adjon hozzá osztályokat a felugró ablakhoz, amikor megjelenik. Ne feledje, hogy ezek az osztályok a sablonban megadott bármely osztály mellé kerülnek hozzáadásra. Több osztály hozzáadásához szóközzel válassza el őket: 'class-1 class-2' . Olyan függvényt is átadhat, amelynek egyetlen karakterláncot kell visszaadnia, amely további osztályneveket tartalmaz. |
delay |
szám, tárgy | 0 |
Az előugró ablak megjelenítésének és elrejtésének késleltetése (ms) – nem vonatkozik a kézi indítási típusokra. Ha megad egy számot, akkor a késleltetés mindkét elrejtésre/megjelenítésre vonatkozik. Az objektum szerkezete: delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
karakterlánc, tömb | ['top', 'right', 'bottom', 'left'] |
Határozza meg a tartalék elhelyezéseket úgy, hogy megadja az elhelyezések listáját tömbben (előnyös sorrendben). További információkért tekintse meg a Popper viselkedési dokumentumait . |
html |
logikai érték | false |
HTML engedélyezése az előugró ablakban. Ha igaz, a felugró ablakban lévő HTML-címkék megjelennek az előugró title ablakban. Ha hamis, a innerText tulajdonság a tartalom DOM-ba való beillesztésére szolgál. Használjon szöveget, ha aggódik az XSS-támadások miatt. |
offset |
szám, karakterlánc, függvény | [0, 0] |
A popover eltolása a célhoz képest. Az adatattribútumokban átadhat egy karakterláncot vesszővel elválasztott értékekkel, például: data-bs-offset="10,20" . Ha egy függvényt használunk az eltolás meghatározására, akkor egy olyan objektummal hívjuk meg, amely első argumentumaként tartalmazza a popper elhelyezést, a hivatkozást és a popper recteket. A kiváltó elem DOM csomópontja második argumentumként kerül átadásra. A függvénynek egy tömböt kell visszaadnia két számmal: csúszás , távolság . További információkért tekintse meg a Popper-féle eltolási dokumentumokat . |
placement |
karakterlánc, függvény | 'top' |
A popover elhelyezése: automatikus, felül, lent, balra, jobbra. Ha auto meg van adva, akkor dinamikusan átirányítja a felugró ablakot. Amikor egy függvényt használunk az elhelyezés meghatározására, akkor az első argumentumként a popover DOM-csomópontot, másodikként pedig a DOM-csomópont kiváltó elemet hívja meg. A this kontextus a popover példányra van állítva. |
popperConfig |
null, objektum, függvény | null |
A Bootstrap alapértelmezett Popper-konfigurációjának módosításához lásd a Popper konfigurációját . Ha egy függvényt használunk a Popper-konfiguráció létrehozására, akkor azt egy olyan objektummal hívjuk meg, amely tartalmazza a Bootstrap alapértelmezett Popper-konfigurációját. Segítségével használhatja és egyesítheti az alapértelmezett beállításokat saját konfigurációjával. A függvénynek egy konfigurációs objektumot kell visszaadnia a Popper számára. |
sanitize |
logikai érték | true |
Engedélyezze vagy tiltsa le a fertőtlenítést. Ha aktiválva van 'template' , 'content' és 'title' az opciók fertőtlenítésre kerülnek. |
sanitizeFn |
null, függvény | null |
Itt megadhatja saját fertőtlenítő funkcióját. Ez akkor lehet hasznos, ha inkább egy dedikált könyvtárat szeretne használni a fertőtlenítéshez. |
selector |
húr, hamis | false |
Ha rendelkezésre áll választó, a felugró objektumok delegálódnak a megadott célokra. jQuery.on A gyakorlatban ezt használják a dinamikusan hozzáadott DOM-elemekre ( támogatás) történő popover alkalmazására is . Lásd ezt a számot és egy tájékoztató példát . |
template |
húr | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
A popover létrehozásakor használandó alap HTML. A popovert title a .popover-inner . .popover-arrow a popover nyila lesz. A legkülső burkolóelem .popover osztályának és role="popover" . |
title |
karakterlánc, elem, függvény | '' |
Az alapértelmezett címérték, ha title az attribútum nincs jelen. Ha adott egy függvény, akkor az úgy lesz meghívva, hogy a this hivatkozása arra az elemre van beállítva, amelyhez a popover kapcsolódik. |
trigger |
húr | 'hover focus' |
Hogyan történik a popover aktiválása: kattintás, egérmutató, fókusz, manuális. Több triggert is átadhat; szóközzel válassza el őket. 'manual' azt jelzi, hogy a popover programozottan, a .popover('show') , .popover('hide') és .popover('toggle') metódusok segítségével történik; ez az érték nem kombinálható más triggerrel. 'hover' önmagában olyan felbukkanásokat eredményez, amelyek nem indíthatók el a billentyűzeten keresztül, és csak akkor használhatók, ha vannak alternatív módszerek ugyanazon információk továbbítására a billentyűzetet használók számára. |
Adatattribútumok az egyes felugró ablakokhoz
Az egyes felugró ablakok beállításai az adatattribútumok használatával is megadhatók, a fentiek szerint.
A funkció használata apopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Mód
Aszinkron módszerek és átmenetek
Minden API metódus aszinkron , és átmenetet indít . Visszatérnek a hívóhoz, amint az átmenet elkezdődik, de még azelőtt, hogy az véget érne . Ezenkívül a rendszer figyelmen kívül hagyja az átmeneti komponens metódushívásait .
További információért tekintse meg JavaScript dokumentációnkat .
Módszer | Leírás |
---|---|
disable |
Eltávolítja az elem felugró ablakának megjelenítési lehetőségét. A popover csak akkor jelenhet meg, ha újra engedélyezve van. |
dispose |
Elrejti és megsemmisíti egy elem felbukkanását (Eltávolítja a DOM elemen tárolt adatokat). A delegálást használó felugró ablakok (amelyek a selector beállítással jönnek létre ) nem semmisíthetők meg egyenként a leszármazott triggerelemeken. |
enable |
Lehetővé teszi, hogy egy elem popover megjelenjen. A popoverek alapértelmezés szerint engedélyezve vannak. |
getInstance |
Statikus módszer, amely lehetővé teszi a DOM elemhez társított popover példányt. |
getOrCreateInstance |
Statikus módszer, amely lehetővé teszi a DOM-elemhez társított popover példányt, vagy új létrehozását, ha nem inicializálták. |
hide |
Elrejti egy elem felbukkanását. Visszatér a hívóhoz, mielőtt a popover ténylegesen el lett volna rejtve (azaz az hidden.bs.popover esemény bekövetkezte előtt). Ez a popover „kézi” kiváltásának tekinthető. |
setContent |
Lehetővé teszi a popover tartalmának megváltoztatását az inicializálás után. |
show |
Felfedi egy elem felbukkanását. Visszatér a hívóhoz, mielőtt a popover ténylegesen megjelenne (azaz az shown.bs.popover esemény bekövetkezte előtt). Ez a popover „kézi” kiváltásának tekinthető. Az olyan felugró ablakok, amelyek címe és tartalma egyaránt nulla hosszúságú, soha nem jelennek meg. |
toggle |
Bekapcsolja az elem felbukkanását. Visszatér a hívóhoz, mielőtt a popover ténylegesen megjelenne vagy elrejtésre kerülne (azaz a shown.bs.popover vagy hidden.bs.popover esemény bekövetkezése előtt). Ez a popover „kézi” kiváltásának tekinthető. |
toggleEnabled |
Bekapcsolja az elem felugró ablakának megjelenítését vagy elrejtését. |
update |
Frissíti egy elem popover pozícióját. |
// 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
metódus elfogad egy
object
argumentumot, ahol minden tulajdonságkulcs egy érvényes
string
szelektor a popover sablonon belül, és minden kapcsolódó property-érték lehet
string
|
element
|
function
|
null
Események
Esemény | Leírás |
---|---|
hide.bs.popover |
Ez az esemény azonnal elindul, amikor a hide példánymetódus meghívásra került. |
hidden.bs.popover |
Ez az esemény akkor indul el, amikor a popover elrejtése befejeződött a felhasználó elől (megvárja a CSS-átmenetek befejezését). |
inserted.bs.popover |
Ez az esemény az show.bs.popover esemény után indul el, amikor a popover sablont hozzáadták a DOM-hoz. |
show.bs.popover |
Ez az esemény azonnal aktiválódik a show példánymetódus meghívásakor. |
shown.bs.popover |
Ez az esemény akkor indul el, amikor a popover láthatóvá vált a felhasználó számára (megvárja, amíg a CSS-átmenetek befejeződnek). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})