Salta al contenuto principale Passa alla navigazione dei documenti
Check
in English

Popover

Documentazione ed esempi per aggiungere popover Bootstrap, come quelli che si trovano in iOS, a qualsiasi elemento del tuo sito.

Panoramica

Cose da sapere quando si utilizza il plug-in popover:

  • I popover si basano sulla libreria di terze parti Popper per il posizionamento. Devi includere popper.min.js prima bootstrap.jso usarne uno bootstrap.bundle.min.jsche contenga Popper.
  • I popover richiedono il plug -in popover come dipendenza.
  • I popover sono attivabili per motivi di prestazioni, quindi devi inizializzarli tu stesso .
  • Lunghezza zero titlee contentvalori non mostreranno mai un popover.
  • Specificare container: 'body'per evitare problemi di rendering in componenti più complessi (come i nostri gruppi di input, gruppi di pulsanti, ecc.).
  • L'attivazione dei popover sugli elementi nascosti non funzionerà.
  • I popover per gli elementi .disabledo disableddevono essere attivati ​​su un elemento wrapper.
  • Quando vengono attivati ​​da ancoraggi che si avvolgono su più linee, i popover verranno centrati tra la larghezza complessiva degli ancoraggi. Usa .text-nowrapsui tuoi <a>messaggi di posta elettronica per evitare questo comportamento.
  • I popover devono essere nascosti prima che i loro elementi corrispondenti siano stati rimossi dal DOM.
  • I popover possono essere attivati ​​grazie a un elemento all'interno di un DOM ombra.
Per impostazione predefinita, questo componente utilizza il disinfettante di contenuto integrato, che elimina tutti gli elementi HTML non esplicitamente consentiti. Vedere la sezione disinfettante nella nostra documentazione JavaScript per maggiori dettagli.
L'effetto di animazione di questo componente dipende dalla prefers-reduced-motionmedia query. Vedi la sezione movimento ridotto della nostra documentazione sull'accessibilità .

Continua a leggere per vedere come funzionano i popover con alcuni esempi.

Esempi

Abilita i popover

Come accennato in precedenza, è necessario inizializzare i popover prima che possano essere utilizzati. Un modo per inizializzare tutti i popover su una pagina sarebbe selezionarli in base al loro data-bs-toggleattributo, in questo modo:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

Dimostrazione dal vivo

Usiamo JavaScript in modo simile allo snippet sopra per eseguire il rendering del seguente popover live. I titoli vengono impostati tramite data-bs-titlee il contenuto del corpo viene impostato tramite data-bs-content.

Sentiti libero di usare uno titleo data-bs-titlenel tuo HTML. Quando titleviene utilizzato, Popper lo sostituirà automaticamente con data-bs-titlequando l'elemento viene renderizzato.
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>

Quattro direzioni

Sono disponibili quattro opzioni: in alto, a destra, in basso e a sinistra. Le direzioni vengono rispecchiate quando si utilizza Bootstrap in RTL. Imposta data-bs-placementper cambiare la direzione.

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>

Costumecontainer

Quando hai degli stili su un elemento padre che interferiscono con un popover, ti consigliamo di specificare uno stile personalizzato containerin modo che l'HTML del popover appaia invece all'interno di quell'elemento. Questo è comune nelle tabelle reattive, nei gruppi di input e simili.

const popover = new bootstrap.Popover('.example-popover', {
  container: 'body'
})

Un'altra situazione in cui vorrai impostare una personalizzazione esplicita containersono i popover all'interno di una finestra di dialogo modale , per assicurarti che il popover stesso sia aggiunto al modale. Ciò è particolarmente importante per i popover che contengono elementi interattivi: i dialoghi modali intrappolano lo stato attivo, quindi a meno che il popover non sia un elemento figlio del modale, gli utenti non saranno in grado di mettere a fuoco o attivare questi elementi interattivi.

const popover = new bootstrap.Popover('.example-popover', {
  container: '.modal-body'
})

Popover personalizzati

Aggiunto nella v5.2.0

Puoi personalizzare l'aspetto dei popover utilizzando le variabili CSS . Impostiamo una classe personalizzata con data-bs-custom-class="custom-popover"l'ambito del nostro aspetto personalizzato e la usiamo per sovrascrivere alcune delle variabili CSS locali.

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

Ignora al prossimo clic

Utilizzare il focustrigger per ignorare i popover al successivo clic dell'utente su un elemento diverso rispetto all'elemento di attivazione/disattivazione.

