A versatile menu for navigation.
When To Use
Navigation is an important part of any website, as a good navigation setup allows users to move around the site quickly and efficiently. Ant Design offers two navigation options: top and side. Top navigation provides all the categories and functions of the website. Side navigation provides the multi-level structure of the website.
More layouts with navigation: Layout.
Notes for developers
- Menu is rendered as a
ul
element, so it only supports li
and script-supporting
elements as children nodes。Your customized node should be wrapped by Menu.Item
.
- Menu needs to collect its node structure, so its children should be
Menu.*
or encapsulated HOCs.
- Must set unique key for
SubMenu
API
Param |
Description |
Type |
Default value |
|
forceSubMenuRender |
render submenu into DOM before it shows |
boolean |
false |
|
inlineCollapsed |
specifies the collapsed status when menu is inline mode |
boolean |
- |
|
inlineIndent |
indent px of inline menu item on each level |
number |
24 |
|
items |
Menu item content |
ItemType[] |
- |
4.20.0 |
mode |
type of the menu; vertical , horizontal , and inline modes are supported |
vertical | horizontal | inline |
vertical |
|
multiple |
Allow selection of multiple items |
boolean |
false |
|
openKeys(v-model) |
array with the keys of currently opened sub menus |
(string | number)[] |
|
|
overflowedIndicator |
Customized the ellipsis icon when menu is collapsed horizontally |
slot |
<EllipsisOutlined /> |
|
selectable |
allow selecting menu items |
boolean |
true |
|
selectedKeys(v-model) |
array with the keys of currently selected menu items |
(string | number)[] |
|
|
style |
style of the root node |
object |
|
|
subMenuCloseDelay |
delay time to hide submenu when mouse leave, unit: second |
number |
0.1 |
|
subMenuOpenDelay |
delay time to show submenu when mouse enter, unit: second |
number |
0 |
|
theme |
color theme of the menu |
light | dark |
light |
|
triggerSubMenuAction |
method of trigger submenu |
click | hover |
hover |
|
Events Name |
Description |
Arguments |
click |
callback executed when a menu item is clicked |
function({ item, key, keyPath }) |
deselect |
callback executed when a menu item is deselected, only supported for multiple mode |
function({ item, key, selectedKeys }) |
openChange |
called when open/close sub menu |
function(openKeys: (string | number)[]) |
select |
callback executed when a menu item is selected |
function({ item, key, selectedKeys }) |
Param |
Description |
Type |
Default value |
disabled |
whether menu item is disabled or not |
boolean |
false |
key |
unique id of the menu item |
string | number |
|
title |
set display title for collapsed item |
string | slot |
|
ItemType
type ItemType = MenuItemType | SubMenuType | MenuItemGroupType | MenuDividerType;
Param |
Description |
Type |
Default value |
Version |
danger |
Display the danger style |
boolean |
false |
|
disabled |
Whether menu item is disabled |
boolean |
false |
|
icon |
The icon of the menu item |
VueNode | (item: MenuItemType) => VNode |
- |
|
key |
Unique ID of the menu item |
string | number |
- |
|
label |
Menu label |
VueNode |
- |
|
title |
Set display title for collapsed item |
string |
- |
|
Property |
Description |
Type |
Default value |
Version |
children |
Sub-menus or sub-menu items |
ItemType[] |
- |
|
disabled |
Whether sub-menu is disabled |
boolean |
false |
|
icon |
Icon of sub menu |
VueNode | (item: SubMenuType) => VueNode |
- |
|
key |
Unique ID of the sub-menu |
string | number |
- |
|
label |
Menu label |
VueNode |
- |
|
popupClassName |
Sub-menu class name, not working when mode="inline" |
string |
- |
|
popupOffset |
Sub-menu offset, not working when mode="inline" |
[number, number] |
- |
|
theme |
Color theme of the SubMenu (inherits from Menu by default) |
|
light | dark |
- |
onTitleClick |
Callback executed when the sub-menu title is clicked |
function({ key, domEvent }) |
- |
|
Define type
as group
to make as group:
const groupItem = {
type: 'group', // Must have
label: 'My Group',
children: [],
};
Param |
Description |
Type |
Default value |
Version |
children |
Sub-menu items |
MenuItemType[] |
- |
|
label |
The title of the group |
VueNode |
- |
|
Divider line in between menu items, only used in vertical popup Menu or Dropdown Menu. Need define the type
as divider
:
const dividerItem = {
type: 'divider', // Must have
};
Param |
Description |
Type |
Default value |
Version |
dashed |
Whether line is dashed |
boolean |
false |
|
Param |
Description |
Type |
Default value |
Version |
disabled |
whether sub menu is disabled or not |
boolean |
false |
|
expandIcon |
Customized expandIcon |
slot |
arrow icon |
| |
key |
Unique ID of the sub menu, required |
string | number |
|
|
popupClassName |
Sub-menu class name |
string |
|
1.5.0 |
popupOffset |
Sub-menu offset, not working when mode="inline" |
[number, number] |
- |
|
title |
title of the sub menu |
string|slot |
|
|
The children of Menu.SubMenu must be MenuItem
or SubMenu
.
SubMenu
must pass the key. If it is not passed, the sub-elements under the SubMenu will be rendered in advance, and some scenes cannot be effectively highlighted.
Events Name |
Description |
Arguments |
titleClick |
callback executed when the sub menu title is clicked |
function({ key, domEvent }) |
Param |
Description |
Type |
Default value |
children |
sub-menu items |
MenuItem[] |
|
title |
title of the group |
string|slot |
|
The children of Menu.ItemGroup must be MenuItem
.
Divider line in between menu items, only used in vertical popup Menu or Dropdown Menu.
Param |
Description |
Type |
Default value |
Version |
dashed |
Whether line is dashed |
boolean |
false |
4.17.0 |
FAQ
Menu collects structure info with twice-render to support HOC usage. Merging into one render may cause the logic to become much more complex. Contributions to help improve the collection logic are welcomed.