Installation

Red Hat CDN

CDN Prerelease

We are currently working on our CDN, which will be soon moving into beta. This will be the preferred method of installation in the near future. If you are a Red Hat associate and have questions or comments about the CDN or installation process please join us in our Red Hat Design System Google chat.

In the meantime, install this component using npm

The recommended way to load RHDS is via the Red Hat Digital Experience CDN, and using an import map.

If you have full control over the page you are using, add an import map to the <head>, pointing to the CDN, or update any existing import map. If you are not responsible for the page's <head>, request that the page owner makes the change on your behalf.

<script type="importmap">
{
"imports": {
"@rhds/elements/": "https://www.redhatstatic.com/dx/v1-alpha/@rhds/elements@1.1.0/elements/",
"@patternfly/elements/": "https://www.redhatstatic.com/dx/v1-alpha/@patternfly/elements@2.2.2/"
}
}
</script>

Once the import map is established, you can load the element with the following module, containing a bare module specifier:

<script type="module">
import '@rhds/elements/rh-navigation-secondary/rh-navigation-secondary.js';
</script>

Note that Modules may be placed in the <head>: since they are deferred by default, they will not block rendering.

Lightdom CSS

Lightdom CSS is required for this element to ensure a reduced Cumulative Layout Shift (CLS) experience before the element has fully initialized.

<link rel="stylesheet" href="https://www.redhatstatic.com/dx/v1-alpha/@rhds/elements@1.1.0/rh-navigation-secondary/rh-navigation-secondary-lightdom.css">
NPM

Install RHDS using your team's preferred NPM package manager, e.g.

npm install @rhds/elements

Once that's been accomplished, you will need to use a bundler to resolve the bare module specifiers and optionally optimize the package for your site's particular use case and needs. Comprehensive guides to bundling are beyond the scope of this page; read more about bundlers on their websites:

Lightdom CSS

Lightdom CSS is required for this element to ensure a reduced Cumulative Layout Shift (CLS) experience before the element has fully initialized.

<link rel="stylesheet" href="/path/to/@rhds/elements/elements/rh-navigation-secondary/rh-navigation-secondary-lightdom.css">

Replace /path/to in the href attribute with the installation path to the rh-navigation-secondary directory in your project.

JSPM

Public CDNs

JSPM and other public CDNs should not be used on corporate domains. Use them for development purposes only!

Add an import map to the <head>, pointing to the CDN, or update any existing import map.

<script type="importmap">
{
"imports": {
"@rhds/elements/": "https://jspm.dev/@rhds/elements/",
"@patternfly/elements/": "https://jspm.dev/@patternfly/elements/"
}
}
</script>

Once the import map is established, you can load the element with the following module, containing a bare module specifier:

<script type="module">
import '@rhds/elements/rh-navigation-secondary/rh-navigation-secondary.js';
</script>

Note that Modules may be placed in the <head>: since they are deferred by default, they will not block rendering.

Lightdom CSS

Lightdom CSS is required for this element to ensure a reduced Cumulative Layout Shift (CLS) experience before the element has fully initialized.

<link rel="stylesheet" href="https://jspm.dev/@rhds/elements@1.1.0/elements/rh-navigation-secondary/rh-navigation-secondary-lightdom.css">

System Integration

Current page indicator

When a user is viewing a page that is part of the secondary navigation information architecture, a red top border is visible. If the current active page is part of a dropdown menu, that dropdown is highlighted with the same top border to indicate it contains the current page. For more details on how to use this current page indicator, refer to the design guidelines for current page indicator.

To enable this indicator style, implementation should apply the aria-current="page" attribute to the current page link.

<a href="/" aria-current="page">Current page being viewed</a>

The rh-navigation-secondary element does not apply the aria-current="page" attribute itself. The responsibility for keeping track of which link is currently active falls on the content management system or application. The element checks for the presence of this attribute and applies the current page indicator style to nav links and dropdown menus when the active page is within a dropdown menu.

rh-navigation-secondary

Slots

logo

Logo added to the main nav bar, expects <a>Text</a> | <a><svg/></a> | <a><img/></a> element

nav

Navigation list added to the main nav bar, expects <ul> element

cta

Nav bar level CTA, expects <rh-cta> element

mobile-menu

Text label for the mobile menu button, for l10n. Defaults to "Menu"

Attributes

color-palette

Color palette darker | lighter (default: lighter)

DOM Property
colorPalette
Type
NavPalette
Default
'lighter'

Methods

open(index: number)

