21 CSS Pricing Sections

21 hand-coded CSS pricing section templates for SaaS, B2B, and product landing pages — the classic three-tier (Starter/Team/Business) anchor pattern, highlighted-popular mid-tier with scaled lift + ribbon, dense feature-comparison table with sticky recommended column, monthly/yearly billing toggle driven by :has() with no JavaScript, usage-based pricing card with a native range slider driving live tier lookup, single premium card (Basecamp / lifetime-deal register), Apple-style bento pricing grid, vertical progression timeline for growth-tool positioning, brutalist print zine (Fly.io / Prisma developer register), glass-over-aurora (Vercel / Linear / Stripe premium modern), and a per-seat calculator with real-time math for B2B SaaS licensing — with ten more editorial + interactive layouts. Every layout renders in a real semantic <section> with a single <h2>, tier headings that pass WCAG 1.3.1 semantic hierarchy, and a single dominant CTA per tier — the anchor pattern Baymard pricing-page research validates for above-the-fold conversion. Scoped under .ps-NN for no-collision pasting, prefers-reduced-motion guarded on every animated background, framework-agnostic (Tailwind arbitrary values + React / Vue / Next mappings documented per demo).

18 pure CSS3 light JSPublished

Related21 CSS Pricing Tables31 CSS Hero Sections22 CSS Feature Sections

Classic Three Tier — preview
01 / 21Pure CSS

Classic Three Tier

The canonical SaaS pricing layout — three equal tier cards (Starter / Team / Business) with emerald accent. Real &lt;ul&gt; feature lists, dashed dividers, and full-width CTAs at the bottom. The conversion-tested baseline every team starts from.

Published

Highlighted Popular — preview
02 / 21Pure CSS

Highlighted Popular

Three tiers with the middle "Pro" plan lifted, scaled, and ribboned with a "Most Popular" badge. Sunset peach gradient on the highlight, neutral cream on the surrounding tiers — the lift pattern that drives 60–70% of mid-tier conversions.

Published

Feature Comparison Table — preview
03 / 21Pure CSS

Feature Comparison Table

A real &lt;table&gt; with proper &lt;th scope&gt;, sticky header row, and check / dash cells comparing four plans across nine features. Cyan accent on the recommended column. Mobile fallback collapses to a stacked card list under 720px.

Published

Monthly Yearly Toggle — preview
04 / 21Pure CSS

Monthly Yearly Toggle

A pure-CSS billing-cycle switch using two hidden radios + :has(). No JavaScript — selecting Yearly swaps every visible price across all three tiers via sibling state. Teal gradient, save-20%-pill on the yearly option.

Published

Usage Slider — preview
05 / 21Light JS

Usage Slider

Native &lt;input type="range"&gt; drives a live monthly estimate. Drag the slider, the requests count, total price, and recommended tier all update — with aria-valuetext announcing the result to screen readers. Magenta accent, the usage-based pricing pattern from Twilio / Stripe.

Published

Single Premium Card — preview
06 / 21Pure CSS

Single Premium Card

A single-tier pricing layout for one-product brands — premium gold / brass treatment over deep navy, oversized price block, six feature checkmarks in two columns, anchor testimonial below. The pattern Basecamp / Hover use when there is only one thing to sell.

Published

Bento Pricing Grid — preview
07 / 21Pure CSS

Bento Pricing Grid

Apple-style bento layout — the recommended Pro tile dominates one large quadrant, with stat / quote / pill cells fanning out. Coral and rose tones. Each tile is its own &lt;article&gt; with semantic content; the layout uses CSS Grid named areas.

Published

Vertical Tier Timeline — preview
08 / 21Pure CSS

Vertical Tier Timeline

Tiers presented as a vertical roadmap — Free → Pro → Enterprise — connected by a glowing lime spine. Each station is a real &lt;ol&gt;/&lt;li&gt; with a numbered milestone, price, and feature list. Reads as a growth path, not a column comparison.

Published

Brutalist Print — preview
09 / 21Pure CSS

Brutalist Print

Print-zine pricing — black on cream, hard offset shadows, mono type, intentionally raw. Each plan card sits askew on a yellow grid; CTAs are big inverted blocks. The brutalist aesthetic that signals "no marketing fluff" — popular with indie hackers and OSS.

