25 giugno 2026
Il positioning in CSS oggi è (quasi) banale: popover, anchor e size che si allineano da soli
Con i Popover e le Anchor Positioning API puoi agganciare un menu al suo trigger in modo dichiarativo, senza calcoli e senza “magie” in JavaScript.
Posizionare dropdown e menu contestuali è sempre stato un terreno minato: offset, misure, resize, allineamenti. Oggi il CSS moderno offre un approccio molto più diretto: i popover si ancorano automaticamente al loro elemento di attivazione e puoi allinearli (e persino dimensionarli) usando anchor() e anchor-size().
Negli ultimi anni abbiamo visto il CSS diventare sempre più “layout-first”: meno workaround, meno misure a mano, più dichiaratività. Un esempio perfetto è il classico problema del dropdown (o menu contestuale) ancorato a un bottone.
Tradizionalmente, tra position: absolute, wrapper con position: relative, calcolo di offset e gestione della larghezza, bastava poco per finire con un componente fragile. Con i Popover e le nuove possibilità di anchor positioning, l’esperienza è molto più lineare.
Un popover si ancora già da solo
Quando usi un elemento configurato come popover, l’ancoraggio al trigger è spesso il comportamento più naturale: il popover “sa” qual è l’elemento che lo ha aperto e può usarlo come riferimento.
Questo elimina un passaggio comune: definire manualmente un elemento “anchor” o costruire una gerarchia di contenitori solo per dare un contesto di posizionamento.
Posizionare il menu sotto al bottone: top/bottom e left
L’obiettivo tipico è:
- il menu deve comparire sotto il bottone
- il bordo sinistro del menu deve essere allineato al bordo sinistro del bottone
- ci deve essere un piccolo gap tra i due
Con il CSS moderno puoi descriverlo in modo diretto:
topagganciato al bottom dell’anchorleftagganciato al left dell’anchor- un
margin-top(o equivalente logico) per creare spazio
In alcuni casi troverai esempi che includono position: absolute e/o override come inset: auto per “ripulire” valori di default. Spesso non è nemmeno strettamente necessario, ma può aiutare a rendere esplicito il comportamento quando stai integrando il popover in una base CSS esistente.
La ciliegina: far combaciare la larghezza con anchor-size()
Il dettaglio che rende il tutto davvero comodo è la possibilità di legare anche la dimensione del popover a quella dell’elemento di trigger.
Per un dropdown, una richiesta comune è: “il menu deve essere largo quanto il bottone”.
Qui entra in gioco anchor-size(width), che ti permette di impostare, ad esempio:
width: anchor-size(width)
Così il popover segue automaticamente la larghezza del suo anchor, senza dover replicare regole o usare JS.
Attenzione a box-sizing
Se assegni una larghezza “ancorata” e poi aggiungi padding e bordi, potresti notare che il popover risulta visivamente più largo del previsto. È il classico effetto del box model.
Per evitare sorprese, su quel componente conviene impostare:
box-sizing: border-box;
In questo modo padding e bordi rientrano nella larghezza calcolata.
Un piccolo hardening: meglio min-width che width
In molti casi è più robusto usare:
min-width: anchor-size(width)
Perché?
- garantisci almeno la larghezza del bottone
- lasci al contenuto la possibilità di espandersi (ad esempio voci lunghe nel menu)
Usa proprietà logiche quando ha senso
Se stai lavorando a un design internazionale o vuoi componenti più “future-proof”, valuta di tradurre gli allineamenti in proprietà logiche (ad esempio usando concetti equivalenti a start/end invece di left/right, e block/inline invece di top/bottom). Il principio rimane identico, ma il componente diventa più adattabile.
Sintesi operativa
Per un dropdown moderno e solido:
- sfrutta il popover, che spesso si ancora automaticamente al trigger;
- allinea posizione con valori ancorati (sotto e a sinistra/start del bottone);
- crea un gap con un margine (meglio se logico);
- fai combaciare la larghezza con
anchor-size(width)(o megliomin-width); - imposta
box-sizing: border-boxsul popover per evitare overflow dovuti al padding.
Il risultato è un componente più semplice, più leggibile e meno fragile: il posizionamento diventa finalmente una dichiarazione d’intenti, non un esercizio di incastri.