Opens a specific dropdown based on index. Closes all open dropdowns before opening specified. Toggles overlay to open

close()

Closes all open dropdowns

Events

overlay-change

Fires when an dropdown is opened or closed in desktop view or when the mobile menu button is toggled in mobile view.

Event Type:
SecondaryNavOverlayChangeEvent

CSS Shadow Parts

nav

container, <nav> element

container

container, <div> element

cta

container, <div> element

CSS Custom Properties

CSS Property Description Default
--rh-navigation-secondary-z-index

z-index of the navigation-secondary

102
--rh-navigation-secondary-overlay-z-index

z-index of the navigation-secondary-overlay

-1

Design Tokens

Token Copy
--rh-border-width-lg
--rh-border-width-sm
--rh-box-shadow-sm
--rh-color-border-subtle-on-dark
--rh-color-border-subtle-on-light
--rh-color-brand-red-on-dark
--rh-color-brand-red-on-light
--rh-color-interactive-blue-darker
--rh-color-interactive-blue-darkest
--rh-color-surface-dark
--rh-color-surface-lighter
--rh-color-surface-lightest
--rh-color-text-brand-on-light
--rh-color-text-primary-on-dark
--rh-color-text-primary-on-light
--rh-font-family-body-text
--rh-font-family-heading
--rh-font-size-body-text-lg
--rh-font-size-body-text-md
--rh-font-weight-heading-medium
--rh-line-height-body-text
--rh-space-2xl
--rh-space-4xl
--rh-space-lg
--rh-space-md
--rh-space-xl

rh-navigation-secondary-dropdown

Upgrades a top level nav link to include dropdown functionality

Slots

link

Link for dropdown, expects <a> element

menu

Menu for dropdown, expects <rh-navigation-secondary-menu> element

Attributes

None

Methods

None

Events

change

Fires when a dropdown is clicked

Event Type:
SecondaryNavDropdownExpandEvent

CSS Shadow Parts

None

CSS Custom Properties

None

Design Tokens

Token Copy
--rh-border-width-lg
--rh-border-width-sm
--rh-box-shadow-sm
--rh-color-border-subtle-on-light
--rh-color-surface-lightest
--rh-color-text-brand-on-light
--rh-color-text-primary-on-light
--rh-font-size-body-text-md

rh-navigation-secondary-menu

Dropdown menu for secondary nav, available in full-width and fixed-with sizes

Slots

Default Slot

Optional <rh-navigation-secondary-menu-section> elements or content following design guidelines

Attributes

color-palette

Color palette (default: lightest) Secondary nav menus are always represented on the lightest color palette.

DOM Property
colorPalette
Type
ColorPalette
Default
'lightest'

layout

Layout (default: full-width) Secondary nav menus by default are always full-width, but can be set to fixed-width for special cases.

DOM Property
layout
Type
'fixed-width' | 'full-width'
Default
'full-width'

visible

visible toggles on click (default: false)

DOM Property
visible
Type
boolean
Default
false

Methods

None

Events

None

CSS Shadow Parts

container

container - <div> element, wrapper for menus

full-width

container - <div> element, wrapper for full-width menus

fixed-width

container - <div> element, wrapper for fixed-width menus

sections

container - <div> element, wrapper for menu sections

CSS Custom Properties

CSS Property Description Default
--rh-navigation-secondary-menu-section-grid

grid-template-columns for menu sections

repeat(auto-fit, minmax(15.5rem, 1fr))
--rh-navigation-secondary-menu-section-grid-gap

grid-gap for menu sections

32px
--rh-navigation-secondary-menu-content-max-width

max-width for menu content

1136px

Design Tokens

Token Copy
--rh-box-shadow-sm
--rh-color-surface-lightest
--rh-color-text-primary-on-light
--rh-font-size-body-text-md
--rh-space-2xl
--rh-space-3xl
--rh-space-4xl
--rh-space-xl

rh-navigation-secondary-menu-section

A menu section which auto upgrades accessibility for headers and sibling list

Slots

header

Adds a header tag to section, expects <h1> | <h2> | <h3> | <h4> | <h5> | <h6> element

links

Adds a ul tag to section, expects <ul> | <ol> element

cta

Adds a section level CTA, expects <rh-cta> element

Attributes

None

Methods

None

Events

None

CSS Shadow Parts

container

container,

element

CSS Custom Properties

None

Design Tokens

Token Copy
--rh-font-family-heading
--rh-font-size-body-text-md
--rh-space-xl
© 2021-2024 Red Hat, Inc. Deploys by Netlify