Tabs
A tabbed interface for switching between views of related content. Built on @base-ui/react/tabs. Supports default and line list variants, plus horizontal and vertical orientations.
Anatomy
<Tabs> is the root; it contains a <TabsList> with one or more <TabsTrigger> elements, and a corresponding <TabsContent> for each trigger value.
Content for Tab One.
Variants
The variant prop on TabsList controls the visual style of the tab bar.
Default
Manage your account details here.
Line
High-level summary of your metrics.
Vertical Orientation
Pass orientation="vertical" to the <Tabs> root to stack the tab list alongside the content.
Manage your profile information.
States
This tab is currently active.
Design Guidelines
Do
- Use for parallel, peer-level views. Tabs work best when each panel contains different content about the same subject.
- Keep tab labels short. One or two words per trigger — long labels cause overflow and misalignment.
- Choose line variant for page-level navigation. The default pill style suits settings panels; line suits page-level sections.
Don't
- Don't use tabs for sequential steps. Use a stepper component for multi-step flows where order matters.
- Don't add more than 7 tabs. Too many tabs overwhelm users and break on small screens. Consider a dropdown instead.
- Don't nest tabs inside tabs. It creates a confusing hierarchy that is hard to navigate.
Developer Reference
Accessibility
- Implements the WAI-ARIA Tabs pattern —
role="tablist",role="tab",role="tabpanel", andaria-selectedare managed automatically. - Keyboard: ← / → (horizontal) or ↑ / ↓ (vertical) cycle through tabs.
- Each
TabsContentpanel is associated with its trigger viaaria-controlsandaria-labelledbyautomatically.
Usage
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"
// Default variant
<Tabs defaultValue="account">
<TabsList>
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
</TabsList>
<TabsContent value="account">Account settings…</TabsContent>
<TabsContent value="password">Password settings…</TabsContent>
</Tabs>
// Line variant
<Tabs defaultValue="overview">
<TabsList variant="line">
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
</TabsList>
<TabsContent value="overview">Overview content…</TabsContent>
<TabsContent value="analytics">Analytics content…</TabsContent>
</Tabs>
// Vertical orientation
<Tabs defaultValue="profile" orientation="vertical">
<TabsList>
<TabsTrigger value="profile">Profile</TabsTrigger>
<TabsTrigger value="security">Security</TabsTrigger>
</TabsList>
<TabsContent value="profile">Profile content…</TabsContent>
<TabsContent value="security">Security content…</TabsContent>
</Tabs>