21 Tailwind CSS Pricing Sections

18 Pure Tailwind3 Tailwind + JSPublished

21 Tailwind CSS pricing sections for SaaS plan pages, indie product launches, and B2B sales sites — three-tier layouts and highlighted popular tiers, monthly/yearly and currency toggles, usage sliders, per-seat and pay-what-you-want calculators, feature comparison tables and accordions, plus bento, glass, brutalist, synthwave, and cursor-spotlight treatments. Scoped under .tps-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.

Related21 CSS Pricing Sections22 CSS Feature Sections15 Tailwind Card Grid Layouts

Premium template pickPartner: Cruip

Affiliate link

Building the whole landing page, not just this section?

You just browsed 21 Tailwind pricing sections. Cruip makes complete Tailwind CSS templates for landing pages, SaaS websites and admin dashboards, coded in HTML, React, Next.js and Vue and used by 60K+ developers. Single templates start at $49.

Browse Cruip templates

Cruip. We may earn a commission, at no extra cost to you.

01. Tailwind Classic Three Tier Pricing Section (opens in a new tab)

Published

Pure Tailwind
The conversion-tested baseline — three equal tiers (Starter / Team / Business) on a forest ground with one emerald accent — ported to utilities. The whole stylesheet reduces to @theme tokens plus the masked check-mark URL, because minmax(0,1fr), the flex-1 CTA push and the reduced-motion fallback all have utility forms that live on the elements that need them.

Published

Pure Tailwind
The lift pattern: the middle tier scales up, gains a sunset gradient and wears a &ldquo;Most popular&rdquo; pill notched over its top edge. In utilities the highlight is not a second component — it is the same <article> class list plus five overrides, which is the clearest way to show a reviewer exactly what &ldquo;recommended&rdquo; costs.

03. Tailwind Feature Comparison Pricing Table (opens in a new tab)

Published

Pure Tailwind
Nine features, four plans, one real <table> with <th scope> on both axes. The port's lesson is where utilities are weakest: a table's shared cell styling has no ancestor shortcut, so every <td> carries its own class list — and the recommended column's guide-rail tint becomes a per-cell utility instead of one selector.

04. Tailwind Monthly Yearly Billing Toggle Pricing (opens in a new tab)

Published

Pure Tailwind
A zero-JS billing switch: two hidden radios, a sliding gradient thumb and every price in the section swapping at once. The CSS version needs four :has() blocks written far from the elements; the Tailwind version needs peer-checked/y: for the switch's own chrome and one group-has-[#tps04-y:checked]: pair on each price — and the swap rule now sits on the numbers that swap.

05. Tailwind Usage Slider Pricing Estimator (opens in a new tab)

Published

Tailwind + JS
Drag the slider and the estimate, the request count and the recommended tier all move — with aria-valuetext announcing the whole result instead of a bare number. The port is a clean split: every layout and colour decision becomes a utility, and the four vendor pseudo-elements that paint a range track stay in CSS, where Tailwind has no variant and should not.

06. Tailwind Single Premium Pricing Card (opens in a new tab)

Published

Pure Tailwind
One product, one price, one card — brass on deep navy, an 88px serif numeral and a testimonial doing the anchoring that a tier ladder normally does. The port's interesting move is the before: variant: the diagonal sheen that was a ::before rule becomes six utilities on the card itself, so the decoration travels with the element it decorates.
Newsletter

Enjoying these demos? Get new ones by email.

A short email when a new collection ships. Unsubscribe any time.

at

Almost there: check your inbox to confirm.Manage

07. Tailwind Bento Pricing Grid (opens in a new tab)

Published

Pure Tailwind
A bento canvas instead of a tier row: the Pro tile occupies a 2×2 quadrant and free / team / stat / quote tiles fan out around it. The port swaps named grid areas for span utilities — a real trade, because col-span-2 row-span-2 lives on the tile while grid-template-areas lived in one place and drew the whole map.

08. Tailwind Vertical Tier Timeline Pricing (opens in a new tab)

Published

Pure Tailwind
Tiers as three stops on one road: a glowing lime spine, numbered station markers and a highlighted &ldquo;you are here&rdquo; pane. Reading it as an <ol> is the whole point — and the port keeps the spine as a before: pseudo-element on the list, because a connector belongs to the list, not to any tier.

09. Tailwind Brutalist Print Pricing Zine (opens in a new tab)

Published

Pure Tailwind
Black on cream, mono type, hard 8px shadows and three cards sitting askew on graph paper. The port lands on a genuinely better mechanism than the CSS: because Tailwind compiles rotate-* and translate-* to the individual rotate and translate properties, the hover nudge no longer wipes out each card's tilt — which in the CSS version needs the rotation repeated inside every hover rule.

10. Tailwind Glass Aurora Pricing Cards (opens in a new tab)

Published

Pure Tailwind
Frosted cards floating over three slow-drifting aurora blobs. The port keeps the whole glass recipe in the class list — bg-white/6, border-white/12, backdrop-blur-[20px] backdrop-saturate-150 — and moves the one genuinely CSS-only part, the drift keyframes, into an --animate-* theme token so the blobs read as animate-tps10-drift on the element.

11. Tailwind Per-Seat Pricing Calculator (opens in a new tab)

Published

Tailwind + JS
Real interactive math: native +/&minus; buttons and a number field drive a live per-seat × seats × cycle total. The port moves every visual state into the class list — the checked cycle label via peer-checked:, the clamped-out buttons via disabled: — leaving the JS to do arithmetic and nothing else.

12. Tailwind Animated Conic Border Pricing Cards (opens in a new tab)

Published

Pure Tailwind
Three cards wearing a conic-gradient border that rotates forever, driven by an @property-registered angle. The port is honest about its limits: the registration, the mask-composite ring and the keyframes stay in CSS — but the angle's value, the two gradient recipes and every other pixel become utilities, and the reduced-motion fallback moves onto the element where you can see it.

13. Tailwind Editorial Two Column Pricing List (opens in a new tab)

Published

Pure Tailwind
A print-price-list layout: value-prop copy on the left, two compact tier rows stacked on the right, set in Playfair over cream. The port's quiet win is the hover treatment — the recommended row's permanent 4px offset shadow and the other row's hover shadow are now the same utility, declared once as a resting state and once behind hover:.

14. Tailwind 3D Tilt Perspective Pricing Cards (opens in a new tab)

Published

Pure Tailwind
Three cards standing in a 1400px perspective — the outer two angled back, the centre one square on, any card snapping forward on hover. The port is where v4's per-axis transform utilities earn their keep: rotate-y-*, translate-z-* and translate-y-* compose through separate variables, so the hover state overrides one axis without restating the other two.
Newsletter

Enjoying these demos? Get new ones by email.

A short email when a new collection ships. Unsubscribe any time.

at

Almost there: check your inbox to confirm.Manage

15. Tailwind Synthwave Neon Pricing Section (opens in a new tab)

Published

Pure Tailwind
Magenta and cyan neon over a perspective grid horizon, a striped retro sun behind the cards and a chrome-reflection heading. The port's headline is text-shadow-* — a real utility since v4.1 — which turns eight hand-written glow declarations into text-shadow-[0_0_8px_…] on the elements that glow.

16. Tailwind Pay What You Want Pricing Card (opens in a new tab)

Published

