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 Drawer Footer Health index Icon Jump links Menu dropdown Navigation link Navigation (primary) Navigation (secondary) Navigation (vertical) Pagination PopoverPlanned Progress stepper Scheme toggle Site status Skeleton Skip link Spinner Statistic Subnavigation Surface Switch Table Tabs Tag Tile Timestamp Tooltip Video embed OverviewColor PalettesCustomizingDevelopers All PatternsAccordionCall to ActionCardFilterFormLink with iconLogo wallSearch barSticky bannerSticky cardTabsTagTile All Personalization PatternsAnnouncement FundamentalsAccessibility toolsAssistive technologiesCI/CDContentContributorsDesignDevelopmentManual testingResourcesScreen readers Design/code status Release notes Get support

Drawer

OverviewStyleGuidelinesCodeAccessibilityDemos
OverviewStatusWhen to useStatus checklistOverviewStatusWhen to useStatus checklist

Overview

A drawer is a panel that slides in from the edge of its container, providing supplementary content or navigation without leaving the current page.

import '@rhds/elements/rh-drawer/rh-drawer.js';
<rh-drawer open="">
  <div slot="header">Header</div>
  <div slot="body">Body</div>
  <div slot="footer">Footer</div>
  <div>
    <h3>Main Content</h3>
    <p>The default auto variant displays as inline at wide container widths and switches to
      overlay below 992px.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
      ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
      laboris nisi ut aliquip ex ea commodo consequat.</p>
  </div>
</rh-drawer>
import { Drawer } from "@rhds/elements/react/rh-drawer/rh-drawer.js";

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

export const Demo = () => (
  <Drawer open>
    <div slot="header">Header</div>
    <div slot="body">Body</div>
    <div slot="footer">Footer</div>
    <div>
      <h3>Main Content</h3>
      <p>The default auto variant displays as inline at wide container widths and switches to
        overlay below 992px.</p>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
        ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
        laboris nisi ut aliquip ex ea commodo consequat.</p>
    </div>
  </Drawer>
);

Controls the layout behavior of the drawer.

Which side the panel appears on.

Whether the drawer panel is open.

Optional ID of the external trigger element.

Adds a fullscreen toggle button to the panel actions.

Controls the panel edge interaction.

  • collapsible: adds a collapse/expand toggle button (default for overlay/inline)
  • resizable: adds a drag bar for manual resizing Overlay and inline variants default to collapsible when not set. Fixed variant ignores collapsible.

When set, persists open/closed state and panel width to sessionStorage under this key.

Status

When to use

Status checklist

© 2026 Red Hat Deploys by Netlify