Vai al contenuto principale

Popover

Documentazione ed esempi per aggiungere popover (tooltip informativi) a qualsiasi elemento del tuo sito.

I popover si basano sulla libreria di terze parti Popper.js. Per fare in modo che i popover funzionino è necessario includere popper.min.js prima di bootstrap-italia.js o usare la versione bundle che contiene già Popper.js. I popovers richiedono il plugin tooltip come dipendenza.

Accessibilità

I popover funzionano sia con la tastiera che per gli utenti dotati di tecnologia assistiva. Allo stesso modo di quanto avviene per i Tooltip, il codice generato per i Popover è accessibile.

Cose da sapere quando si utilizza il plugin popover:

  • I popover sono opt-in per ragioni di performance, quindi devi inizializzarli tu stesso con il codice che trovi di seguito.
  • I title e i content con valori vuoti non mostreranno mai popover.
  • Specifica container: 'body' per evitare problemi di rendering in componenti più complessi (come nei gruppi di input, gruppi di pulsanti, etc).
  • Attivare i popover su elementi nascosti non funzionerà.
  • I popover per gli elementi .disabled o disabled devono essere attivati da un elemento contenitore.
  • Quanto attivato da ancore che si estendono su più linee, i popover verranno centrati tra la larghezza complessiva delle ancore. Usa white-space: nowrap; sugli elementi <a> per evitare questo comportamento.
  • I Popover devono essere nascosti prima che i loro elementi corrispondenti siano stati rimossi dal DOM.

Attivazione generale

Un modo per inizializzare tutti i popovers in una pagina è quello di selezionarli tramite il loro attributo data-bs-toggle:

1
2
3
4
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
  return new bootstrap.Popover(popoverTriggerEl)
})

Attivazione con opzione container

Quando hai alcuni stili su un elemento genitore che interferiscono con un popover, è consigliato specificare un container personalizzato in modo che l’HTML del popover appaia invece all’interno di quell’elemento.

1
2
3
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
  container: 'body',
})
1
<button type="button" class="btn btn-lg btn-danger fade show" data-bs-toggle="popover" title="Titolo del Popover" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue.">Clicca per attivare/disattivare il popover</button>

Esempi

Posizione

Sono disponibili quattro opzioni: allineato in alto, a destra, in basso e a sinistra.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<div class="container">
  <div class="row">
    <div class="col-12 col-md-4"></div>
    <div class="col-12 col-md-4">
      <button type="button" class="btn btn-secondary fade show" data-container="body" data-bs-toggle="popover" data-bs-placement="top" title="Titolo del Popover" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue." style="width:100%;">
        Popover in alto
      </button>
    </div>
    <div class="col-12 col-md-4"></div>
  </div>
  <div class="row mt-4">
    <div class="col-12 col-md-4">
      <button type="button" class="btn btn-secondary fade show" data-container="body" data-bs-toggle="popover" data-bs-placement="right" title="Titolo del Popover" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue." style="width:100%;">
        Popover a destra
      </button>
    </div>
    <div class="col-12 col-md-4"></div>
    <div class="col-12 col-md-4 mt-4 mt-md-0">
      <button type="button" class="btn btn-secondary fade show" data-container="body" data-bs-toggle="popover" data-bs-placement="left" title="Titolo del Popover" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue." style="width:100%;">
        Popover a sinistra
      </button>
    </div>
  </div>
  <div class="row mt-4">
    <div class="col-12 col-md-4"></div>
    <div class="col-12 col-md-4">
      <button type="button" class="btn btn-secondary fade show" data-container="body" data-bs-toggle="popover" data-bs-placement="bottom" title="Titolo del Popover" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue." style="width:100%;">
        Popover in basso
      </button>
    </div>
    <div class="col-12 col-md-4"></div>
  </div>
</div>

È possibile aggiungere un’icona in testa al titolo ed un link in coda al contenuto. In questo casi è necessario aggiungere l’attributo data-bs-html="true" al pulsante che apre il Popover e disabilitare la funzione di sanitize attraverso l’opzione { sanitize: false }.

L’icona va inclusa come HTML nell’attributo title="" subito prima del vero e proprio titolo.

Il link come HTML nell’attributo data-bs-content="" dopo il contenuto testuale, con classe .popover-inner-link.

1
2
3
<button type="button" class="btn btn-secondary fade show" data-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-html="true" title="<svg class='icon'><use href='/dist/svg/sprites.svg#it-help-circle'></use></svg> Titolo con icona" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue.<a href='#' class='popover-inner-link'>Leggi tutto<svg class='icon'><use href='/dist/svg/sprites.svg#it-arrow-right'></use></svg></a>">
Popover con icona e link
</button>

