MeDo

KI-Dropdown-Menü-Generator.

Beschreiben Sie Ihre Einträge und MeDo generiert das komplette Menü — Trigger, Panel, gruppierte Abschnitte mit Trennlinien, Untermenüs, Pfeiltasten- und Type-Ahead-Navigation, Schließen per Escape und Klick nach außen sowie Fokus, der beim Schließen zum Trigger zurückkehrt.

Dropdown-Menü
Dropdown-Menü

Ein Menü ist ein einziger Tab-Stop — und genau das wird meist falsch gemacht

Der Instinkt sagt, jeder Eintrag müsse fokussierbar sein, damit Tab ihn einzeln erreicht. Das ARIA-Menu-Pattern macht das Gegenteil: Das gesamte Menü ist ein einziger Tab-Stop, und die Pfeiltasten verschieben einen Roving Tabindex zwischen den Einträgen, während Tab das Menü schließt und verlässt. Deshalb kostet das Überspringen eines Kontomenüs mit 12 Einträgen einen Tastendruck statt zwölf. Es erklärt auch, warum Menüs eine explizite Fokuswiederherstellung brauchen: Da der Fokus programmatisch ins Panel verschoben wurde, landet ein Tastaturnutzer beim Schließen ohne Rückgabe an den Trigger am Anfang des Dokuments. Trigger und Panel als eine Komponente zu generieren hält diesen Rundweg intakt, weil beide Hälften gegen denselben Fokus-Vertrag geschrieben sind.

6 Vorlagen

Dropdown-Menü-Vorlagen, die Sie generieren können

Jede Vorlage ist ein echter Prompt, kein Screenshot. Kopieren Sie ihn in einen KI-Editor oder führen Sie ihn in MeDo aus und erhalten Sie React- und Tailwind-Code zurück.

BasicAccount Menu

Avatar Trigger With Grouped Actions

The top-right menu every product has. Get the focus round trip right here and the rest of your menus inherit it — closing without returning focus drops keyboard users at the top of the document.

Create an account dropdown menu: a 32px avatar trigger with aria-haspopup="menu" and aria-expanded, and a 240px panel with role="menu" anchored 6px below it. Each row is role="menuitem", 32px tall, with a 16px leading icon. Use a roving tabindex so the whole menu is one tab stop — Tab closes it and leaves rather than walking the items. Enter, Space or Arrow Down opens the menu and focuses the first item; Arrow Up opens it focusing the last. Arrow Down and Up cycle with wrapping, Home and End jump to the ends, typing a letter jumps to the next item starting with it, Escape and outside pointerdown close it, and focus returns to the trigger on every close path. Group items with 1px dividers and style Sign out as a destructive red item in its own group.

In MeDo testen
Table rowRow Overflow

Three-Dot Menu on a Table Row

Repeated once per row, which makes the trigger label the real problem: twenty buttons all called "More options" tell a screen reader user nothing about which record they are about to delete.

Create a row-level overflow menu for a data table: a 32px icon-only three-dot trigger with aria-haspopup="menu", aria-expanded, and an accessible name that names its record — "More actions for invoice 1042" — so repeated triggers are distinguishable. The panel is role="menu" with Edit, Duplicate and Export, then a divider and a destructive Delete that opens a confirmation dialog and moves focus into it rather than acting immediately. Roving tabindex, Arrow Up and Down with wrapping, Home and End, single-letter type-ahead, Escape and outside pointerdown to close, focus back to the trigger. Close the menu when its ancestor scroll container scrolls, since an anchored panel detaches from a row that has moved.

In MeDo testen
NestedSubmenu

Parent Items With Nested Panels

One level of nesting, with a hover intent delay. Without the delay, dragging the pointer diagonally to the item you wanted opens and closes three submenus on the way there.

