32 CSS Timelines

31 Pure CSS1 Light JSPublished 8 new designs · Updated on

32 hand-coded CSS timelines you can copy-paste into any project — GitHub-style commit history, CI/CD deploy pipelines with conic-gradient status spinners, resume timelines with CSS subgrid, order tracking steppers, product roadmap quarters with a live TODAY line, SaaS changelogs, Gantt swimlanes, conference agenda hour grids, scrollytelling panels, and 23 more field-tested patterns for dashboards, healthcare records, DevOps postmortems, and portfolio pages. Every timeline is a semantic <ol> of <li> events with real <time datetime> elements and decoration in aria-hidden pseudo-elements; modern platform features (animation-timeline: view()/scroll(), container queries, subgrid, :has(), :target, scroll-margin) sit behind @supports so unsupported browsers get identical static content — never hidden behind an effect that can't play. Compositor-friendly transform/opacity motion keeps CLS at 0 and 31 of 32 ship Zero JavaScript; each demo themes from 3-6 CSS custom properties (--tl-accent, --tl-line, --tl-bg) so retuning takes one ruleset. Scoped under .tls-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.

Related12 CSS Steppers22 CSS Progress Bars20 CSS Scroll Animations

Course pickPartner: Zero to Mastery

Affiliate link

Want to build production-ready CSS layouts, animations and UI from scratch?

You just browsed 32 timelines. Learn the Flexbox, Grid and animation thinking behind them, so the next component starts in your head, not in a copy-paste.

10% off at checkout with code
Check ZTM Course

Every ZTM course in one membership: $25/month, paid yearly at $299 · 30‑day money-back guarantee

The CSS Bootcamp. We may earn a commission, at no extra cost to you.

01. GitHub-Style Commit History Timeline (opens in a new tab)

Published

Pure CSSNEW
The developer-native vertical log: circular commit markers on a continuous rail, monospace hashes, relative timestamps and merge badges — the exact pattern for changelogs, release notes and activity feeds, built on a semantic <ol> so screen readers announce it as the numbered sequence it is.

04. Order Tracking Timeline — Delivery Progress Stepper (opens in a new tab)

Published

Pure CSSNEW
The e-commerce essential: Placed → Packed → Shipped → Out for delivery → Delivered as a horizontal stepper whose connector fills to the current stage with one custom property, an animated pulse on the live step, ETA copy, and a container-query flip to the vertical mobile layout — the exact component order-status emails link to.

06. Scroll-Driven Reveal Timeline — animation-timeline: view() Entrances (opens in a new tab)

Published

Pure CSSNEW
The scroll-driven flagship: milestones fade-and-rise into place and their markers pop exactly as they scroll into view — driven entirely by the CSS animation-timeline: view() API, zero IntersectionObserver, zero JavaScript. Scrub the page up and down and the entrances play forwards and backwards like a scrubbing video, because the scrollbar IS the timeline.
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

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. Conversation Thread Timeline — Nested Replies with Curved Connectors (opens in a new tab)

PublishedUpdated

Pure CSS
The social-thread structure: a chronological root post with nested replies hanging off curved elbow connectors (border-radius corners, no SVG), avatar-anchored rails that stop exactly at the last child, and collapse toggles built from <details> — the hierarchy-plus-time layout of comment systems, support threads and design-review trails.

21. Zigzag Alternating Timeline — Container Query Responsive (opens in a new tab)

PublishedUpdated

Pure CSS
The classic center-spine zigzag — cards alternating left and right of a vertical rail with arrow notches pointing at their markers — made truly portable: it reshapes to a single left-rail column when its CONTAINER drops below 560px, not the viewport. Drop it in a sidebar, a modal or a split view and it lays itself out correctly with zero configuration.

22. Tabbed Era Timeline — Radio-Button Period Switcher, Zero JS (opens in a new tab)

PublishedUpdated

Pure CSS
A horizontal era bar where clicking a period (or arrowing between them with a keyboard) swaps the detail panel below — powered entirely by hidden radio inputs and :checked sibling selectors. The pattern for 'company history by era', museum exhibits and product generations, with a sliding underline indicator that moves between tabs using only CSS.
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