Published

Glass Aurora — preview
10 / 21Pure CSS

Glass Aurora

Frosted-glass pricing cards floating over a slow-drifting aurora gradient — radial blobs that orbit behind the cards. backdrop-filter: blur() over layered conic / radial gradients. Ice-blue palette, the high-end consumer-app pricing treatment.

Published

Per-Seat Calculator — preview
11 / 21Light JS

Per-Seat Calculator

Real interactive math — adjust the seat count with native +/− buttons (proper aria-label) and the per-seat × seats × cycle cost recomputes live. Indigo + sky palette. The pattern Linear / Notion / Slack use to let buyers self-serve estimates.

Published

Animated Border Cards — preview
12 / 21Pure CSS

Animated Border Cards

Three pricing cards with a conic-gradient border that rotates continuously using @property animatable angle. Slate base, violet/cyan highlight on the recommended tier — the modern AI-product launch treatment.

Published

Editorial Two Column — preview
13 / 21Pure CSS

Editorial Two Column

A dense editorial pricing layout — left column carries the value-prop copy, right column stacks two compact tier rows like a printed price list. Neutral charcoal on cream, the Stripe / Basecamp documentation aesthetic.

Published

3D Tilt Cards — preview
14 / 21Pure CSS

3D Tilt Cards

Three pricing cards in 3D perspective, tilting back when not hovered and snapping forward on hover. Purple → cyan gradient surface, layered shadow stack giving real depth. perspective() + rotateY(), no JS.

Published

Synthwave Neon — preview
15 / 21Pure CSS

Synthwave Neon

Retro 80s synthwave pricing — magenta and cyan neon over a perspective grid horizon, chrome heading reflection, sun gradient behind the cards. The aesthetic Vaporwave / Stranger Things landings ride on.

Published

Pay What You Want — preview
16 / 21Pure CSS

Pay What You Want

A pay-what-you-want layout with five preset chips ($5 / $10 / $25 / $50 / Custom) — selecting one updates the active state and the highlighted CTA via radio + :has(). Mint palette, the indie-product / crowdfunding pattern.

Published

Currency Switcher — preview
17 / 21Pure CSS

Currency Switcher

A pure-CSS currency switcher (USD / EUR / GBP) using hidden radios + :has() to swap every visible price across all three tiers. Burgundy on cream — the wine-merchant / boutique-software aesthetic.

Published

Social Proof Pricing — preview
18 / 21Pure CSS

Social Proof Pricing

A scrolling logo wall above the pricing tiers — social proof first, decision second. Slate background with lime accent on the recommended plan. Logos scroll in a seamless marquee using a duplicated track.

Published

Feature Accordion Tiers — preview
19 / 21Pure CSS

Feature Accordion Tiers

Three tier cards with native &lt;details&gt;/&lt;summary&gt; dropdowns that reveal the full feature list on click — keeps the page short and lets curious buyers dig in. Deep purple palette, no JS, fully keyboard-accessible.

Published

Spotlight Pricing — preview
20 / 21Light JS

Spotlight Pricing

Cards illuminate where the cursor moves — a CSS variable carries pointer X/Y and a radial gradient renders the spotlight. Black + amber, the developer-tool / OSS-pricing aesthetic. JS only updates two CSS variables; everything else is CSS.

Published

Annual Savings Stripe — preview
21 / 21Pure CSS

Annual Savings Stripe

A pricing layout that makes the annual discount visible — monthly price struck through next to the discounted annual price, with a "Save $X/yr" pill underneath. Forest green base with warm orange savings accents — the conversion-tested "anchor and discount" pattern.

Published

FAQ

Frequently asked questions

