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

Class Description
circle-menu Root container (applied to <nav>)
circle-menu-toggler Hidden checkbox input that controls open/close state
circle-menu-label Visible circular toggle button (label for the checkbox)
circle-menu-list The <ul> holding menu items
circle-menu-item Each <li> menu item

Color Variants

Apply to the circle-menu container:

Class Description
circle-menu-primary Primary color scheme
circle-menu-secondary Secondary color scheme
circle-menu-tertiary Tertiary color scheme
circle-menu-info Info color scheme
circle-menu-success Success color scheme
circle-menu-warning Warning color scheme
circle-menu-error Error color scheme

Size Variants

Apply to the circle-menu container:

Class Toggle size Item size Radius
circle-menu-sm 2.5rem 2.5rem 4.5rem
(default) 3rem 3rem 5.5rem
circle-menu-lg 3.5rem 3.5rem 6.5rem

CSS Custom Properties

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

Property Default Description
--circle-menu-size 3rem Toggle button diameter
--circle-menu-item-size 3rem Menu item diameter
--circle-menu-radius 5.5rem Distance from center to items
--circle-menu-icon-size 1.25rem Font size inside items
--circle-menu-bar-width 1.125rem Hamburger bar width
--circle-menu-bar-height 0.1875rem Hamburger bar height
--circle-menu-bar-gap 0.375rem Gap 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.