Skip to content

shadcn.io is an independent project built on shadcn/ui

Free

Simple Left Drawer for React

A menu button opens a left drawer titled Menu, with a short description and a Close button.

A menu button opens a panel from the left titled Menu. It has a short description, one line about navigation, and Close.

Use it for navigation on a small screen. On a wide layout, keep those links in a Sidebar. In React, Base UI closes it when the panel is swiped away.

Preview

Preview width

Installation

Sign in to get your install command
Free with an account. It carries your token, so the CLI installs everything in one go.

Anatomy

Drawer anatomy: grabber, title, description, content, close

Usage

<Drawer swipeDirection="left">
  <DrawerTrigger
    render={
      <Button aria-label="Open menu" size="icon-md" variant="outline" />
    }
  >
    <MenuIcon aria-hidden="true" />
  </DrawerTrigger>
  <DrawerContent>
    <DrawerHeader>
      <DrawerTitle>Menu</DrawerTitle>
      <DrawerDescription>
        This drawer slides in from the left side.
      </DrawerDescription>
    </DrawerHeader>
    <div className="p-4">
      <p className="text-muted-foreground text-sm">
        Left-side drawers are commonly used for navigation menus and sidebars.
      </p>
    </div>
    <DrawerFooter>
      <DrawerClose render={<Button variant="outline" />}>Close</DrawerClose>
    </DrawerFooter>
  </DrawerContent>
</Drawer>

FAQ

How does this drawer open from the left?

swipeDirection="left" on Drawer puts it on the left edge. The prop names the swipe that closes the drawer, so left docks it on the left; leave it out for a bottom drawer.

How is the menu button labeled?

An outline icon button opens the drawer. Its aria-label, Open menu, is the accessible name; the icon is aria-hidden. The Button goes in the render prop of DrawerTrigger.

What's inside the panel?

DrawerHeader with the title Menu and the description This drawer slides in from the left side, one paragraph, and DrawerFooter with a Close button.

How does Close work?

It's a DrawerClose, so it dismisses the drawer. Swiping it back toward its edge, Escape and a click on the overlay all close it, and focus goes back to the trigger. The Button goes in the render prop of DrawerClose.

Is there a drag bar?

No. A side or top drawer still follows a swipe, but it doesn't draw the bar. The bar stays off unless Drawer sets showSwipeHandle.

How wide is the left drawer?

It fills the height and caps its width, so on a phone it covers most of the screen and on a desktop it stays a side panel. Change the cap with a max-w-* class on DrawerContent.

API Reference

Drawer

Sets swipeDirection="left". The rest is on the Drawer page.

Button

Sets aria-label="Open menu", size="icon-md" and variant="outline". The rest is on the Button page.