23. Anchor-Nav Timeline — :target Deep-Linkable Milestones (opens in a new tab)

PublishedUpdated

Pure CSS
Every milestone is a URL: a year-chip navigation jumps to events down the page, and the :target pseudo-class lights up whichever milestone the hash points at — spotlight ring, tinted card, raised marker. Share #tls24-2024 and the recipient lands on that exact event, highlighted, with scroll-margin keeping it clear of any sticky header. Zero JavaScript, fully back-button friendly.

26. Horizontal Panorama Timeline — Vertical Scroll Drives Sideways Travel (opens in a new tab)

PublishedUpdated

Pure CSS
The collection's finale: a century of milestones laid out as one wide horizontal panorama that travels sideways as you scroll DOWN — the sticky-viewport + scroll-driven-transform pattern behind award-site history pages, finally possible in pure CSS with animation-timeline: scroll(). No scroll hijacking, no wheel listeners: the scrollbar keeps its native physics and the panorama is simply mapped onto it.

28. Editorial History Timeline — Sticky Era Headers in Serif (opens in a new tab)

PublishedUpdated

Pure CSS
The museum-catalog treatment: decades of history grouped under enormous serif year headings that STICK to the top while their era's events scroll past, then hand off to the next era with a gentle push — position:sticky choreography that makes long histories navigable without a single script, styled like a broadsheet retrospective.

29. Comparison Dual Timeline — Two Histories on One Spine (opens in a new tab)

PublishedUpdated

Pure CSS
Two parallel stories on a shared chronological spine: company A on the left, company B on the right, year markers riding the center rail, with color-coded sides announced in headers (never color alone) — the format for rivalry retrospectives, before/after process comparisons and 'us vs the old way' marketing pages.

31. Flight Itinerary Timeline — Segments, Layover and Timezone Footnotes (opens in a new tab)

PublishedUpdated

Pure CSS
The booking-confirmation pattern: flight legs as airport-code pairs joined by a dotted route with a plane glyph riding it, duration bars proportional to real flight time, and the layover rendered as an honest dashed gap with a 'short connection' warning chip — the domain where a timeline's geometry genuinely helps people not miss planes.

32. Live Activity Feed Timeline — Real-Time Events with :has() Filter (opens in a new tab)

PublishedUpdated

CSS + JS
A team activity stream that behaves like a product, not a demo: new events arrive on top every few seconds with a height-then-fade entrance that never shoves the page, a 'Mentions only' toggle filters the feed with :has() and zero listener code, and the stream politely stops growing while your pointer is inside it — the courtesy every real feed (Slack, GitHub, Linear) implements and most tutorials skip.
FAQ

Frequently asked questions