È richiesto un markup specifico per l'eliminazione al clic successivo

Per un corretto comportamento cross-browser e multipiattaforma, devi utilizzare il <a>tag, non il <button>tag, e devi anche includere un tabindexattributo.

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'
})

Elementi disabilitati

Gli elementi con l' disabledattributo non sono interattivi, il che significa che gli utenti non possono passare il mouse o fare clic su di essi per attivare un popover (o una descrizione comando). Come soluzione alternativa, ti consigliamo di attivare il popover da un wrapper <div>o <span>, idealmente reso focalizzabile dalla tastiera utilizzando tabindex="0".

Per i trigger di popover disabilitati, potresti anche preferire data-bs-trigger="hover focus"che il popover appaia come feedback visivo immediato ai tuoi utenti poiché potrebbero non aspettarsi di fare clic su un elemento disabilitato.

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

Variabili

Aggiunto nella v5.2.0

Come parte dell'approccio in evoluzione delle variabili CSS di Bootstrap, i popover ora utilizzano le variabili CSS locali .popoverper una migliore personalizzazione in tempo reale. I valori per le variabili CSS vengono impostati tramite Sass, quindi anche la personalizzazione di Sass è ancora supportata.

  --#{$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);
  

variabili Sas

$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;

Utilizzo

Abilita i popover tramite JavaScript:

const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)

Fare in modo che i popover funzionino per gli utenti di tastiere e tecnologie assistive

Per consentire agli utenti della tastiera di attivare i tuoi popover, dovresti aggiungerli solo agli elementi HTML che sono tradizionalmente focalizzabili sulla tastiera e interattivi (come collegamenti o controlli dei moduli). Sebbene elementi HTML arbitrari (come <span>s) possano essere resi attivabili aggiungendo l' tabindex="0"attributo, ciò aggiungerà tabulazioni potenzialmente fastidiose e confuse su elementi non interattivi per gli utenti della tastiera e la maggior parte delle tecnologie assistive attualmente non annuncia il contenuto del popover in questa situazione . Inoltre, non fare affidamento solo su hovercome trigger per i tuoi popover, poiché ciò renderà impossibile attivarli per gli utenti della tastiera.

Sebbene tu possa inserire HTML ricco e strutturato nei popover con l' htmlopzione, ti consigliamo vivamente di evitare di aggiungere una quantità eccessiva di contenuto. Il modo in cui funzionano attualmente i popover è che, una volta visualizzati, il loro contenuto è legato all'elemento trigger con l' aria-describedbyattributo. Di conseguenza, l'intero contenuto del popover verrà annunciato agli utenti di tecnologie assistive come un flusso lungo e ininterrotto.

Inoltre, sebbene sia possibile includere anche controlli interattivi (come elementi del modulo o collegamenti) nel tuo popover (aggiungendo questi elementi agli allowListattributi e ai tag consentiti), tieni presente che attualmente il popover non gestisce l'ordine del focus della tastiera. Quando un utente della tastiera apre un popover, l'attenzione rimane sull'elemento di attivazione e poiché il popover di solito non segue immediatamente l'attivazione nella struttura del documento, non vi è alcuna garanzia che si vada avanti/premendoTABsposterà un utente della tastiera nel popover stesso. In breve, è probabile che la semplice aggiunta di controlli interattivi a un popover renda questi controlli irraggiungibili/inutilizzabili per gli utenti della tastiera e per gli utenti di tecnologie assistive, o almeno crei un ordine di messa a fuoco generale illogico. In questi casi, considera invece l'utilizzo di una finestra di dialogo modale.

Opzioni

Poiché le opzioni possono essere passate tramite attributi di dati o JavaScript, puoi aggiungere un nome di opzione a data-bs-, come in data-bs-animation="{value}". Assicurati di cambiare il tipo di caso del nome dell'opzione da " camelCase " a " kebab-case " quando passi le opzioni tramite attributi di dati. Ad esempio, utilizzare data-bs-custom-class="beautifier"invece di data-bs-customClass="beautifier".

A partire da Bootstrap 5.2.0, tutti i componenti supportano un attributo di dati riservato sperimentaledata-bs-config che può ospitare una semplice configurazione del componente come una stringa JSON. Quando un elemento ha data-bs-config='{"delay":0, "title":123}'e data-bs-title="456"attributi, il titlevalore finale sarà 456e gli attributi di dati separati sovrascriveranno i valori forniti su data-bs-config. Inoltre, gli attributi di dati esistenti sono in grado di ospitare valori JSON come data-bs-delay='{"show":0,"hide":150}'.

