NV Elements Catalog Starters Repo System Themes About Getting Started Changelog Metrics Support Accessibility Contributions Requests Migration Integrations Installation MCP CLI Lint Angular Bundles Extensions Golang Hugo Import Maps Lit NextJS Nuxt Preact React SolidJS Svelte TypeScript Vue Foundations Typography Iconography Themes Design Tokens Size & Space Objects Interactions Support Status Color Animation Fonts Layers Custom Layout Horizontal Vertical Grid Popovers i18n Visualization View Transitions Elements Accordion Alert Avatar Badge Breadcrumb Button Button Group Card Chat Message Checkbox Color Combobox Copy Button Datagrid Integrations Column Action Column Alignment Column Fixed Column width Container Card Display Settings Footer Heatmap Keynav Multi Select Pagination Panel Detail Panel Grid Performance Placeholder Row Action Row Groups Row Sort Scroll Height Single Select Stripe Date Datetime Dialog Divider Dot Drawer Dropdown Dropdown Group Dropzone File Format Datetime Format Number Format Relative Time Forms Validation Actions Control Icon Icon Button Input Input Group Logo Menu Month Notification Page Page Header Page Loader Pagination Panel Progressive Filter Chip Progress Bar Progress Ring Password Preferences Input Pulse Radio Range Resize Handle Search Select Skeleton Sort Button Sparkline Star Rating Steps Switch Tabs Tag Textarea Time Toast Toggletip Toolbar Tooltip Tree Week Patterns Authentication Browse Dashboard Editor Empty States Heatmap Keyboard Shortcut Logging Media Navigation Onboarding Panel Responsive Search Subheader Trend Code Codeblock Monaco Input Diff Input Editor Diff Editor Problems Markdown Markdown CSS Utility Labs Responsive Layout Viewport Container Patterns Forms API Design Properties & Attributes Slots Registration CustomEvents Stateless Composition Styles Packaging Glossary Logs Internal Guidelines Agent Harness Documentation Examples TypeScript Testing Unit Testing Accessibility Testing Lighthouse Testing SSR Testing Visual Testing Troubleshooting Component Creation Internal Examples All Examples

Tabs

stable:  0.1.1 Coverage: 92.30% Bundle: 14.98kb Lighthouse: 97 Axe Core Released: 0.10.0
Overview API Examples

Tabs provide a selection UX, typically used for swapping content shown on a page, or within a navigation context.

Overview Details Settings
overview content
details content
settings content

Installation


    

    
CLI / MCP

The Tabs component consists of a <nve-tabs> parent element and many <nve-tabs-item> elements slotted as children. The selected attribute when applied to an item by the host application gives the selected tab the proper selected styles.

Apply the disabled attribute to an item to get the proper visual cues and prevent interaction. The elements handle all default interaction, hover, and active states.

Additionally, the component handles all keyboard navigation and accessibility concerns out of the box. Try using left/right arrow keys on horizontal tabs or up/down on vertical tabs.

Borderless Tabs

By default Tabs shows a blue border on the selected item. You can disable the border by setting borderless on the parent <nve-tabs>

Borderless tabs variant for minimal visual styling without border emphasis.

Tab 1 Tab 2 Tab 3 Disabled Tab 5

Border Styles

You can change the border styles by overriding --indicator-background and --indicator-border-radius on <nve-tabs>

Tabs with custom border background styling for brand-specific visual customization.

Tab 1 Tab 2 Tab 3

Tabs with Dot Indicators

Add dots and icons by simply slotting in <nve-icon> or <nve-dot> into your <nve-tabs-item>

Tabs with notification dots for indicating unread content or alerts within tab sections.

Tab 1 Tab 2 Tab 3 Tab 4 10 Tab 5

Vertical Tabs

Tabs work as the foundation for a side menu by enabling vertical mode. Simply set vertical on <nve-tabs>

Vertical tabs layout for sidebar navigation and vertical content organization patterns.

Tab 1 Tab 2 Tab 3 Disabled Tab 5

Borderless Vertical Tabs with Icons

This example shows the combination of vertical tabs, set to borderless, with icons slotted. You can build an Icon only collapsed version of vertical tabs off this system.

Borderless vertical tabs with icons for enhanced visual navigation and minimal styling.

Tab 1 Tab 2 Tab 3 Tab 4

Stateless Tabs

By default Tabs is stateless. This means the host application must handle selection behavior. The component provides a way to opt in to stateful selection behavior where click events and keyboard enter trigger the selection state.

