Skip to main content Home About the Design SystemRoadmap OverviewDesignersDevelopers OverviewColorGridIconographyInteractionsSpacingTypography Overview Global colorBox shadowTypographyBorderOpacitySpaceLengthIconBreakpointsMedia queries All elements Accordion Alert Announcement Audio player Avatar Back to top Badge Blockquote Breadcrumb Button group Button Card Chip Code block Call to action Dialog Disclosure Footer Health index Icon Jump links Menu dropdown Navigation link Navigation (primary) Navigation (secondary) Navigation (vertical) Pagination PopoverPlanned Progress stepper Readtime Scheme toggle Select Site status Skeleton Skip link Spinner Statistic Subnavigation Surface Switch Table Tabs Tag Tile Timestamp Tooltip Video embed OverviewColor PalettesCustomizingDevelopers All PatternsAccordionAlertCall to ActionCardFilterFormLink with iconLogo wallSearch barSticky bannerSticky cardTabsTagTile All Personalization PatternsAnnouncement FundamentalsAccessibility toolsAssistive technologiesCI/CDContentContributorsDesignDevelopmentManual testingResourcesScreen readers Design/code status Release notes Get support

Navigation (secondary)

OverviewStyleGuidelinesCodeAccessibilityDemos
OverviewStatusWhen to useStatus checklistOverviewStatusWhen to useStatus checklist

Overview

Persistent wayfinding navigation for linking related pages below <rh-navigation-primary>. Provides role="navigation" with a configurable aria-label and light/dark color palettes. On mobile, items collapse behind a menu button. Keyboard navigation with Tab, Escape, Enter/Space. Should contain logo, nav (<ul>), and optional cta slots. Avoid using more then 5 nav items.

import '@rhds/elements/rh-navigation-secondary/rh-navigation-secondary.js';
import '@rhds/elements/rh-cta/rh-cta.js';
<rh-navigation-secondary>
  <a href="#" slot="logo" id="logo-id" aria-current="page">
    Logo/Title
  </a>
  <ul slot="nav" aria-labelledby="logo-id">
    <li>
      <rh-navigation-secondary-dropdown>
        <a href="#dropdown-fallback-url" slot="link">Dropdown</a>
        <rh-navigation-secondary-menu slot="menu">
<rh-navigation-secondary-menu-section>
  <h3 slot="header">Section</h3>
  <ul slot="links">
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
  </ul>
  <rh-cta slot="cta" href="#">Section CTA</rh-cta>
</rh-navigation-secondary-menu-section>
<rh-navigation-secondary-menu-section>
  <h3 slot="header">Section</h3>
  <ul slot="links">
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
  </ul>
  <rh-cta slot="cta" href="#">Section CTA</rh-cta>
</rh-navigation-secondary-menu-section>
        </rh-navigation-secondary-menu>
      </rh-navigation-secondary-dropdown>
    </li>
    <li>
      <rh-navigation-secondary-dropdown>
        <a href="#dropdown-fallback-url" slot="link">Dropdown</a>
        <rh-navigation-secondary-menu slot="menu">
<ul>
  <li><a href="#">Link</a></li>
  <li><a href="#">Link</a></li>
  <li><a href="#">Link</a></li>
  <li><a href="#">Link</a></li>
  <li><a href="#">Link</a></li>
  <li><a href="#">Link</a></li>
</ul>
        </rh-navigation-secondary-menu>
      </rh-navigation-secondary-dropdown>
    </li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
  </ul>
  <rh-cta slot="cta" href="#">Call to Action</rh-cta>
</rh-navigation-secondary>

<link rel="stylesheet" href="../rh-navigation-secondary-lightdom.css">
import { Cta } from "@rhds/elements/react/rh-cta/rh-cta.js";
import { NavigationSecondary } from "@rhds/elements/react/rh-navigation-secondary/rh-navigation-secondary.js";
import { NavigationSecondaryDropdown } from "@rhds/elements/react/rh-navigation-secondary-dropdown/rh-navigation-secondary-dropdown.js";
import { NavigationSecondaryMenu } from "@rhds/elements/react/rh-navigation-secondary-menu/rh-navigation-secondary-menu.js";
import { NavigationSecondaryMenuSection } from "@rhds/elements/react/rh-navigation-secondary-menu-section/rh-navigation-secondary-menu-section.js";

// NOTE: React 19+ does not require these wrapper imports.
// You can use the custom elements directly as-is.

export const Demo = () => (
  <NavigationSecondary>
    <a href="#" slot="logo" id="logo-id" aria-current="page">Logo/Title</a>
    <ul slot="nav" aria-labelledby="logo-id">
      <li>
        <NavigationSecondaryDropdown>
<a href="#dropdown-fallback-url" slot="link">Dropdown</a>
<NavigationSecondaryMenu slot="menu">
  <NavigationSecondaryMenuSection>
    <h3 slot="header">Section</h3>
    <ul slot="links">
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
    </ul>
    <Cta slot="cta" href="#">Section CTA</Cta>
  </NavigationSecondaryMenuSection>
  <NavigationSecondaryMenuSection>
    <h3 slot="header">Section</h3>
    <ul slot="links">
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
    </ul>
    <Cta slot="cta" href="#">Section CTA</Cta>
  </NavigationSecondaryMenuSection>
</NavigationSecondaryMenu>
        </NavigationSecondaryDropdown>
      </li>
      <li>
        <NavigationSecondaryDropdown>
<a href="#dropdown-fallback-url" slot="link">Dropdown</a>
<NavigationSecondaryMenu slot="menu">
  <ul>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
  </ul>
</NavigationSecondaryMenu>
        </NavigationSecondaryDropdown>
      </li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
    </ul>
    <Cta slot="cta" href="#">Call to Action</Cta>
  </NavigationSecondary>
  <link rel="stylesheet" href="../rh-navigation-secondary-lightdom.css" />
);

Controls the visual color palette of the navigation bar. Valid values: 'lighter' (default) for light environments, 'dark' for dark environments. Light-family values ('light', 'lightest') map to 'lighter'; dark-family values ('darker', 'darkest') map to 'dark'. Should match the surrounding page color scheme. Defaults to 'lighter'.

Sets the aria-label on the internal <nav> element for screen readers. USE a descriptive label like the product name (e.g. "OpenShift navigation"). Must be unique if multiple navigations exist on the page. Defaults to 'secondary'.

View source on GitHub

Status

When to use

  • When you need to better organize a content structure
  • When you need to provide a more granular navigation that is specific to a topic
  • When you need to prevent other navigations from getting overloaded
Image of two stacked secondary navigations; one for large breakpoints and the other for small breakpoints

Status checklist

© 2026 Red Hat Deploys by Netlify