Si noti che per motivi di sicurezza le opzioni sanitize, sanitizeFn, e allowListnon possono essere fornite utilizzando gli attributi dei dati.
Nome Tipo Predefinito Descrizione
allowList oggetto Valore di default Oggetto che contiene attributi e tag consentiti.
animation booleano true Applica una transizione di dissolvenza CSS al popover.
boundary stringa, elemento 'clippingParents' Limite del vincolo di overflow del popover (si applica solo al modificatore preventOverflow di Popper). Per impostazione predefinita, è 'clippingParents'e può accettare un riferimento HTMLElement (solo tramite JavaScript). Per ulteriori informazioni, fare riferimento ai documenti detectionOverflow di Popper .
container stringa, elemento, falso false Aggiunge il popover a un elemento specifico. Esempio: container: 'body'. Questa opzione è particolarmente utile in quanto consente di posizionare il popover nel flusso del documento vicino all'elemento di attivazione, impedendo che il popover si allontani dall'elemento di attivazione durante il ridimensionamento della finestra.
content stringa, elemento, funzione '' Valore di contenuto predefinito se data-bs-contentl'attributo non è presente. Se viene fornita una funzione, verrà chiamata con il suo thisriferimento impostato all'elemento a cui è collegato il popover.
customClass stringa, funzione '' Aggiungi classi al popover quando viene mostrato. Tieni presente che queste classi verranno aggiunte in aggiunta a tutte le classi specificate nel modello. Per aggiungere più classi, separale con spazi: 'class-1 class-2'. Puoi anche passare una funzione che dovrebbe restituire una singola stringa contenente nomi di classi aggiuntivi.
delay numero, oggetto 0 Ritardo che mostra e nasconde il popover (ms): non si applica al tipo di trigger manuale. Se viene fornito un numero, il ritardo viene applicato a entrambi nascondi/mostra. La struttura dell'oggetto è: delay: { "show": 500, "hide": 100 }.
fallbackPlacements stringa, matrice ['top', 'right', 'bottom', 'left'] Definisci i posizionamenti di riserva fornendo un elenco di posizionamenti nella matrice (in ordine di preferenza). Per ulteriori informazioni, fare riferimento ai documenti sul comportamento di Popper .
html booleano false Consenti HTML nel popover. Se true, i tag HTML nei popover titleverranno visualizzati nel popover. Se false, innerTextla proprietà verrà utilizzata per inserire contenuto nel DOM. Usa il testo se sei preoccupato per gli attacchi XSS.
offset numero, stringa, funzione [0, 0] Offset del popover rispetto al suo target. Puoi passare una stringa negli attributi dei dati con valori separati da virgole come: data-bs-offset="10,20". Quando una funzione viene utilizzata per determinare l'offset, viene chiamata con un oggetto contenente il posizionamento popper, il riferimento e popper rects come primo argomento. Il nodo DOM dell'elemento di attivazione viene passato come secondo argomento. La funzione deve restituire un array con due numeri: skidding , distance . Per ulteriori informazioni, fare riferimento ai documenti di offset di Popper .
placement stringa, funzione 'top' Come posizionare il popover: automatico, in alto, in basso, a sinistra, a destra. Quando autoè specificato, riorienterà dinamicamente il popover. Quando una funzione viene utilizzata per determinare il posizionamento, viene chiamata con il nodo DOM popover come primo argomento e il nodo DOM dell'elemento di attivazione come secondo. Il thiscontesto è impostato sull'istanza popover.
popperConfig nullo, oggetto, funzione null Per modificare la configurazione di Popper predefinita di Bootstrap, vedere Configurazione di Popper . Quando una funzione viene utilizzata per creare la configurazione Popper, viene chiamata con un oggetto che contiene la configurazione Popper predefinita di Bootstrap. Ti aiuta a utilizzare e unire l'impostazione predefinita con la tua configurazione. La funzione deve restituire un oggetto di configurazione per Popper.
sanitize booleano true Abilita o disabilita la sanificazione. Se attivato 'template', 'content'e 'title'le opzioni verranno sanificate.
sanitizeFn nullo, funzione null Qui puoi fornire la tua funzione di sanificazione. Questo può essere utile se si preferisce utilizzare una libreria dedicata per eseguire la sanificazione.
selector stringa, falso false Se viene fornito un selettore, gli oggetti popover verranno delegati alle destinazioni specificate. In pratica, questo viene utilizzato anche per applicare i popover agli elementi DOM aggiunti dinamicamente ( jQuery.onsupport). Vedere questo problema e un esempio informativo .
template corda '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' HTML di base da utilizzare durante la creazione del popover. I popover titleverranno iniettati nel file .popover-inner. .popover-arrowdiventerà la freccia del popover. L'elemento wrapper più esterno dovrebbe avere la .popoverclasse e role="popover".
title stringa, elemento, funzione '' Valore del titolo predefinito se titlel'attributo non è presente. Se viene fornita una funzione, verrà chiamata con il suo thisriferimento impostato all'elemento a cui è collegato il popover.
trigger corda 'hover focus' Come viene attivato il popover: clic, passaggio del mouse, messa a fuoco, manuale. Puoi passare più trigger; separali con uno spazio. 'manual'indica che il popover verrà attivato a livello di codice tramite i metodi .popover('show'), .popover('hide')e ; .popover('toggle')questo valore non può essere combinato con nessun altro trigger. 'hover'di per sé risulterà in popover che non possono essere attivati ​​tramite la tastiera e dovrebbero essere utilizzati solo se sono presenti metodi alternativi per trasmettere le stesse informazioni per gli utenti della tastiera.