Create a dropdown menu with one level of submenus: the parent item carries aria-haspopup="menu", aria-expanded and a trailing chevron, and its child panel is a separate role="menu" anchored to the parent's right edge, flipping to the left when it would leave the viewport. Open the submenu on Arrow Right or Enter with focus on the first child, and on hover after a 150ms intent delay with a similar grace period before closing so a diagonal pointer path does not toggle three panels. Arrow Left closes the submenu and returns focus to the parent item; Escape closes the whole menu and focuses the trigger. Keep type-ahead scoped to the currently open panel, and do not nest a second level.

In MeDo testen
TogglesCheckable Items

Menu With Checkbox and Radio Rows

View options and sort order inside a menu. The roles change with the semantics — menuitemcheckbox for independent toggles, menuitemradio in a group for one-of-many — and so does whether the panel closes on select.

Create a view-options dropdown mixing checkable rows: a group of role="menuitemcheckbox" rows with aria-checked for column visibility, and below a divider a group of role="menuitemradio" rows inside role="group" with aria-labelledby a Sort by heading, where exactly one is aria-checked. Keep the panel open when a checkbox row is toggled so several can be set in one pass, and close it after a radio selection since the choice is complete. Reserve the check indicator column at a fixed width so labels do not shift when a state changes. Roving tabindex, Arrow Up and Down with wrapping, Home and End, Space toggles without closing, Enter selects, Escape closes and returns focus to the trigger.

In MeDo testen
NavigationNav Disclosure

Header Dropdown of Plain Links

Deliberately not a menu. A products dropdown holds links, so role="menu" would collapse them into one tab stop and stop cmd+click from opening a new tab.

Create a navigation dropdown for a marketing header that is a disclosure, not an ARIA menu: a trigger button with aria-expanded and aria-controls, and a panel containing a plain ul of anchor elements — no role="menu" or role="menuitem", so each link stays individually focusable and openable in a new tab with cmd+click or middle click. Tab moves through the links in order rather than a roving tabindex. Open on click and on Arrow Down, close on Escape with focus returning to the trigger, close on outside pointerdown, and close on focusout when focus leaves the panel entirely. Do not open on hover alone on touch devices. Mark the link matching the current route with aria-current="page".

In MeDo testen
FilterableSearch Menu

Long Menu With a Filter Field

Past roughly fifteen items, single-letter type-ahead stops being enough. Adding a text field changes the contract: the field keeps focus and the highlight moves by aria-activedescendant.

Create a filterable dropdown for a long list: a trigger with aria-haspopup and aria-expanded, and a panel whose first element is a search input that receives focus on open. Because a text field now holds focus, switch from a roving tabindex to the combobox approach — role="listbox" on the list, role="option" on rows, and aria-activedescendant on the input so Arrow Up and Down move the highlight while typing keeps working. Filter as the user types with a 150ms debounce, bold the matched substring, cap the list at 280px with internal scroll, and scroll the active option into view with block nearest. Show a no-matches row rather than an empty panel. Escape clears a non-empty filter first, then closes on a second press with focus returning to the trigger.

In MeDo testen

So passen Sie Ihre Dropdown-Menü an

Sagen Sie, dass es ein Aktionsmenü ist und kein <select>

role="menu" teilt assistiver Technologie mit, dass jeder Eintrag einen Befehl ausführt. Wenn die Einträge stattdessen einen Formularwert setzen, fordern Sie eine Listbox oder ein natives <select> an. Ein Menü für ein Formularfeld zu verwenden führt dazu, dass Screenreader Befehle ansagen, wo Nutzer Optionen erwarten.

Nennen Sie die Hover-Absichtsverzögerung für Untermenüs

Fordern Sie rund 150ms Verzögerung vor dem Öffnen eines Untermenüs und eine ähnliche Nachlaufzeit vor dem Schließen. Ohne sie öffnet und schließt ein diagonales Ziehen des Zeigers über die übergeordnete Liste drei Untermenüs auf dem Weg zum gewünschten.

Fordern Sie kollisionsbewusste Positionierung ausdrücklich an

