Pattern per dropdown e popover
Crei menu dropdown e popover accessibili utilizzando il posizionamento CSS e la Popover API.
Pattern per dropdown e popover è una lezione CSS Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CSS Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CSS Academy include 4 lezioni in totale.
API Popover
L'HTML Popover API (Chrome 114+, ampiamente supportata) offre un comportamento dichiarativo per la visualizzazione e l'occultamento: attributo popover sull'elemento di destinazione e popovertarget sul pulsante trigger. Per l'apertura e la chiusura di base non serve JavaScript, inclusa la chiusura al clic esterno e la gestione del tasto Escape.
Stilizzazione dei popover
Selezioni gli elementi popover con [popover] o :popover-open. Il pseudo-elemento ::backdrop è disponibile per oscurare lo sfondo. I popover vengono visualizzati nel top layer, come i dialog, evitando problemi di impilamento legati a z-index.
Posizionamento dei dropdown con Anchor Positioning
CSS Anchor Positioning (Chrome 125+) posiziona un popover rispetto al suo trigger senza JavaScript: anchor-name: --btn sul trigger, position-anchor: --btn sul popover, quindi top: anchor(bottom); left: anchor(left) per allinearlo sotto il trigger.
Fallback con position: absolute
Senza Anchor Positioning, usi un wrapper contenitore con posizionamento: position: relative sul contenitore e position: absolute; top: 100%; left: 0 sul dropdown. Funziona in tutti i browser, ma richiede che trigger e dropdown siano elementi fratelli all'interno di un contenitore con posizionamento.
CSS per i menu dropdown
Definisca lo stile dell'elenco dropdown come position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. Gli elementi del menu usano padding, uno sfondo al passaggio del mouse e una visualizzazione a larghezza completa.
Animazioni
Anime l'apertura e la chiusura dei popover usando @starting-style per l'ingresso e transition-behavior: allow-discrete per animare la modifica della proprietà display. In questo modo è possibile creare animazioni CSS di ingresso e uscita associate allo stato aperto o chiuso del popover.
Accessibilità da tastiera
I menu dropdown devono supportare la tastiera: i tasti freccia permettono di spostarsi tra gli elementi del menu, Invio/Spazio attivano l'elemento focalizzato, mentre Escape chiude il menu e restituisce il focus al trigger. La Popover API gestisce automaticamente Escape; la navigazione con i tasti freccia richiede la gestione degli eventi JavaScript.
ARIA per i dropdown personalizzati
Dropdown personalizzato, che non usa la popover API: aggiunga aria-haspopup="listbox" e aria-expanded al trigger, role="listbox" all'elenco, e role="option" e aria-selected a ogni elemento. I lettori di schermo annunciano lo stato di espansione e il numero di elementi.
Overflow e collisioni con la viewport
Un dropdown posizionato sotto il trigger può fuoriuscire dalla viewport nella parte inferiore. Rilevi il problema con IntersectionObserver o getBoundingClientRect e sposti il dropdown sopra il trigger. CSS Anchor Positioning gestisce questo caso con position-try-fallbacks.
Dropdown multilivello
I dropdown annidati, ovvero i sottomenu, aggiungono complessità. Posizioni i sottomenu a destra dei relativi elementi principali. Aggiunga un ritardo prima di nasconderli quando il mouse esce, usando CSS transition-delay o un timeout JS, per impedire che si chiudano durante il movimento diagonale del mouse.
Considerazioni per i dispositivi touch
I dropdown attivati al passaggio del mouse non funzionano sui dispositivi touch, perché non esiste uno stato hover. Usi universalmente trigger basati su clic o tocco. La chiusura con un tocco all'esterno funziona tramite la chiusura automatica della popover API oppure con un listener di clic sul document che chiuda i dropdown aperti.
Verifica delle conoscenze
Che cosa fornisce automaticamente la Popover API che in precedenza richiedeva JavaScript personalizzato?
Riepilogo
La Popover API e CSS Anchor Positioning, usati insieme, consentono di creare pattern dichiarativi per dropdown e popover con un uso minimo di JavaScript. Per una compatibilità più ampia tra i browser, i pattern basati su contenitori con posizionamento funzionano in modo affidabile. Accessibilità da tastiera, attributi ARIA, gestione delle collisioni con la viewport e supporto per i dispositivi touch completano componenti dropdown pronti per la produzione.
Domande Frequenti
La lezione «Pattern per dropdown e popover» è gratuita?
Sì — il testo completo di «Pattern per dropdown e popover» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CSS Academy, passa a CoddyKit PRO. Il corso CSS Academy include 4 lezioni in totale.
Cosa imparerò in «Pattern per dropdown e popover»?
Crei menu dropdown e popover accessibili utilizzando il posizionamento CSS e la Popover API. Eserciti CSS Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare CSS Academy?
Non è richiesta alcuna esperienza precedente. CSS Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Pattern per dropdown e popover»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione CSS Academy?
Sì. Ogni lezione CSS Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Componente card con proprietà personalizzate CSS
- Stili per modal e dialog
- Pattern per dropdown e popover
- Componente tab con :checked a confronto con JS