Theme studio

Design a theme, preview it live, then export it. Saved in this browser.

Quick picks #10b981
Generated scale
50100200300400500600700800900
Some text is below AA

NavigationBar

  • Stable
  • WCAG 2.2 evidence
  • RTL
  • Web · iOS · Android

The bottom bar of a mobile layout: a named nav landmark with a list of three to five NavItems. Use it below the md breakpoint in place of the Sidebar: render only one of the two at a time and hide the other with display: none (md:hidden here, hidden md:flex there), which also removes its landmark. Every item is a link (aria-current="page") or a button, 44 pt (iOS) or 48 dp (Android) tall, with an always visible label (WCAG 1.1.1, 2.4.4, 2.5.8). The bar keeps clear of the home indicator through the safe-area insets, and shrinks its items so five fit a 320 px screen (1.4.10). Tab moves through the items in order (2.4.3). Position is yours: usually fixed inset-x-0 bottom-0 (with viewport-fit=cover in the viewport meta tag so the insets apply) and bottom padding on the page equal to the bar's height so content is never covered. Consumer duties: a unique landmark name, no more than five destinations, isCurrent on exactly one item.

import { NavigationBar } from "@nexera-ui/react";
Loading example…
6
examples
4
props
2
live controls
3
platforms
8
WCAG criteria
2
blocks use it

Try every prop. Copy the code.

Change the props and the code updates. Check light and dark, LTR and RTL, and phone width.

Loading…
children
platform
Generated code
import { NavigationBar } from "@nexera-ui/react";

<NavigationBar />

Examples 5

The same examples as Storybook, rendered live. Open Code to copy one.

Android

Figma Platform=Android: 12 px top padding and the pill behind the selected icon.

Loading example…

Three items

Three destinations spread over the bar (justify-between).

Loading example…

Narrow width

A 320 px column: five items shrink from 72 px to fit, and a long label wraps.

Loading example…

Long labels

Long translated labels wrap; the bar grows in height instead of truncating them.

Loading example…

Right to left

Right to left: the items run from the right and the badges move to the other corner.

Loading example…

Props 4

Press "Try it" on a card to load that prop into the playground.

4 props shown

children*Nexera
ReactNode

Three to five NavItem elements. Each is wrapped in a list item, so a screen reader announces "list, 5 items".

Default –
platformNexera
"web" | "ios" | "android"

Platform look: top padding, and the look of every NavItem inside. Takes the NexeraProvider's platform when omitted. web has no Figma set and renders the iOS look.

Default "web"
aria-labelNexera
string

Accessible name of the navigation landmark, for example "Main" or "Primary". Required: a page with several nav landmarks needs a unique name for each. Translate it. Accessible name when it must differ from the visible text.

Default –
aria-labelledbyNexera
string

Id(s) of visible element(s) that name the landmark; wins over aria-label. Id(s) of visible element(s) that name the landmark.

Default –

* Required. React Aria props shown are the ones most apps use; the component accepts the rest of its React Aria props too.

Accessible by default.

Built on React Aria, and covered by the WCAG 2.2 evidence generated on every build.

WCAG 2.2 evidence

6 direct · 2 supporting
  • 1.3.1Info and RelationshipsLevel A · tested directly
  • 1.3.2Meaningful SequenceLevel A · supporting test
  • 1.4.10ReflowLevel AA · supporting test
  • 2.1.1KeyboardLevel A · tested directly
  • 2.4.1Bypass BlocksLevel A · tested directly
  • 2.4.3Focus OrderLevel A · tested directly
  • 2.4.4Link Purpose (In Context)Level A · tested directly
  • 4.1.2Name, Role, ValueLevel A · tested directly

Fits any width.

Nexera components respond to the space they are given. Drag the corner of the frame, or pick a width.

0 px · drag the corner

Styling hooks

Pass className to add Tailwind classes (merged last). State is exposed as data attributes, so you can style it with variants like data-pressed:.

Usage
<NavigationBar className="shadow-sm" />

Used in blocks

Related components