Prestare attenzione alla inizializzazione del Popover contenente le icone come nel caso sopra: per la corretta visualizzazione del componente occorre disabilitare l’opzione di sanitize.

1
2
3
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
  sanitize: false,
})

Modalità Hover

Per aprire il Popover all’hover del mouse sull’elemento, aggiungere l’attributo data-bs-trigger="hover" al tag dello stesso.

1
2
3
<button type="button" class="btn btn-secondary fade show" data-container="body" data-bs-toggle="popover" data-bs-trigger="hover" data-bs-placement="right" data-html="true" title="Popover in Hover" data-bs-content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel finibus augue.">
Apertura in Hover
</button>

Chiusura al click successivo

Usa l’evento focus per ignorare i popover sul clic successivo dell’utente di un elemento diverso rispetto all’elemento di attivazione / disattivazione.

Markup specifico richiesto per ignorare il click successivo

Per il giusto comportamento cross-browser e cross-platform, è necessario utilizzare il tag <a>, non il tag <button>, ed è necessario anche includere l’attributo tabindex.

1
<a tabindex="0" href="#" class="btn btn-lg btn-danger fade show" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Popover richiudibile" data-bs-content="Ecco il contenuto del popover richiudibile">Popover richiudibile</a>
1
2
3
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
  trigger: 'focus',
})

Elementi disabilitati

Elementi con l’attributo disabled non sono interattivi, il che significa che gli utenti non possono attivare il popover (o un tooltip) con il passaggio del mouse o facendo click su di essi. Come soluzione, ti consigliamo di attivare il popover da un elemento <div> o <span> contenitore e sovrascrivere il pointer-events su un elemento disabilitato.

Per gli eventi dei popover disabilitati, potresti preferire data-bs-trigger="hover" in modo che il popover appaia come feedback visivo immediato per gli utenti in quanto non possono aspettarsi di cliccare su un elemento disabilitato.

1
2
3
<span class="d-inline-block fade show" data-bs-toggle="popover" data-bs-content="Popover disabilitato">
<button class="btn btn-primary" style="pointer-events: none;" type="button" disabled>Popover disabilitato</button>
</span>

Attivazione tramite codice

Nel caso in cui si desidera che il componente sia inizializzato in maniera automatica utilizzare l’attributo data-bs-toggle specifico per la sua inizializzazione.

Nel caso in cui si desidera importare e inizializzare autonomamente il componente l’attributo data-bs-toggle specifico non deve essere incluso così da evitare inizializzazioni automatiche che possono portare a comportamenti inaspettati.

Per maggiori informazioni consulta la sezione JavaScript di Bootstrap Italia.

Abilita i popover tramite JavaScript:

1
2
3
4
import { Popover } from 'bootstrap-italia';

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

Opzioni

Le opzioni possono essere passate tramite attributi data o tramite JavaScript. Per gli attributi data, aggiungi l’opzione nome a data-bs-, come in data-bs-animation="".