Sagen Sie, dass das Panel nahe der unteren Kante über den Trigger klappen und sich horizontal verschieben soll, um sichtbar zu bleiben. Ein an einen Avatar oben rechts verankertes Menü ist der häufigste Fall, in dem ein fester Offset die Hälfte der Einträge außerhalb des Bildschirms rendert.

Trennen Sie den destruktiven Eintrag ab

Setzen Sie Aktionen wie Abmelden, Löschen oder Zugriff entziehen in eine eigene Gruppe unter einer Trennlinie und fordern Sie die destruktive Farbbehandlung an. Der räumliche Abstand zu Routineeinträgen verhindert den Fehlklick, nicht der rote Text.

Wer die Dropdown-Menü-Komponente nutzt

SaaS-Produkt

Ein Avatar-Menü oben rechts mit der Konto-E-Mail als statischer Kopfzeile, darunter Links zu Profil und Abrechnung, ein Team-Untermenü, ein Theme-Umschalter und Abmelden isoliert unter einer Trennlinie.

Dashboard oder Admin-Tool

Ein Overflow-Menü auf Zeilenebene hinter einer Drei-Punkte-Schaltfläche mit Bearbeiten, Duplizieren, Exportieren und einem destruktiven Löschen, wobei der Trigger durch die zugehörige Zeile benannt ist, damit Screenreader ansagen, welcher Datensatz bearbeitet wird.

Content-Editor

Ein Block-Einfügemenü mit gruppierten Elementtypen, einem Untermenü von Embed-Anbietern und Type-Ahead-Buchstabensprüngen, damit jemand, der die Liste kennt, einen Eintrag ohne Durchpfeilen erreicht.

Navigation einer Marketing-Website

Ein Produkt-Dropdown in der Navbar, aufgebaut aus einer einfachen Liste von Links statt role="menu", damit sich das Panel wie die Navigation verhält, die es ist, und Links einzeln fokussierbar und in einem neuen Tab öffenbar bleiben.

Dropdown-Menü-Muster für verschiedene Websites

Dieselbe dropdown-menü-Komponente, abgestimmt auf die Art der Website, auf der sie läuft.

01 / 06

SaaS Account Menu

Avatar trigger, the account email as a static non-focusable header row, then profile and billing links, a team submenu and Sign out below a divider. Keep the email row out of the roving tabindex — a label that takes an arrow keypress to skip reads as a broken menu item.

Dropdown-Menü-Stile und -Varianten

Wählen Sie die Variante, die zum Rest der Seite passt, und generieren Sie sie.

01 / 06

Grouped Action Menu

Rows split into two or three sections by 1px dividers, with the destructive action alone at the bottom. The physical gap is what prevents the misclick on Sign out or Delete — red text alone does not, because the pointer is already moving before the color registers.

Dropdown-Menü in React, Next.js, Vue und Svelte

React, Next.js, Vue 3, SvelteKit, Astro oder reines HTML — dieselbe dropdown-menü, sechs Wege zur Einbindung.

01 / 06

React Dropdown Menu

Hold the active index in state and derive tabIndex from it — that is the roving tabindex. Keep a ref to the trigger and focus it in the close handler, since the browser will not restore focus for you.

src/components/Menu.tsx

const [open, setOpen] = useState(false)
const [active, setActive] = useState(0)
const triggerRef = useRef(null)

function close() {
  setOpen(false)
  triggerRef.current?.focus()
}

<button ref={triggerRef} aria-haspopup="menu" aria-expanded={open}>
  Account
</button>

So fügen Sie Ihre Dropdown-Menü einem Projekt hinzu

Vier Schritte, von der Auswahl einer dropdown-menü-Vorlage bis zum Einsatz in der Produktion.

01~30s

Pick a Menu Template

Answer one question first: do the items run commands or navigate? Actions get the menu templates and their roving tabindex; links get the navigation disclosure, where every anchor stays its own tab stop.

02~10s

