È arrivato il momento: Una delle funzionalità per cui ho più hype è disponibile da poco su tutti i browser moderni e fa ufficialmente parte di Baseline 2024. Questa funzionalità è l'API Popover. Popover offre tantissime primitive e incentivi per gli sviluppatori per creare interfacce a più livelli come descrizioni comando, menu, UI per l'insegnamento e altro ancora.
Ecco alcune brevi funzionalità dei popover:
- Passa al livello superiore. I popover verranno visualizzati nel livello superiore sopra il resto della pagina, così non dovrai giocare con
z-index
. - Funzionalità per ignorare facilmente. Se fai clic all'esterno dell'area popover, il popover verrà chiuso e ripristinerà lo stato attivo.
- Gestione predefinita dello stato attivo. Se apri il popover, la scheda successiva si ferma all'interno del popover.
- Associazioni da tastiera accessibili. Se premi il tasto
esc
o attivi/disattivi due volte, il popover si chiuderà e ripristinerà lo stato attivo. - Associazioni di componenti accessibili. Connessione di un elemento popover a un trigger popover semanticamente.
Creazione di popover
La creazione di popover è piuttosto semplice. Per utilizzare i valori predefiniti, è sufficiente un button
per attivare il popover e un elemento da attivare.
- Innanzitutto, imposta un attributo
popover
nell'elemento che sarà il popover. - A questo punto, aggiungi un
id
univoco all'elemento popover. - Infine, per collegare il pulsante al popover, imposta il valore
popovertarget
del pulsante sul valoreid
dell'elemento popover.
Ciò viene mostrato nel seguente codice:
<button popovertarget="my-popover">Open Popover</button>
<div id="my-popover" popover>
<p><p>I am a popover with more information. Hit <kbd>esc</kbd> or click away to close me.<p></p>
</div>
Per avere un controllo più granulare sui popover, puoi impostare esplicitamente i tipi di popover. Ad esempio, l'utilizzo di un attributo popover
semplice senza valore è uguale a popover="auto"
. Il valore auto
consente il comportamento di ignorare la luce e chiude automaticamente altri popover. Utilizza popover="manual"
e dovrai aggiungere un pulsante di chiusura. I popover manuali non chiudono altri popover e non consentono agli utenti di ignorarli facendo clic all'esterno dell'interfaccia utente. Per creare un popover manuale, procedi come segue:
<button popovertarget="my-popover" class="trigger-btn"> Open Popover </button>
<div id="my-popover" popover=manual>
<p>I am a popover with more information. Hit the close button or toggle to close me.<p>
<button class="close-btn" popovertarget="my-popover" popovertargetaction="hide">
<span aria-hidden="true">❌</span>
<span class="sr-only">Close</span>
</button>
</div>
Popover e finestra di dialogo modale
Forse ti starai chiedendo se hai bisogno di un popover quando esiste una finestra di dialogo e la risposta è: forse no.
È importante notare che l'attributo popover non fornisce automaticamente la semantica. Anche se ora puoi creare esperienze in stile dialogo modale utilizzando i popover, ci sono alcune differenze fondamentali tra i due:
Elemento modale <dialog>
- Aperto con
dialog.showModal()
. dialog.close()
chiusa.- Rende inerte il resto della pagina.
- Non supporta il comportamento di chiusura rapida.
- Puoi definire lo stato aperto con l'attributo
[open]
. - Rappresenta dal punto di vista semantico un componente interattivo che blocca l'interazione con il resto della pagina.
Attributo [popover]
- Può essere aperto con un invocatore dichiarativo (
popovertarget
). - Chiuso con
popovertarget
(popover automatico) opopovertargetaction=hide
(popover manuale). - Non rende inerte il resto della pagina.
- Supporta il comportamento di ignorare poco frequente.
- Puoi definire lo stato aperto con la pseudo-classe
:popover-open
. - Nessuna semantica intrinseca.
Conclusioni e ulteriori approfondimenti
popover
offre molte funzionalità entusiasmanti sulla piattaforma. Per ulteriori informazioni su questa API, comprese informazioni sull'accessibilità della funzione e la documentazione relativa all'insieme di funzionalità, di seguito sono riportate alcune letture consigliate: