Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Vertical Tabs Panels Pricing Block for React

Plans as vertical tabs: a rail of tiers with price previews, and a detail panel per plan that opens with its price and call to action, then three highlights and every feature. Three tabs across on a phone.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Swap the classic row of plan cards for this vertical tabs pricing section, shown here for Ledgerline Sign, an e-signature product with Personal, Business and Enterprise plans. A left-aligned headline sits over a rail of Tabs that lists every tier with its tagline and a per-user price preview, the selected tier marked by a bar on its leading edge and lifted onto the page's background, and a Best badge on the most chosen plan. The rail and the panel form one band between the page's rails, its hairlines overshooting the corners with a plus mark on each, and a rule along the section's top edge with a plus mark on each crossing. Each tab opens its own detail panel: the plan's name and what it's for, then its price beside the Shine Button call to action, so the decision sits at the top, then three highlights in one ruled strip and the full feature list with checkmarks. On a phone the rail becomes a row of three tabs above the panel, marked by a line under the selected one. Built with Guides, Tabs, Badge, Shine Button and Lucide icons, with CSS transitions only. For pricing pages with dense plan details, SaaS marketing sites and any product where buyers dwell on one plan at a time rather than skim them all side by side.

FAQ

How do I change the plans, highlights and features?

Edit the PLANS array at the top of the file. Each plan has an id, its name, tagline, description, monthly price per user (null shows "Custom"), three highlights (a Lucide icon, a label and a value, drawn as cells of one strip), its features, the call to action's cta and href, and popular, which adds the Best badge to its tab and a Most chosen badge to its panel. CURRENCY is the symbol written before every price. On a phone the tabs share one row in three equal columns, so keep to three plans or change grid-cols-3.

How do I open another plan first, or link to one?

Change defaultValue="business" on Tabs to another plan's id.To open a plan from a link, such as /pricing?plan=enterprise, read the parameter and make the tabs controlled: pass the selected plan and update it when the visitor picks another. Only the open panel is rendered.

How do I connect the call to action to checkout?

The button in each panel is a real link to its plan's href, so point it at your checkout or sign-up route with the plan in the address (/checkout?plan=business) and let your server map the plan to your payment provider's price, or at your contact form for Enterprise, which is priced on request. It's a ShineButton with render set to an a element and nativeButton={false}. Choosing a tab only switches the panel, so visitors can explore every plan freely.

Are the vertical tabs accessible?

Yes. They're real tabs: a vertical tab list named "Plans" whose tabs each control a panel, so a screen reader announces the tab, its position and the panel it opens. Tab reaches the selected plan, Arrow Up and Arrow Down move between plans (Home and End jump to the first and last), and Tab moves on into the open panel. Each tab reads its name, badge, tagline and price ("$25 per user per month"); in the panel the plan is an h3 under the section's h2, the highlights are a description list, and the call to action names its plan, as in "Start 14-day trial, Business plan". The selected tab is marked by its bar and surface, not by colour alone.

How does the layout adapt to small screens?

From the md breakpoint the tabs are a sidebar beside the panel. Below it the same tab list becomes a row of three tabs above the panel, each with its name and price, the taglines and the Best badge hidden to keep them short, and the selected one marked by a line under it; the highlights and feature list stack in one column, and it reads at 320px. The list stays a vertical tab list throughout, so Arrow Up and Down still move between plans on a keyboard, whatever the layout. The highlight moves to the new tab at once.

When should I use vertical tabs instead of a row of plan cards?

Use vertical tabs when each plan has more detail than a card can hold, such as highlights, long feature lists or a description per tier: the plan names stay in view while the detail beside them changes. Use a row of cards or a comparison table when plans differ in a few key features and seeing them side by side matters more than depth per plan.

  • Pro

    Three large audience tiles in the header row (freelancer, studio, agency) that open their own plans: cells that share hairlines on desktop, one plan at a time behind a segment group on a phone.

  • Pro

    Three plan rows for an email API, each its own band with its price and call to action in view, opening in place to list its features, with a monthly and annual switch in the header row.

  • Pro

    A product-led split: a mock of the app built from our own components with numbered callouts on it, matching a 'what you get' list, beside the one plan as a card in a card with a monthly and yearly switch.

  • Pro

    One plan in the spotlight: an oversized card under a monochrome cone of light with the price as the largest type on the page, a monthly and yearly switch, and a short pitch beside it.

  • Pro

    The canonical three-column pricing section for a team knowledge base: Personal, Team and Company cells under a monthly and yearly switch, each outlined by hairlines that overshoot its corners, the recommended plan raised, one plan at a time on phones.

  • Pro

    Popular Choice Pricing

    Proof and guarantees

    What customers chose: a full-width segmented bar sized by the share of teams that picked each plan (18, 64 and 18 percent), where each segment is a tab that opens its plan, with its price, call to action and features, right under the bar.