`` is a floating panel containing list of options. By itself, the `` element does not render anything. The menu is attached to and opened via application of the `matMenuTriggerFor` directive: ### Toggling the menu programmatically The menu exposes an API to open/close programmatically. Please note that in this case, an `matMenuTriggerFor` directive is still necessary to attach the menu to a trigger element in the DOM. ```ts class MyComponent { @ViewChild(MatMenuTrigger) trigger: MatMenuTrigger; someMethod() { this.trigger.openMenu(); } } ``` ### Icons Menus support displaying `mat-icon` elements before the menu item text. ### Customizing menu position By default, the menu will display below (y-axis), after (x-axis), without overlapping its trigger. The position can be changed using the `xPosition` (`before | after`) and `yPosition` (`above | below`) attributes. The menu can be forced to overlap the trigger using the `overlapTrigger` attribute. ### Nested menu Material supports the ability for an `mat-menu-item` to open a sub-menu. To do so, you have to define your root menu and sub-menus, in addition to setting the `[matMenuTriggerFor]` on the `mat-menu-item` that should trigger the sub-menu: ### Lazy rendering By default, the menu content will be initialized even when the panel is closed. To defer initialization until the menu is open, the content can be provided as an `ng-template` with the `matMenuContent` attribute: ```html ``` ### Passing in data to a menu When using lazy rendering, additional context data can be passed to the menu panel via the `matMenuTriggerData` input. This allows for a single menu instance to be rendered with a different set of data, depending on the trigger that opened it: ```html ``` ### Keyboard interaction | Keyboard shortcut | Action | |------------------------|---------------------------------------------| | Down Arrow | Focus the next menu item. | | Up Arrow | Focus the previous menu item. | | Left Arrow | Close the current menu if it is a sub-menu. | | Right Arrow | Opens the current menu item's sub-menu. | | Enter | Activate the focused menu item. | | Escape | Close all open menus. | ### Accessibility Angular Material's menu component consists of two connected parts: the trigger and the pop-up menu. The menu trigger is a standard button element augmented with `aria-haspopup`, `aria-expanded`, and `aria-controls` to create the relationship to the pop-up panel. The pop-up menu implements the `role="menu"` pattern, handling keyboard interaction and focus management. Upon opening, the trigger will focus the first focusable menu item. Upon close, the menu will return focus to its trigger. Avoid creating a menu in which all items are disabled, instead hiding or disabling the menu trigger. Angular Material does not support the `menuitemcheckbox` or `menuitemradio` roles. Always provide an accessible label via `aria-label` or `aria-labelledby` for any menu triggers or menu items without descriptive text content. MatMenu should not contain any interactive controls aside from MatMenuItem.