Nome Tipo Predefinito Descrizione
allowList oggetto Valore predefinito Oggetto che contiene attributi e tag consentiti.
animazione booleano vero Applica una transizione di dissolvenza CSS al popover.
boundary string, element 'clippingParents' Limite di 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 maggiori informazioni, fare riferimento alla documentazione detectOverflow di Popper.
contenitore stringa, elemento, false false Aggiunge il popover a un elemento specifico. Esempio: contenitore: 'corpo'. Questa opzione è particolarmente utile in quanto consente di posizionare il popover nel flusso del documento vicino all'elemento di attivazione, il che impedirà al popover di allontanarsi dall'elemento di attivazione durante il ridimensionamento della finestra.
content stringa, elemento, funzione '' Valore del contenuto predefinito se l'attributo data-bs-content non è presente. Se viene specificata una funzione, verrà chiamata con il suo riferimento this impostato sull'elemento a cui è collegato il popover.
customClass stringa, funzione '' Aggiungi classi al popover quando viene visualizzato. Nota che queste classi saranno aggiunte in aggiunta a qualsiasi classe specificata 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 number, object 0 Ritardo nella visualizzazione e nell'occultamento del popover (ms): non si applica al tipo di trigger manuale. Se viene fornito un numero, il ritardo viene applicato sia a hide/show. La struttura dell'oggetto è: delay: { "show": 500, "hide": 100 }.
fallbackPlacements string, array ['top', 'right', 'bottom', 'left'] Definisci i posizionamenti di fallback fornendo un elenco di posizionamenti in array (in ordine di preferenza). Per maggiori informazioni, fare riferimento alla documentazione sul comportamento di Popper.
html booleano false Consenti HTML nel popover. Se è vero, i tag HTML nel title del popover verranno renderizzati nel popover. Se è falso, verrà utilizzata la proprietà innerText per inserire il contenuto nel DOM. Usa text 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 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 del popper, il riferimento e i rettangoli del popper 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 maggiori informazioni, fare riferimento a offset docs.
posizionamento stringa, funzione 'top' Come posizionare il popover: auto, top, bottom, left, right. Quando viene specificato auto, riorienterà dinamicamente il popover. Quando viene utilizzata una funzione per determinare il posizionamento, viene chiamata con il nodo DOM del popover come primo argomento e il nodo DOM dell'elemento di attivazione come secondo. Il contesto this è impostato sull'istanza del popover.
popperConfig null, oggetto, function null Per modificare la configurazione 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 la configurazione predefinita con la tua configurazione. La funzione deve restituire un oggetto di configurazione per Popper.
sanitize boolean true Abilita o disabilita la sanificazione. Se attivate le opzioni 'template', 'content' e 'title' verranno sanificate.
sanitizeFn null, function null Qui puoi fornire la tua funzione di sanificazione. Ciò può essere utile se preferisci utilizzare una libreria dedicata per eseguire la sanificazione.
selector string, false false Se viene fornito un selettore, gli oggetti popover verranno delegati ai target specificati. In pratica, questo viene utilizzato anche per applicare popover agli elementi DOM aggiunti dinamicamente (supporto jQuery.on). Vedere questo problema e un esempio informativo. Nota: l'attributo title non deve essere utilizzato come selettore.
template string '<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. Il title del popover verrà iniettato in .popover-inner. .popover-arrow diventerà la freccia del popover. L'elemento wrapper più esterno dovrebbe avere la classe .popover e role="popover".
title stringa, elemento, funzione '' Valore predefinito del titolo se l'attributo title non è presente. Se viene fornita una funzione, verrà chiamata con il suo riferimento this impostato sull'elemento a cui è collegato il popover.
trigger stringa 'hover focus' Come viene attivato il popover: clic, hover, focus, manuale. Puoi passare più trigger; separali con uno spazio. 'manual' indica che il popover verrà attivato a livello di programmazione tramite i metodi .popover('show'), .popover('hide') e .popover('toggle'); questo valore non può essere combinato con nessun altro trigger. 'hover' da solo genererà popover che non possono essere attivati ​​tramite la tastiera e dovrebbe essere utilizzato solo se sono presenti metodi alternativi per trasmettere le stesse informazioni agli utenti della tastiera.

Metodi

Metodi asincroni e transizioni

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

Per maggiori informazioni consulta la documentazione Javascript di Bootstrap (in inglese).

Metodo Descrizione
getInstance Metodo statico che consente di ottenere l'istanza di avviso associata a un elemento DOM, è possibile utilizzarlo in questo modo: Popover.getInstance(domElement).
getOrCreateInstance Metodo statico che restituisce un'istanza di avviso associata a un elemento DOM o ne crea una nuova nel caso in cui non fosse stata inizializzata. Puoi utilizzarla in questo modo: Popover.getOrCreateInstance(element).
dispose Rimuove la funzionalità Popover.
disable Rimuove la possibilità di mostrare il popover di un elemento. Il popover potrà essere mostrato solo se viene riattivato.
enable Conferisce al popover di un elemento la possibilità di essere visualizzato. I popover sono abilitati per impostazione predefinita.
hide Nasconde il popover di un elemento. Torna al chiamante prima che il popover sia stato effettivamente nascosto (ad esempio prima che si verifichi l'evento hidden.bs.popover). Questo è considerato un trigger "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 (ad esempio prima che si verifichi l'evento shown.bs.popover). Questo è considerato un trigger "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 (ad esempio prima che si verifichi l'evento shown.bs.popover o hidden.bs.popover). Questo è considerato un'attivazione "manuale" del popover.
toggleEnabled Attiva o disattiva la possibilità che il popover di un elemento venga mostrato o nascosto.
update Aggiorna la posizione del popover di un elemento.

Eventi

1
2
3
4
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
  // do something...
})
Tipo di evento Descrizione
show.bs.popover Questo evento si attiva immediatamente quando viene chiamato il metodo show.
shown.bs.popover Questo evento viene attivato quando il popover è stato reso visibile all'utente (attenderà il completamento delle transizioni CSS).
hide.bs.popover Questo evento si attiva immediatamente quando viene chiamato il metodo hide.
hidden.bs.popover Questo evento viene generato quando il popover ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS).
inserted.bs.popover Questo evento si attiva dopo l'evento show.bs.popover quando il modello del popover è stato aggiunto al DOM.