Skip to content

Menu — React

Terminal window
npm install @fluix-ui/react @fluix-ui/css
import { Menu } from "@fluix-ui/react";
import "@fluix-ui/css";
function App() {
return (
<Menu.Root orientation="horizontal" variant="pill" theme="dark">
<Menu.Item id="home">Home</Menu.Item>
<Menu.Item id="features">Features</Menu.Item>
<Menu.Item id="pricing">Pricing</Menu.Item>
</Menu.Root>
);
}

The Menu is a compound component with three parts: Menu.Root (container), Menu.Item (interactive items), and Menu.Indicator (animated active background).

<Menu.Root
orientation="horizontal"
variant="pill"
theme="dark"
defaultActiveId="home"
spring={{ stiffness: 300, damping: 25, mass: 1 }}
roundness={12}
blur={8}
fill="#1a1a2e"
>
<Menu.Item id="home">Home</Menu.Item>
</Menu.Root>
PropTypeDefaultDescription
orientation"vertical" | "horizontal""horizontal"Layout direction
variant"pill" | "tab""pill"Visual style of the indicator
themeMenuTheme"dark"Color theme
activeIdstring | nullControlled active item ID
defaultActiveIdstring | nullInitial active item (uncontrolled)
onActiveChange(id: string) => voidCalled when active item changes
springSpringConfigcore defaultSpring animation config
roundnessnumberBorder radius factor
blurnumberIndicator blur amount
fillstringBackground color override
classNamestringCustom class for the root element
<Menu.Item id="home" disabled={false} onClick={() => console.log("clicked")}>
Home
</Menu.Item>
PropTypeDefaultDescription
idstringrequiredUnique identifier for this item
disabledbooleanfalseDisable interaction
classNamestringCustom class
onClickMouseEventHandlerClick handler
childrenReactNoderequiredItem label content
<Menu.Indicator fill="#3b82f6" blur={10} />
PropTypeDefaultDescription
fillstringIndicator color override
blurnumberBlur amount override
classNamestringCustom class
import { useState } from "react";
import { Menu } from "@fluix-ui/react";
import "@fluix-ui/css";
function Navigation() {
const [active, setActive] = useState("home");
return (
<Menu.Root
orientation="horizontal"
variant="pill"
theme="dark"
activeId={active}
onActiveChange={setActive}
>
<Menu.Item id="home">Home</Menu.Item>
<Menu.Item id="features">Features</Menu.Item>
<Menu.Item id="pricing">Pricing</Menu.Item>
<Menu.Item id="docs">Docs</Menu.Item>
</Menu.Root>
);
}
<Menu.Root variant="tab" orientation="horizontal" theme="dark">
<Menu.Item id="overview">Overview</Menu.Item>
<Menu.Item id="analytics">Analytics</Menu.Item>
<Menu.Item id="settings">Settings</Menu.Item>
</Menu.Root>
<Menu.Root orientation="vertical" variant="pill" theme="dark">
<Menu.Item id="dashboard">Dashboard</Menu.Item>
<Menu.Item id="projects">Projects</Menu.Item>
<Menu.Item id="team">Team</Menu.Item>
<Menu.Item id="settings">Settings</Menu.Item>
</Menu.Root>

Override the Menu CSS variables to customize the appearance:

[data-fluix-menu] {
--fluix-menu-bg: #1a1a2e;
--fluix-menu-color: #a0a0b0;
--fluix-menu-active-color: #ffffff;
--fluix-menu-indicator: rgba(255, 255, 255, 0.1);
}