What is a CSS timeline and when should I use one?
A CSS timeline is a layout that orders content chronologically or sequentially so readers can scan the story before diving into detail. Use one whenever the DATE, STAGE, or ORDER is part of the meaning — release notes, project history, audit trails, delivery tracking, conference agendas, medical records, resume/CV. The 32 demos in this collection map to real product surfaces: GitHub-style commit history for dev-tools changelogs, CI/CD deploy pipelines with conic-gradient status spinners for DevOps dashboards, resume timelines with CSS subgrid for portfolio pages, order tracking steppers for e-commerce checkouts, product roadmaps with quarter columns for SaaS marketing pages, Gantt swimlanes for PM tools, conference agendas with hour grids, and scrollytelling panels for long-form journalism. Every demo is graded on four axes tier-1 (US/UK/CA/AU) front-end developers actually care about: (1) MODERN CSS gated properly — platform features like animation-timeline: view()/scroll(), container queries, subgrid, and :has() sit behind @supports so unsupported browsers get identical static content, never hidden behind an effect that can't play. (2) SEMANTIC & ACCESSIBLE by construction — every timeline is a semantic <ol> of <li> events, dates are real <time datetime> elements, decoration lives in aria-hidden pseudo-elements, state is never color-alone (glyph + text always). (3) PERFORMANCE and Core Web Vitals — animations are transform/opacity only, scroll effects use scroll-driven timelines instead of scroll listeners (zero main-thread cost), and 31 of 32 demos ship zero JavaScript. (4) DROP-IN PORTABILITY — each demo themes from 3-6 CSS custom properties on the .tls-NN root so retuning takes one ruleset.
Vertical or horizontal timeline — which should I use?
Vertical is the default. It reads like prose, works on any width, and screen readers walk it in DOM order — 26 of the 32 demos in this collection ship vertical. Horizontal wins in three specific cases: (1) short repeatable cards where comparing adjacent items matters (conference agenda hour grid, flight itinerary segments, film festival strips, ticket stubs), (2) scrollytelling / panorama patterns where sideways travel IS the effect (Horizontal Panorama Timeline uses animation-timeline: scroll() to map vertical scroll to horizontal transform), (3) scroll-snap carousels where the user drives one item at a time (Cinematic Filmstrip, Ticker Tape Changelog). Avoid horizontal scroll on mobile unless the interaction feels intentional — the shipped horizontal demos all fall back to vertical stacks under 480px, or ship a documented scroll-snap fallback.
How do I ship a CI/CD deploy pipeline timeline for our dashboard?
Demo 02 in this collection is a production-ready CI/CD deploy pipeline: Build → Test → Deploy stages joined by connector lines that fill with state, a conic-gradient spinner on the running step, and success/pending/failed expressed with icon AND text so it reads correctly for color-blind engineers (WCAG 1.4.1). Wire it to your CI status: (1) each stage carries a data-state attribute (data-state='success' | 'running' | 'failed' | 'pending') that drives chip color, icon, and border via attribute selectors — no class swaps needed, just one attribute per stage; (2) the connector fill uses a single --progress custom property per stage that you can set inline (--progress:100% for done, --progress:60% for a partially-complete stage) so a small server-render helper is all it takes; (3) the running spinner is @property-registered so it degrades cleanly on older browsers; (4) prefers-reduced-motion turns the spinner into a static conic pattern. Pair this with a Terminal Log timeline (Demo 19) below the pipeline for the streaming log output, and you have the Vercel / Netlify / GitHub Actions dashboard pattern in ~200 lines of CSS.
How do I use CSS subgrid for a resume / work-experience timeline?
Demo 03 (Resume / Work Experience Timeline) is the reference implementation. The trick: the outer <ol> is a two-column grid (date-column | detail-column), and each <li> uses display: grid; grid-template-columns: subgrid; grid-column: 1 / -1 so its INNER date-cell and detail-cell align to the OUTER grid tracks. That means when one role has three bullet points and another has one, every date, every marker, and every description edge stays perfectly aligned across the entries — with zero manual width calculations. Subgrid is Baseline widely-available (Chrome, Safari, Firefox all shipped), and the @supports (grid-template-columns: subgrid) block wraps the alignment rules so older browsers get a graceful two-column flex fallback with slightly less-perfect alignment. This is the pattern LinkedIn, Read.cv, and every serious portfolio site ships for resume timelines — before subgrid, you needed JS to measure and align.
How do I ship a SaaS product roadmap timeline without linking to Notion or Trello?
Demo 25 (Product Roadmap Timeline — Quarter Columns) is the public-roadmap pattern SaaS companies converge on: four quarter columns of feature cards, each double-coded with a status chip (Shipped ✓ / In progress ◐ / Planned ○), and a 'today' line dropped precisely between quarters with a labeled flag. Status is a data-status attribute driving everything (chip color + glyph + card border) via attribute selectors — no class swaps, no conditional rendering, just one attribute per card that your CMS or Airtable can populate. The 'today' line position is one --today custom property (compute it server-side: (dayOfYear/365)*100%) so it stays honest without JavaScript. Ship this as a static /roadmap page and every 'when is X coming?' support ticket has a URL to point at — Linear, Height, Notion Product, and Superhuman all ship variants of this exact pattern. The mobile fallback stacks the four quarters into a horizontal scroll-snap strip so the roadmap still reads at 375px.
How do I ship an order tracking timeline (Amazon / DoorDash / Stripe style)?
Demo 04 is the modern order-tracking stepper: Placed → Packed → Shipped → Out for delivery → Delivered as a horizontal stepper whose connector fills to the current stage with one --step custom property (--step:3 means step 3 is active), an animated pulse on the live step, ETA copy, and a container-query flip to vertical layout under 480px containers. This is the exact pattern Amazon Prime, DoorDash, Uber Eats, Stripe Checkout, and Shopify Shop app converged on. Three ships you almost certainly need to add: (1) status polling — the demo is display-only; wire a small fetch on an interval to update --step and the ETA text, (2) accessibility announcement — when --step advances, add aria-live='polite' on a hidden status region so screen readers hear 'Step 3 of 5: Shipped', (3) error state — add a data-error attribute that changes the current step from amber-pulse to red-static with a 'Contact support' link. The demo ships the visual pattern; the polling + error handling is ~20 lines of JS added on your side.
Which timelines use scroll-driven animations (animation-timeline)?
Three demos in this collection ship animation-timeline: view() or scroll() as the primary motion driver. Demo 06 (Scroll-Driven Reveal Timeline) uses animation-timeline: view() so each milestone fades and rises exactly as it scrolls into the viewport — zero IntersectionObserver, zero JavaScript, and scrubbing back and forth plays the entrance forwards and backwards like a video, because the scrollbar IS the timeline. Demo 20 (Reading-Progress Timeline) uses animation-timeline: scroll() to fill a progress bar and light chapter dots as an article scrolls — the pure-CSS replacement for the scroll-listener progress bars every publisher ships in JavaScript. Demo 26 (Horizontal Panorama) maps vertical scroll to horizontal translateX across a 4-viewport-wide track — the sticky-viewport + scroll-driven-transform pattern behind award-site history pages. Every animation-timeline demo ships an @supports not fallback that delivers the identical content statically (or with a native scroll-snap carousel for the panorama) so unsupported browsers never see broken layouts. Scroll-driven animations are Baseline newly-available in Chromium and shipping stable in Safari and Firefox — check caniuse.com for the exact browser cut-off before relying on them for critical UI.
How do I keep timelines accessible for screen readers and keyboard users?
Every timeline in this collection is built on semantic <ol> or <ul> lists (never <div> stacks), so screen readers announce 'List, 5 items' before walking each event in order. Dates are real <time datetime> elements so assistive tech reads them consistently. Decorative rails, dots, and connectors live in aria-hidden pseudo-elements — never in real DOM that gets announced. Status is never color-alone — every chip carries text (Shipped / In progress / Planned) AND a glyph (✓ / ◐ / ○) alongside its color, which satisfies WCAG 1.4.1 for the ~8% of male users with red-green color blindness. Interactive timelines (Accordion Timeline uses <details name> for exclusive-open behavior, Tabbed Era uses radio inputs with :checked, Anchor-Nav uses :target for deep-linkable milestones) all work with Tab / Enter / Space and have visible focus rings via :focus-visible. Continuous animations (Terminal typing caret, EKG trace pulse, activity-feed fade-ins) all sit behind @media (prefers-reduced-motion: no-preference) with the reduced-motion path showing complete content statically.
How do I adapt these timelines to my design system?
Every demo themes from 3-6 CSS custom properties declared on the demo root (.tls-NN). Change --tl-accent for the primary color, --tl-ink for text, --tl-mut for muted text, --tl-line for rails and borders, --tl-bg for the wrapper background — the whole demo retunes without touching layout math. The class prefix .tls-NN is per-demo scoped so you can paste multiple demos into the same project without collision (paste Demo 02 + Demo 25 + Demo 08 side-by-side and they never fight). Typography swaps cleanly: the demos use Georgia / system-ui / ui-monospace by default, but you can drop Inter, Geist, or any custom stack in — the layouts are set with clamp() and ch/fr fluid units so they reflow to whatever font metrics you pick. For dark/light theming, override the tokens inside a [data-theme='dark'] block on the root or use light-dark() directly.

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…