Copy the Prompt

Take the prompt into MeDo, Lovable, Bolt, v0 or Cursor and list your real items with the dividers where you want them. Say which item is destructive and which opens a submenu, since both change the generated markup.

03~1min

Generate and Refine

You get React + Tailwind back with a live preview. Follow up in plain English — "add a filter field", "flip above the trigger near the bottom edge", "turn Sort into radio items" — instead of touching the keydown handler.

04~2min

Wire the Actions and Ship

Connect each item to its handler, then verify the focus round trip with the keyboard alone: open, arrow down, Escape, and confirm focus lands back on the trigger rather than the top of the page.

Häufige Fragen zu Dropdown-Menü

Wie generiere ich ein Dropdown-Menü mit KI?

Listen Sie die gewünschten Einträge auf, notieren Sie, welche ein Untermenü öffnen, und sagen Sie, wo die Trennlinien liegen. MeDo generiert Trigger, verankertes Panel, gruppierte Einträge und die Tastaturbehandlung als eine Komponente, sodass Pfeiltasten, Escape, Klick nach außen und Fokuswiederherstellung verdrahtet sind, bevor Sie es überhaupt öffnen.

Was ist der Unterschied zwischen einem Dropdown-Menü und einem <select>?

Ein Menü ruft Aktionen auf: Die Auswahl eines Eintrags führt sofort etwas aus, und nichts wird gespeichert. Ein <select> hält einen Formularwert: Die Auswahl einer Option ändert einen Zustand, der später abgeschickt wird. Sie verwenden unterschiedliche Rollen und unterschiedliche Tastaturverträge, und das eine gegen das andere zu tauschen ist der häufigste Barrierefreiheitsfehler in eigenen Dropdowns.

Sollte ein Navigations-Dropdown role="menu" verwenden?

Nein. role="menu" ist für anwendungsartige Befehlsmenüs gedacht; auf eine Liste von Links angewendet, wird jeder Link als menuitem angesagt und alle werden zu einem einzigen Tab-Stop zusammengefasst. Ein Navigations-Dropdown sollte eine einfache Liste von Ankern in einem Disclosure sein, das der Trigger über aria-expanded umschaltet. Sagen Sie MeDo, dass das Panel Navigation ist, und es generiert Links statt Menüeinträge.

Wie sollte die Tastaturnavigation in einem Dropdown-Menü funktionieren?

Enter, Space oder Pfeil nach unten öffnen das Menü und fokussieren den ersten Eintrag. Pfeil nach oben und unten wechseln zwischen den Einträgen und laufen an den Enden um, Home und End springen zum ersten und letzten, und das Tippen eines Buchstabens springt zum nächsten Eintrag mit diesem Anfangsbuchstaben. Pfeil rechts öffnet ein Untermenü, Pfeil links schließt es, und Escape oder Tab schließen das gesamte Menü, wobei der Fokus zum Trigger zurückkehrt.

Kann KI ein Dropdown-Menü mit Untermenüs generieren?

Ja. Beschreiben Sie die Verschachtelung und MeDo generiert den übergeordneten Eintrag mit aria-haspopup, das Kind-Panel, die Hover-Absichtsverzögerung und die Bindungen für Pfeil rechts und Pfeil links. Halten Sie die Verschachtelung möglichst bei einer Ebene, denn eine zweite Ebene ist mit dem Zeiger schwer zu treffen und für Screenreader-Nutzer schwer zu beschreiben.

Muss ein Dropdown-Menü bei einem Klick nach außen schließen?

Ja, und es sollte auch bei Escape, beim Scrollen eines übergeordneten Containers und bei einem erneuten Klick auf den Trigger schließen. Registrieren Sie den Außen-Listener auf pointerdown statt click, damit ein außerhalb des Panels beginnendes Ziehen es schließt, und geben Sie den Fokus immer an den Trigger zurück, damit Tastaturnutzer nicht am Anfang der Seite landen.