About this set
A pricing section where a Monthly and Yearly switch swaps the whole plan grid, not just the numbers. It has a centred heading, a two-option segmented switch with a green minus 20 percent badge on Yearly, and three plan cards, Starter, Team and Scale, each with a price, a billing note and a ticked feature list. The recommended plan has an indigo border and a soft ring. Use it on pricing pages where the yearly plans differ in wording as well as price, such as billed yearly notes, since each period has its own complete grid. The cards sit three across and stack into one column on phones. The badge is read as save 20% rather than as a minus sign, and the ticks are hidden from screen readers. The plain CSS version is a radio group with :has() choosing the grid. The Bootstrap version uses a two-item .nav-pills with the Tab plugin, a .badge and .card plans in a .row-cols-sm-3 grid. The Tailwind version uses a small WAI-ARIA tabs script.
What’s included
- Switches the whole plan grid between monthly and yearly
- Recommended plan highlighted with a border and ring
- Saving badge read as save 20% by screen readers
- Three columns that stack on phones
- Bootstrap version uses .nav-pills, .badge and .card
Accessibility
In the plain CSS version the tabs are a radio group, not ARIA tabs: the radios sit inside an element with role="radiogroup" and an aria-label, each takes its name from its visible label, Tab enters the group and the arrow keys move the selection (radios have no Home or End). In the Bootstrap and Tailwind versions they follow the WAI-ARIA tabs pattern: role tablist, tab and tabpanel, aria-selected, aria-controls, a roving tabindex, arrow keys plus Home and End. The feature ticks are aria-hidden and the saving badge has visually hidden text. Focus shows a 2px indigo outline around the segment.
Customise it
Change the switch colours in .tabs (plain CSS), the --bs-nav-pills-* and --bs-badge-* variables (Bootstrap) or the --color-tab-* theme colours (Tailwind). The recommended plan colours are the .plan.best border and ring, or border-tab-accent with the tint shadow.

















