Tab Component

Reference: Elevate Lookbook | Component: tab/component.rb

Basic Tabs

Standard horizontal tab navigation with underline indicator

Overview

This is the overview section with general information about the product.

<div class="tab-group">
  <div class="tab-list" role="tablist" aria-label="Product information">
    <button class="tab" role="tab" aria-selected="true"
            aria-controls="panel-1" id="tab-1">
      Overview
    </button>
    <button class="tab" role="tab" aria-selected="false"
            aria-controls="panel-2" id="tab-2" tabindex="-1">
      Features
    </button>
  </div>
  <div class="tab-panels">
    <div class="tab-panel" role="tabpanel"
         id="panel-1" aria-labelledby="tab-1" aria-hidden="false">
      Overview content...
    </div>
    <div class="tab-panel" role="tabpanel"
         id="panel-2" aria-labelledby="tab-2" aria-hidden="true">
      Features content...
    </div>
  </div>
</div>

Tabs with Icons

Icons provide visual recognition and scan-ability

Profile Settings

Update your personal information and preferences.

<button class="tab" role="tab" aria-selected="true"
        aria-controls="panel-1" id="tab-1">
  <svg class="tab-icon" viewBox="0 0 16 16" fill="currentColor">
    <!-- icon path -->
  </svg>
  Profile
</button>

Full Width Tabs

Tabs stretch to fill available width

Grid view with cards in a responsive grid layout.

<div class="tab-list tab-list--full-width" role="tablist">
  <button class="tab" role="tab">Grid View</button>
  <button class="tab" role="tab">List View</button>
  <button class="tab" role="tab">Table View</button>
</div>

Usage Guidelines

Accessibility Notes

Design System Specs

Tab Height 40px
Horizontal Padding 24px (0 24px 1px 24px for inactive state)
Icon-Label Gap 4px
Inactive Text var(--text-subtle) / #4c4b53
Active Text var(--text-primary) / #5746b2 (purple)
Active Indicator 2px solid var(--text-primary) / #5746b2
Tab List Border 1px solid var(--border-medium) / #c7c6cd
Font 14px/600
Inactive Border None (padding-bottom: 1px to compensate)
Hover/Active Border 2px solid var(--text-primary) / #5746b2 (padding-bottom: 0)
Transition 150ms ease on color and border
Panel Animation 200ms fade-in on activation