Circle Menu

CSS-only radial navigation menu that fans items out in a circle from a central toggle button

Circle Menu

Circle menus fan navigation items out in a radial pattern from a central toggle button. Built entirely with CSS — no JavaScript required. The toggle is a hidden checkbox; clicking the circular button shows or hides up to 6 items evenly distributed around it.

Basic Usage

A circle menu with 6 items. The toggle button uses a hamburger icon that animates to an X when open:

Basic Circle Menu

Fewer Items

The radial positions still evenly space up to 6 items. Fewer items create a partial arc:

Three Items

Color Variants

Primary

Primary

Secondary

Secondary

Tertiary

Tertiary

Semantic Variants

Info, Success, Warning, Error

Size Variants

Small

Small

Default

Default

Large

Large

Using Buttons

Use <button> elements instead of <a> for action items:

Button Items

API Reference

Classes

ClassDescription
circle-menuRoot container (applied to <nav>)
circle-menu-togglerHidden checkbox input that controls open/close state
circle-menu-labelVisible circular toggle button (label for the checkbox)
circle-menu-listThe <ul> holding menu items
circle-menu-itemEach <li> menu item

Color Variants

Apply to the circle-menu container:

ClassDescription
circle-menu-primaryPrimary color scheme
circle-menu-secondarySecondary color scheme
circle-menu-tertiaryTertiary color scheme
circle-menu-infoInfo color scheme
circle-menu-successSuccess color scheme
circle-menu-warningWarning color scheme
circle-menu-errorError color scheme

Size Variants

Apply to the circle-menu container:

ClassToggle sizeItem sizeRadius
circle-menu-sm2.5rem2.5rem4.5rem
(default)3rem3rem5.5rem
circle-menu-lg3.5rem3.5rem6.5rem

CSS Custom Properties

These properties are set on .circle-menu and can be overridden for custom sizing:

PropertyDefaultDescription
--circle-menu-size3remToggle button diameter
--circle-menu-item-size3remMenu item diameter
--circle-menu-radius5.5remDistance from center to items
--circle-menu-icon-size1.25remFont size inside items
--circle-menu-bar-width1.125remHamburger bar width
--circle-menu-bar-height0.1875remHamburger bar height
--circle-menu-bar-gap0.375remGap between hamburger bars

HTML Structure

<nav class="circle-menu">
  <input type="checkbox" class="circle-menu-toggler" id="my-menu">
  <label class="circle-menu-label" for="my-menu"></label>
  <ul class="circle-menu-list">
    <li class="circle-menu-item"><a href="/path">icon</a></li>
    <!-- up to 6 items -->
  </ul>
</nav>

Note: The id on the input and the for on the label must match. Each circle menu on a page needs a unique id.

Overflow: Menu items extend beyond the container bounds when open. Ensure the parent element does not have overflow: hidden.