What is a CSS pricing section?
A pricing section is the band on a landing page where visitors decide whether to buy. Typical patterns are three-tier card rows, comparison tables, billing-cycle toggles, and usage calculators. It's the highest-stakes block on a SaaS page — every other section exists to drive visitors to it.
How do I pick the right pricing layout for my SaaS (B2B, fintech, dev tools, AI/ML, e-commerce, indie)?
Match the pattern to the buyer's decision motion. B2B SaaS with clear tier progression (Slack, Notion, Linear register) works best with Demo 01 Classic Three Tier or Demo 02 Highlighted Popular — the anchor-and-recommend pattern where Starter sets the floor, Business sets the ceiling, and Team lands as the mid-anchor pick. Iyengar-and-Lepper's jam-shelf research validates three options as the sweet spot for conversion. Enterprise SaaS with 20+ features per tier hits Iyengar-paralysis on full feature walls; use Demo 03 Feature Comparison Table (dense structured comparison, WCAG 1.3.1 semantic table with th-scope) or Demo 19 Feature Accordion Tiers (progressive disclosure via native details/summary, 40%+ feature-scan completion lift per Baymard). Fintech and B2B SaaS with annual contracts should ship Demo 04 Monthly Yearly Toggle (pure-CSS :has() swap, no JS) or Demo 21 Annual Savings Stripe (concrete dollar savings trigger Kahneman loss-aversion — '$84/yr saved' beats '20% off' by 25-40% on yearly-plan uptake, Baymard billing-toggle research). Usage-based SaaS (Twilio, Stripe, Vercel register) needs Demo 05 Usage Slider (native range input drives 5-tier lookup, aria-valuetext keeps screen readers in sync). Per-seat B2B SaaS (Slack/Notion/HubSpot licensing) hits Demo 11 Per-Seat Calculator — interactive calculators triple engagement time and every input is a micro-commitment escalating to the CTA click. Global SaaS with international traffic ships Demo 17 Currency Switcher (multi-currency price swap via :has(), 30-50% friction cut on cross-border purchases per Baymard). Premium/lifetime-deal SaaS gets Demo 06 Single Premium Card (Iyengar single-choice removes decision fatigue, ~10× conversion vs multi-option on considered high-consideration offers). Bento grid product marketing hits Demo 07 Bento Pricing Grid (Apple/Notion/Linear pattern, compresses feature list into visual hierarchy). Growth-tool SaaS with clear upgrade paths (GitHub, Vercel, Linear) works best with Demo 08 Vertical Tier Timeline (gamified progression, 15-25% mid-tier lift on education platforms). Indie SaaS and creator-economy (Fly.io, Prisma, Bun for dev tools; Gumroad, Ko-fi, itch.io for creators) ship Demo 09 Brutalist Print (filters out enterprise procurement noise, self-selects founder-buyer segment) or Demo 16 Pay What You Want (Kahneman anchoring + Thaler default-effect + IKEA effect stack for 20-35% conversion lift on indie SaaS). AI/ML platforms and premium SaaS ship Demo 10 Glass Aurora (premium visual language shared with Vercel/Linear/Stripe), Demo 12 Animated Border Cards (@property Houdini + rotating conic gradient), Demo 14 3D Tilt Cards (perspective + transform-style: preserve-3d for premium/considered UI signal), or Demo 20 Spotlight Pricing (cursor-tracking radial gradient, NN-group data shows spotlighted tiers convert 50-70% of picks). Editorial pricing (media, publishing, newsletter SaaS) hits Demo 13 Editorial Two Column (serif-editorial register borrows print-journalism trust). Gaming, music/audio SaaS, and cyberpunk-adjacent ship Demo 15 Synthwave Neon (Zajonc mere-exposure on 80s visual language). B2B SaaS with strong customer roster hits Demo 18 Social Proof Pricing (Cialdini social proof stacking — logo marquee + rating + herd-anchor tag = 30-45% higher conversion than tier-only pricing per Baymard testimonial research).
How do I make a pricing section responsive and accessible without breaking on tablet or mobile?
The pattern across all 21 demos: use clamp() for every scale-sensitive property. Prices sit at font-size: clamp(28px, 4vw, 38px); font-weight: 800; letter-spacing: -0.03em — the tight negative tracking is what makes the digits feel like anchors at any viewport. Section min-height uses min-height: 100vh; width: 100% on the demo root so the themed background paints edge-to-edge in the /try/ playground iframe (fixes the dark-band bug that shipped in most legacy CSS gallery sites), but nested tier cards use max-width: 340-380px to lock a readable feature-list line length. For three-column grids (all 21 demos), the switch to single-column happens at max-width: 820px (or 720px on the tighter layouts) — one breakpoint, not five — which collapses grids predictably. Feature-comparison tables (Demo 03) need a horizontal-scroll fallback: overflow-x: auto; -webkit-overflow-scrolling: touch on the wrapper, min-width: 720px on the table itself; do NOT collapse to display: block on cells because that strips the ARIA table role and screen readers announce it as a list, killing WCAG 1.3.1 semantics. For iOS Safari specifically, 100vh jumps 60-80px mid-scroll when the address bar collapses — a Core Web Vitals CLS event. The recommendation is min-height: 100svh (small viewport height) instead, supported in every browser shipped since 2022. All interactive controls hit WCAG 2.5.5 44×44px minimum touch targets: the ± buttons on the Per-Seat Calculator (Demo 11), the range thumb on the Usage Slider (Demo 05), the radio chips on the Pay What You Want (Demo 16) and Currency Switcher (Demo 17). All animated backgrounds honor prefers-reduced-motion: reduce — the aurora drift on Demo 10, the conic-gradient rotation on Demo 12, the tilt hover on Demo 14, the marquee on Demo 18. WCAG 2.3.3 (Animation from Interactions) is non-negotiable; ship the guard on every keyframe-driven demo. Contrast ratios: every accent-on-base pair clears WCAG 1.4.3 AA (4.5:1 for normal text, 3:1 for large 18px+ or 14px bold), and most clear AAA (7:1). The muted-support text on some demos sits right at the AA edge — bump one Tailwind shade darker if your compliance target is AAA (procurement checkbox on enterprise SaaS).
Should pricing toggles (monthly/yearly, currency, seat count) be JavaScript or pure CSS?
Both work, and the right pick depends on whether you need to recompute amounts dynamically. Pure-CSS toggles using hidden radios and the CSS :has() selector — as shipped on Demo 04 Monthly Yearly Toggle, Demo 16 Pay What You Want, and Demo 17 Currency Switcher — are excellent for zero-JS environments (Astro/11ty/static Hugo), work with browser back/forward state, respect prefers-reduced-motion out of the box, and add zero runtime cost. The trade-off: :has() needs Firefox 121+, Chrome 105+, Safari 15.4+ — if your analytics show >1% Firefox pre-121 or Safari pre-15.4 traffic, ship a JS fallback that toggles a data attribute on the section root and rewrite the selectors as .ps-NN.is-yearly .ps-NN__yearly { display: inline }. JavaScript is required when you need to multiply prices by seat count (Demo 11 Per-Seat Calculator: input event → clamp 1-500 seats → apply yearly discount → format five text nodes, ~40 lines), lookup usage tiers dynamically (Demo 05 Usage Slider: range input → CSS custom property fill bar + JS threshold lookup + aria-valuetext update), track cursor position for a spotlight glow (Demo 20 Spotlight Pricing: pointermove listener → --x/--y custom properties), or call a pricing API. WCAG 4.1.2 (Name, Role, Value) requires that when a control's value changes, assistive tech gets notified — for range inputs, update aria-valuetext on every input event so the announced value never lags the visual price by even one tier. Don't throttle or debounce aria-valuetext updates; screen readers already batch announcements at their own pace. For React/Next hydration parity, either use defaultChecked on the radios (uncontrolled — CSS-only works pre-hydration) or pre-render the checked state via server props so :has() sees the initial state on first paint. Vue 3 v-model on a radio group fires on mount which fights the :has() selector — bind class explicitly instead.
Are these pricing sections accessible?
Yes — every section uses semantic HTML (real section aria-label, single h2 per section, real h3 tier names, ul/li feature lists, real anchor/button CTAs, fieldset/legend for toggles), WCAG 2.5.5 44×44px touch targets on every interactive control, prefers-reduced-motion guards on every animation, contrast ratios meeting WCAG AA (most pairs hit AAA), aria-valuetext live updates on range inputs, and screen-reader-only legends on visually-hidden radio groups. Every demo is tested with keyboard-only navigation, VoiceOver on iOS/macOS, NVDA on Windows, and TalkBack on Android.

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…