Pure Tailwind
Five preset amount chips, the selected one lifting into a mint gradient, and a CTA whose label changes with the choice — all from five radios and no JavaScript. The port replaces eight :has() rules at the bottom of the stylesheet with group-has-[#tps-16-5:checked]: variants sitting on the spans they actually control.

17. Tailwind Currency Switcher Pricing Section (opens in a new tab)

Published

Pure Tailwind
Three currencies, nine prices, zero JavaScript: hidden radios plus group-has-[…]: swap every visible price across all three tiers at once. Burgundy on cream, with the featured tier inverted — and the port's clean-up is the inverted card, whose eight descendant override rules become ordinary utilities on the elements themselves.

18. Tailwind Social Proof Marquee Pricing (opens in a new tab)

Published

Pure Tailwind
A seamless logo marquee above the tiers — social proof first, decision second — on slate with a lime accent. The port's interesting part is not the animation but the containment: the marquee's w-max track will grow the whole section to 2000px unless the wrapper is explicitly bounded, and in utilities that bound is three classes you can actually see.

19. Tailwind Feature Accordion Pricing Tiers (opens in a new tab)

Published

Pure Tailwind
Three tiers whose full feature lists live inside native <details> elements — short page, deep detail on demand, keyboard-accessible for free. The port's neat bit is v4's open: variant: the chevron rotation and the extra open-state padding are stated on the elements, so the disclosure's whole visual behaviour is one class list.

20. Tailwind Cursor Spotlight Pricing Cards (opens in a new tab)

Published

Tailwind + JS
Amber light follows the cursor across black cards — and lands centred when you tab to one, so keyboard users get the same affordance. The JS sets two custom properties and stops there; group-hover: and group-focus-within: own the reveal, which is the cleanest possible division between script and style.

21. Tailwind Annual Savings Stripe Pricing (opens in a new tab)

Published

Pure Tailwind
The anchor-and-discount pattern, stated plainly: the monthly price struck through in orange, the yearly-equivalent price beneath it, and a "Save $84/yr" tab under both. The port's small pleasure is line-through decoration-tps21-orange decoration-2 — the struck price's whole treatment in three utilities, where CSS needs three separate text-decoration-* declarations.
FAQ

Frequently asked questions

How does the monthly/yearly billing toggle in Demo 04 swap every price without JavaScript?
Demo 04 runs the switch entirely in HTML and CSS. Two hidden radio <input> elements share one name; the visible pill is a pair of <label> elements, and the sliding gradient thumb is an absolutely-positioned element the checked radio drives through a sibling selector. Every price is two <span> stacked in the same grid cell — the yearly figure hidden by default. When the yearly radio is :checked, a :has() rule on the section (Tailwind's group-has-[…]:) flips which span shows and moves the thumb. Because the state lives in the radio rather than a script, it works before any hydration and survives a copy-paste into any stack. The one rule that matters: hide the radios with a visually-hidden clip, not display:none, or they drop out of the tab order and keyboard users can no longer flip billing.
How do the currency switcher and the pay-what-you-want card change prices with no script?
Same radio-plus-:has() mechanism, scaled up. Demo 17 holds three currency radios and renders nine price spans; each visible price is a small stack where only the span matching the checked currency is shown, and a group-has-[…]: rule on the container decides which one. Demo 16 uses the pattern for preset amounts — five chip <label> elements over hidden radios, the checked chip lifting into a mint gradient, and the CTA label reacting to the selection through the same has-selector. The trap people hit is putting the state on the clicked element itself: keep the checked radio as the single source of truth and let ancestor :has() rules read it, so one interaction updates the price, the chip, and the button label in one repaint. All prices stay in the DOM, so nothing flashes in on load.
Why does my highlighted 'Most popular' tier overlap or clip its neighbours?
Demo 02 lifts the middle tier with scale and a taller card, and the usual bug is that the transform makes it visually larger while its grid track stays the same width, so the scaled edges bleed over the neighbouring cards. Fix it by giving the popular card real dimensions instead of only a transform — let it own a slightly wider or taller grid cell, add vertical padding, and use z-index so it sits above rather than under the siblings. If you keep the scale, add matching horizontal margin so the enlarged footprint has somewhere to go. The second cause is unequal card heights: put the tier row in a grid or flex container with align-items:stretch so every card matches the tallest, otherwise the lifted card looks like a layout accident rather than a deliberate emphasis. The 'Most popular' pill should be a real badge, not a pseudo-element, so screen readers announce it.
How do I make the feature comparison table in Demo 03 accessible to screen readers?
Demo 03 is a real <table>, which is exactly right — a comparison grid built from <div> elements gives assistive tech no row/column relationship to announce. The load-bearing detail is scope on both axes: the plan names across the top are <th scope="col"> and the feature names down the left edge are <th scope="row">. With both in place, a screen reader reading a checkmark cell announces the feature and the plan it belongs to, so a blind user knows Priority support — Business instead of a bare 'yes'. Give the table a <caption> naming what it compares. Avoid conveying included/excluded by colour alone — a green tick and a grey dash read identically to a colour-blind user, so pair each with a visible glyph or text. On narrow screens let the table scroll inside a wrapper with overflow-x:auto rather than collapsing columns, which usually destroys the header association.
Do the usage slider and per-seat calculator need JavaScript, and how do I keep them accessible?
Yes, these two are the interactive exceptions. Demo 05 is a range <input> whose value drives the estimate, the request count and the recommended tier; because a native range control is already keyboard-operable with arrow keys, the work is in the ARIA — set aria-valuenow, aria-valuemin, aria-valuemax and an aria-label so a screen reader reports the current usage, and wire the live figures through an element with aria-live so updates are spoken. Demo 11 drives per-seat math from native <button> plus/minus controls around a number <input>; keep it a real number field so typing, spinners and mobile numeric keyboards all work, give each button an aria-label like 'add a seat', and clamp the value in the handler so it can't go below one. In both, the script only reads a value and writes text — it never becomes the source of truth for the price the user copies.
How does the rotating conic-gradient border in Demo 12 work, and what breaks in older browsers?
Demo 12 registers a custom property with @property — typed as an <angle> with an initial value — then animates that angle from 0 to 360 degrees and feeds it into a conic-gradient painted behind the card. Registering the property is what makes the angle actually interpolate; a plain custom variable animated the same way jumps rather than spins, which is the number-one reason people's border 'doesn't move'. The gradient lives on a pseudo-element or a slightly larger backing layer with the card content masked on top, so only the rim shows colour. For browsers without @property support the animation simply won't run — so make the static gradient border look finished on its own, and always wrap the spin in @media (prefers-reduced-motion: reduce) to stop it, since a perpetually rotating rim is exactly the kind of motion that triggers discomfort.
How does the cursor-spotlight card in Demo 20 stay usable for keyboard users?
Demo 20 tracks the pointer and moves an amber radial glow to follow it across the black cards, which by itself would be a mouse-only effect — a keyboard user tabbing through the plans would see nothing. The fix baked into this demo is that focusing a card with the keyboard lands the spotlight centred on it, so the same visual affordance that guides a mouse also marks the focused tier. Practically that means driving the glow position from two sources: pointer coordinates on mousemove, and a reset-to-centre on :focus-visible. Keep a real, visible focus ring underneath as well — the glow is decoration, not a focus indicator, and it must not be the only signal that a card is active. The whole effect is enhancement over a card that already reads correctly with no pointer and no script, so nothing about pricing or the CTA depends on the spotlight running.
When should I not use a feature comparison table or a billing toggle on a pricing page?
Skip the Demo 03 comparison table when you have three or fewer plans with short feature lists — a nine-row grid there just adds scanning cost, and the three-card layouts (Demo 01, Demo 02) convert better because the eye compares whole tiers at a glance. Reach for the table only when plans differ across many features and buyers genuinely cross-shop line by line. Skip the Demo 04 billing toggle when you don't actually offer annual billing, or when the yearly discount is trivial — a toggle implies a meaningful saving, and an empty one erodes trust; the Demo 21 struck-through annual-savings stripe states the discount more honestly for a single plan. And don't ship the single premium card (Demo 06) when you have real tiers to show — one card hides the anchoring that makes a middle plan feel reasonable. Match the pattern to the number of plans and the size of the decision, not to which demo looks nicest.

Related collections

15 CSS Aspect Ratio Demos preview

15 CSS Aspect Ratio Demos

15 hand-coded CSS aspect-ratio demos for video embeds, product galleries, IAB ad slots, native dialogs, and CLS-safe placeholders: 16:9 iframe YouTube embed with click-to-load facade + up-next rail, 21:9 full-screen hero video with min-height/max-height:100svh guardrails + Ken Burns drift, 1:1 Instagram-style square grid with 2×2 feature tile, 4:3 magazine card image cover, 9:16 vertical stories rail (TikTok/Reels/Shorts pattern) with scroll-snap + segment bars, 4:5 apparel product image gallery with radio-driven state + 1:1 thumbnails, 1:1 zoom thumbnail carousel with pointer-tracked --zx/--zy magnifier, prevent-layout-shift placeholder with live PerformanceObserver CLS meter (before/after side-by-side lab), dynamic content fallback with three policies (bend/strict/auto) via :has() toggle, IAB ad banner slots (728×90 leaderboard, 300×250 medium rectangle, 300×600 half-page, 320×50 mobile) with skeletons + container-query mobile swap, responsive modal dialog sized min(92vw, 88svh×16/9, 1080px) with @starting-style animation, responsive OpenStreetMap iframe wrapper with 16:9 → 1:1 container-query narrow swap, media query orientation live HUD + resize:both container-ratio playground, object-fit logo cloud with contain/cover/fill switcher via :has(), and side-by-side padding-top hack (height:0 + padding-top:56.25%) → modern aspect-ratio migration comparison with live ratio picker. 11 truly Pure CSS + 4 with a tiny optional vanilla JS snippet (facade swap, pointer magnifier, CLS meter, native dialog). Every demo is scoped under a unique .car-NN prefix so it drops into any project without CSS collisions, ships prefers-reduced-motion guards, and is framework-agnostic (works as-is in React, Vue, Svelte, Astro, Next.js, Remix, or plain HTML).

6 CSS Bento Grid Layouts preview

6 CSS Bento Grid Layouts

6 production CSS bento grid layouts with 12 hand-coded designs — Apple-style product showcase, SaaS feature value-prop matrix, analytics dashboard overview, creative portfolio, e-commerce category hub, and link-in-bio social hub. Each topic ships 2 sub-variants side-by-side so visitors see both a keynote aesthetic and a paper-doc variant at once. Container queries, CSS Grid, zero dependencies, copy-paste ready.

20 CSS Blog Layouts preview

20 CSS Blog Layouts

20 hand-coded CSS blog and editorial layouts for magazine homepages, news sites, personal archives, newsletter back-issues, recipe and podcast blogs, developer tutorials, and long-form journalism. Covers a magazine homepage with hero plus editor-picks rail, a news homepage with breaking-news ticker, blog archives with sticky year separators, Substack-style issue-numbered archives, recipe card grids with prep-time badges, podcast episode lists with waveforms, long-form articles with scroll-driven reading progress, drop caps and floated pull quotes via first-letter, Medium-style 65ch centred reader layouts, dev tutorials with a sticky code panel beside prose, interview transcripts with alternating speakers, case-study pages with stat counters, video blogs with an episode rail, full-bleed photo essays, news articles with sticky related-stories sidebars, documentation pages with prev/next chapter nav, a standalone blog post card, a scroll-snap category filter bar, an inline newsletter callout that breaks out of the prose column, and a horizontal featured-post rail. 12 are pure CSS with zero JavaScript. Every layout is scoped under a .bl-NN prefix for no-collision pasting, guards prefers-reduced-motion, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.

Search CodeFronts

Loading…