• Docs
  • Blog
    • 0.25.1

    • light

      dark

      system

      Switch mode
    • Cerberus

      Acheron

      Elysium

    Get Started
    Components
    Styling
    Theming

    Concepts

    OverviewCompositionTesting

    Layout

    Aspect RatioBleedBoxCenterContainerDividerFlexFloatGridLink OverlayScrollableStackWrap

    Components

    AccordionAdmonitionAvatarButtonCarouselCheckboxClipboardCollapsibleComboboxConfirm ModalCTAModalDate PickerDialogFieldFieldsetFile UploaderIcon ButtonInputLoading StatesMenuNotificationsNumber InputPin InputProgressPrompt ModalRadioRatingSelectSplit ButtonSwitchTableTabsTagTextTextareaToggleTooltip

    Utilities

    Client OnlyDownload TriggerEnvironmentFeature FlagsFocus TrapForFormat ByteFormat NumberFormat Relative TimeFrameHighlightJSON Tree ViewLocaleLocal StoragePortalPresenceShowsplitPropsTheme

    Menu

    A menu component for displaying a list of options.

    • npm
    • source
    • recipe
    • Ark
    import {
    Menu,
    MenuTrigger,
    MenuContent,
    MenuItem,
    MenuItemGroup,
    MenuGroupLabel,
    MenuSeparator,
    } from '@cerberus/react'

    Usage

    Item 1
    Item 2
    Copy
    nav.tsx
    import {
    Menu,
    MenuTrigger,
    MenuContent,
    MenuItem,
    Button,
    } from '@cerberus/react'
    import { Strawberry } from '@cerberus/icons'
    function BasicMenu() {
    return (
    <Menu>
    <MenuTrigger>
    <Button>Trigger</Button>
    </MenuTrigger>
    <MenuContent>
    <MenuItem value="item_1">
    <Strawberry />
    Item 1
    </MenuItem>
    <MenuItem value="item_2">
    <Strawberry />
    Item 2
    </MenuItem>
    </MenuContent>
    </Menu>
    )
    }

    NextJS Usage

    To create a nav menu with NextJS, you should use the Link component from next/link combined with the asChild prop.

    Item 1Item 2
    Sign out
    Copy
    nav.tsx
    import {
    Menu,
    MenuTrigger,
    MenuContent,
    MenuItem,
    Button,
    Logout,
    } from '@cerberus/react'
    import Link from '@next/link'
    function BasicMenu() {
    return (
    <Menu>
    <MenuTrigger>
    <Button>Nav Menu</Button>
    </MenuTrigger>
    <MenuContent>
    <MenuItem value="item_1" asChild>
    <Link href="/">Item 1</Link>
    </MenuItem>
    <MenuItem value="item_2" asChild>
    <Link href="/">Item 2</Link>
    </MenuItem>
    <MenuSeparator />
    <MenuItem value="item_3" asChild>
    <Link
    className={css({
    alignItems: 'center',
    colorPalette: 'danger',
    color: 'danger.text.initial',
    display: 'inline-flex',
    justifyContent: 'space-between',
    w: 'full',
    })}
    href="/"
    >
    Sign out
    <Logout />
    </Link>
    </MenuItem>
    </MenuContent>
    </Menu>
    )
    }

    Grouped Menu

    You can group menu items by using the MenuItemGroup component.

    Group Label

    Item 1
    Item 2
    Copy
    nav.tsx
    import {
    Menu,
    MenuTrigger,
    MenuContent,
    MenuItem,
    MenuItemGroup,
    MenuGroupLabel,
    MenuSeparator,
    Button,
    } from '@cerberus/react'
    export function GroupedMenu() {
    return (
    <Menu>
    <MenuTrigger>
    <Button>Grouped Menu</Button>
    </MenuTrigger>
    <MenuContent>
    <MenuItemGroup>
    <MenuGroupLabel>Group Label</MenuGroupLabel>
    <MenuSeparator />
    <MenuItem value="item_1">Item 1</MenuItem>
    <MenuItem value="item_2">Item 2</MenuItem>
    </MenuItemGroup>
    </MenuContent>
    </Menu>
    )
    }

    Positions

    The Menu component accepts a positioning prop to determine where the menu will be positioned relative to the trigger. See available positions.

    Item 1
    Item 2
    Item 1
    Item 2
    Item 1
    Item 2
    Item 1
    Item 2
    Copy
    nav.tsx
    import {
    Menu,
    MenuTrigger,
    MenuContent,
    MenuItem,
    Button,
    } from '@cerberus/react'
    function BottomNav() {
    return (
    <Menu
    positioning={{
    placement: 'bottom',
    }}
    >
    <MenuTrigger>
    <Button>Bottom</Button>
    </MenuTrigger>
    <MenuContent>
    <MenuItem value="item_1">Item 1</MenuItem>
    <MenuItem value="item_2">Item 2</MenuItem>
    </MenuContent>
    </Menu>
    )
    }

    Primitives

    You can utilize the primitive components or the css prop to customize the menu.

    ComponentDescription
    MenuRootThe context provider for the menu parts
    MenuTriggerThe trigger that opens the menu content
    MenuTriggerItemThe item that triggers a nested menu content
    MenuIndicatorThe indicator for the selected menu item
    MenuPositionerThe positioning container for the menu content
    MenuContentThe content of the menu
    MenuItemA single item of the menu
    MenuItemGroupA container for a group of menu items
    MenuItemGroupLabelThe label for a group of menu items
    MenuSeparatorA separator between menu items
    Hades am I
    Hades is also where I live
    Copy
    Menu
    import {
    Menu,
    MenuTrigger,
    MenuContent,
    MenuItem,
    Button,
    } from '@cerberus/react'
    function CustomMenu() {
    return (
    <Menu>
    <MenuTrigger>
    <Button
    css={{
    color: 'black',
    }}
    palette="danger"
    >
    Hades R00lz
    </Button>
    </MenuTrigger>
    <MenuContent
    css={{
    bgColor: 'black',
    color: 'danger.text.initial',
    }}
    >
    <MenuItem
    css={{
    colorPalette: 'warning',
    _hover: {
    color: 'black',
    },
    }}
    value="item_1"
    >
    Hades am I
    </MenuItem>
    <MenuItem
    css={{
    colorPalette: 'warning',
    _hover: {
    color: 'black',
    },
    }}
    value="item_2"
    >
    Hades is also where I live
    </MenuItem>
    </MenuContent>
    </Menu>
    )
    }

    API

    Menu

    export interface MenuProps {
    positioning?: {
    placement: 'left' | 'right' | 'top' | 'bottom'
    }
    }
    NameDefaultDescription
    positioningnullUsed to position the menu content.

    MenuTrigger

    export interface MenuTriggerProps {
    children: React.ReactNode
    }
    NameDefaultDescription
    childrennullThe trigger element.

    MenuItem

    export interface MenuItemProps {
    children: React.ReactNode
    value: string
    asChild?: boolean
    }
    NameDefaultDescription
    childrennullThe content of the menu item.
    valuenullThe value of the menu item used for selection.
    asChildfalseUsed to render the children as a child component.

    On this page

    • Edit this page on Github
    Cerberus Design System | Docs