All other examples on this page set behavior-select on the parent <nve-tabs> to opt into stateful behavior. The following example shows the default stateless behavior, where the host app has to set/remove the selected attribute on child <nve-tabs-item>.

Stateless tabs for external state management without built-in selection behavior.

Tab 1 Tab 2 Tab 3 Tab 4 Disabled

Tabs with link navigation for routing-based tab switching and page navigation.

Grouped Tabs

Use <nve-tabs-group> when a selected tab should also reveal matching panel content. The group keeps selection and panel visibility in sync by matching each tab item value to a named panel slot on the group.

Wrap a single <nve-tabs> in the default slot, add command="--toggle" and commandfor="<group-id>" to each <nve-tabs-item>, and provide panel elements with slot="<value>". Most consumers only need slot, value, command, and commandfor. The group handles the tab panel role and ARIA linkage internally, so consumer markup can stay focused on content.

Do not use behavior-select on <nve-tabs> when the group is present. Let the group coordinate selection.

By default alignment is top, which places the tab strip above the panel region in a column layout.

Group tabs with slot-matched panels and structured card content when one selected value should control both the tab state and revealed details.

Overview Details Settings

Overview

High-level release status and current priorities.

Status
Ready for review
Audience
Design and product owners
Next step
Validate the tab labels and panel order

Details

Supporting context for teams that need implementation specifics.

Owner
Elements design system
Coverage
Unit, SSR, and accessibility checks
Focus
Selection sync and panel wiring

Settings

Configuration notes for authors and downstream consumers.

Selection
Controlled by the active tab value
Panels
Matched by slot name
Actions
External buttons can drive the same group

Stacked vs Horizontal

Use alignment="start" or alignment="end" on <nve-tabs-group> when you want a vertical tab strip beside the panel region instead of stacked tabs (alignment="top" is the default). start places the tab strip at inline-start; end places it at inline-end (for example, left versus right in LTR). Set vertical on <nve-tabs> and size the tab strip with a width that fits your layout.

Tab group with vertical tab strip at inline-start beside slot-matched panels for sidebar-style settings and details layouts in LTR.

Overview Details Settings

Overview

High-level release status and current priorities.

Status
Ready for review
Audience
Design and product owners
Next step
Validate the tab labels and panel order

Details

Supporting context for teams that need implementation specifics.

Owner
Elements design system
Coverage
Unit, SSR, and accessibility checks
Focus
Selection sync and panel wiring

Settings

Configuration notes for authors and downstream consumers.

Selection
Controlled by the active tab value
Panels
Matched by slot name
Actions
External buttons can drive the same group

Tab group with vertical tab strip at inline-end beside slot-matched panels when the tab rail should sit on the opposite side from inline-start sidebars.

Overview Details Settings

Overview

High-level release status and current priorities.

Status
Ready for review
Audience
Design and product owners
Next step
Validate the tab labels and panel order

Details

Supporting context for teams that need implementation specifics.

Owner
Elements design system
Coverage
Unit, SSR, and accessibility checks
Focus
Selection sync and panel wiring

Settings

Configuration notes for authors and downstream consumers.

Selection
Controlled by the active tab value
Panels
Matched by slot name
Actions
External buttons can drive the same group

External Controls

<nve-tabs-group> also accepts external invokers such as <nve-button> as long as they target the group with commandfor and provide a matching value. This works well when secondary controls elsewhere on the page should reveal the same tab panel content.

Drive the same tabs group from external buttons when layouts need tabs and secondary actions to stay in sync with structured panel content.

Overview Details Settings

Overview

Quick status for the current tab group.

State
Overview is active
Signal
Use this tab for a summary of the current workflow
Tip
Pair it with external controls for quick switching

Details

Deeper context for follow-up tasks and implementation notes.

State
Details are available on demand
Signal
Use this tab when readers need extra context
Tip
Keep the content specific to the selected tab

Settings

Preferences and coordination notes for the shared tab group.

State
Settings remain in sync with the selected value
Signal
Useful for configuration and admin actions
Tip
Use external buttons when the layout needs extra actions
overview details settings

Release Status

All elements and features go through 3 phases of stability, pre-release, beta and stable.

pre-release
Docs Preview API Documentation Fully Themeable
beta
Robust unit test coverages Passed API Review Passed Designer VQA Review Included in library package
stable
No known outstanding AA WCAG issues No known outstanding performance issues Adapts to different screen/container sizes No breaking API changes for at least 90 days