Attributi dei dati per i singoli popover

Le opzioni per i singoli popover possono essere specificate in alternativa tramite l'uso di attributi di dati, come spiegato sopra.

Utilizzo della funzione conpopperConfig

const popover = new bootstrap.Popover(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

Metodi

Metodi e transizioni asincrone

Tutti i metodi API sono asincroni e avviano una transizione . Ritornano al chiamante non appena la transizione è iniziata ma prima che termini . Inoltre, una chiamata al metodo su un componente in transizione verrà ignorata .

Consulta la nostra documentazione JavaScript per ulteriori informazioni .

Metodo Descrizione
disable Rimuove la possibilità di mostrare il popover di un elemento. Il popover potrà essere mostrato solo se viene riattivato.
dispose Nasconde e distrugge il popover di un elemento (rimuove i dati memorizzati sull'elemento DOM). I popover che utilizzano la delega (che vengono creati utilizzando l' selectoropzione ) non possono essere distrutti individualmente sugli elementi trigger discendenti.
enable Dà al popover di un elemento la possibilità di essere mostrato. I popover sono abilitati per impostazione predefinita.
getInstance Metodo statico che ti consente di ottenere l'istanza popover associata a un elemento DOM.
getOrCreateInstance Metodo statico che ti consente di ottenere l'istanza popover associata a un elemento DOM o di crearne una nuova nel caso non sia stata inizializzata.
hide Nasconde il popover di un elemento. Ritorna al chiamante prima che il popover sia stato effettivamente nascosto (cioè prima hidden.bs.popoverche si verifichi l'evento). Questo è considerato un'attivazione "manuale" del popover.
setContent Fornisce un modo per modificare il contenuto del popover dopo la sua inizializzazione.
show Rivela il popover di un elemento. Ritorna al chiamante prima che il popover sia stato effettivamente mostrato (cioè prima shown.bs.popoverche si verifichi l'evento). Questo è considerato un'attivazione "manuale" del popover. I popover il cui titolo e contenuto sono entrambi di lunghezza zero non vengono mai visualizzati.
toggle Attiva/disattiva il popover di un elemento. Ritorna al chiamante prima che il popover sia stato effettivamente mostrato o nascosto (cioè prima che si verifichi l' evento shown.bs.popovero hidden.bs.popover). Questo è considerato un'attivazione "manuale" del popover.
toggleEnabled Attiva o disattiva la possibilità di mostrare o nascondere il popover di un elemento.
update Aggiorna la posizione del popover di un elemento.
// 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'
})
Il setContentmetodo accetta un objectargomento, in cui ogni chiave di proprietà è un stringselettore valido all'interno del modello popover e ogni valore di proprietà correlato può essere string| element| function| null

Eventi

Evento Descrizione
hide.bs.popover Questo evento viene generato immediatamente quando hideviene chiamato il metodo dell'istanza.
hidden.bs.popover Questo evento viene attivato quando il popover ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS).
inserted.bs.popover Questo evento viene attivato dopo l' show.bs.popoverevento quando il modello popover è stato aggiunto al DOM.
show.bs.popover Questo evento viene attivato immediatamente quando showviene chiamato il metodo dell'istanza.
shown.bs.popover Questo evento viene attivato quando il popover è stato reso visibile all'utente (attenderà il completamento delle transizioni CSS).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})