Mönster för rullgardinsmenyer och popovers
Skapa tillgängliga rullgardinsmenyer och popovers med CSS-positionering och Popover API.
Mönster för rullgardinsmenyer och popovers är en gratis lektion i CSS Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för CSS Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i CSS Academy innehåller totalt 4 lektioner.
Popover API
HTML:s Popover API (Chrome 114+, med brett stöd) tillhandahåller deklarativt visnings- och döljbeteende: attributet popover på målelementet och popovertarget på utlösarknappen. Ingen JavaScript behövs för grundläggande öppning och stängning, inklusive automatisk stängning vid klick utanför och hantering av Escape-tangenten.
Styla popovers
Välj popover-element med [popover] eller :popover-open. Pseudoelementet ::backdrop kan användas för att tona ned bakgrunden. Popovers renderas i det översta lagret, precis som dialoger – inga problem med z-index-stapling.
Positionering av rullgardinsmeny med Anchor Positioning
CSS Anchor Positioning (Chrome 125+) positionerar en popover i förhållande till dess utlösare utan JavaScript: anchor-name: --btn på utlösaren, position-anchor: --btn på popovern och sedan top: anchor(bottom); left: anchor(left) för att justera den under utlösaren.
Reservlösning med position: absolute
Utan Anchor Positioning kan du använda en positionerad överordnad omslutare: position: relative på behållaren och position: absolute; top: 100%; left: 0 på rullgardinsmenyn. Detta fungerar i alla webbläsare, men kräver att utlösaren och rullgardinsmenyn är syskon i en positionerad behållare.
CSS för rullgardinsmeny
Styla rullgardinslistan som position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. Menyalternativ använder padding, bakgrund vid hover och visning över hela bredden.
Animering
Animera när popovern öppnas och stängs med @starting-style för öppningsanimeringen och transition-behavior: allow-discrete för att animera ändringen av egenskapen display. Detta möjliggör CSS-baserade animeringar för öppning och stängning som är kopplade till popovern öppen- eller stängdstatus.
Tangentbordstillgänglighet
Rullgardinsmenyer måste stödja tangentbordet: piltangenterna navigerar mellan menyalternativ, Enter/mellanslag aktiverar det fokuserade alternativet och Escape stänger menyn och återför fokus till utlösaren. Popover API hanterar Escape automatiskt, medan navigering med piltangenter kräver händelsehantering med JavaScript.
ARIA för anpassade rullgardinsmenyer
För en anpassad rullgardinsmeny (som inte använder popover-API:et): lägg till aria-haspopup="listbox" och aria-expanded på utlösaren, role="listbox" på listan samt role="option" och aria-selected på varje alternativ. Skärmläsare meddelar om menyn är expanderad och hur många alternativ den innehåller.
Överflöd och kollision med vyporten
En rullgardinsmeny som positioneras under sin utlösare kan hamna utanför vyportens nederkant. Upptäck detta med IntersectionObserver eller getBoundingClientRect och flytta rullgardinsmenyn ovanför utlösaren. CSS Anchor Positioning hanterar detta med position-try-fallbacks.
Rullgardinsmenyer i flera nivåer
Kapslade rullgardinsmenyer (undermenyer) gör lösningen mer komplex. Positionera undermenyer till höger om deras överordnade alternativ. Lägg till en fördröjning innan de döljs när muspekaren lämnar dem (med CSS transition-delay eller en JS-timeout) för att förhindra att undermenyer stängs när musen rör sig diagonalt.
Att tänka på för pekskärmsenheter
Rullgardinsmenyer som utlöses vid hover fungerar inte på pekskärmsenheter – där finns inget hover-tillstånd. Använd klick- eller tryckutlösare överallt. Stängning genom tryck utanför fungerar med Popover API:ets automatiska stängning eller med en click-lyssnare på dokumentet som stänger öppna rullgardinsmenyer.
Kunskapskontroll
Vad tillhandahåller Popover API automatiskt som tidigare krävde anpassad JavaScript?
Sammanfattning
Popover API och CSS Anchor Positioning möjliggör deklarativa rullgardins- och popovermönster med minimalt behov av JavaScript. För bredare webbläsarstöd fungerar mönster med positionerade behållare tillförlitligt. Tangentbordstillgänglighet, ARIA-attribut, hantering av kollisioner med vyporten och stöd för pekskärmsenheter kompletterar rullgardinsmenyer som är redo för produktion.
Lär dig CSS med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 40
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Mönster för rullgardinsmenyer och popovers” gratis?
Ja – hela texten till ”Mönster för rullgardinsmenyer och popovers” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i CSS Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i CSS Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Mönster för rullgardinsmenyer och popovers”?
Skapa tillgängliga rullgardinsmenyer och popovers med CSS-positionering och Popover API. Ni övar på CSS Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig CSS Academy?
Du behöver inga förkunskaper. Utbildningen i CSS Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Mönster för rullgardinsmenyer och popovers”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här CSS Academy-lektionen?
Ja. Varje CSS Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Kortkomponent med anpassade CSS-egenskaper
- Stil för modaler och dialogrutor
- Mönster för rullgardinsmenyer och popovers
- Tabbkomponent med :checked-hack kontra JS