Skip to content
——Scroll · Free

CSS-Native Carousel (::scroll-button + ::scroll-marker)

A swipeable slide carousel with real prev/next arrow buttons and a row of position dots — generated entirely by the browser from plain CSS pseudo-elements (`::scroll-button(left/right)`, `::scroll-marker-group`, `::scroll-marker`), no carousel JS library, no scroll-jacking, no hand-written click handlers. The track itself is an ordinary `overflow-x:auto` list with `scroll-snap-type:x mandatory` — that part has worked in every browser for years; what's new is that the browser can now generate the nav chrome (arrows + dots) FOR that native scroller and keep it in sync with scroll position on its own, including disabling an arrow at either end and lighting up the current dot via `:target-current`, with zero JavaScript. **Real, current, cross-checked across independent primary/engineering sources** (not a single blog's guess): the CSS Working Group's own `css-overflow-5` carousel explainer (drafts.csswg.org) defines the mechanism; Chrome's own engineering blog post 'Carousels with CSS' walks through this exact `scroll-marker-group`/`::scroll-button`/`::scroll-marker` combination; MDN's `scroll-marker-group` reference page independently confirms the same property and currently marks it 'Limited availability' (not yet Baseline). **Honest gap, flagged rather than glossed over:** secondary sources disagree on the exact shipping details — ICS Media and one 2026 roundup both date Chromium support (Chrome/Edge/Opera) to version ~135 (April 2025), while a separate mid-2026 guide claims Safari 19+ also ships it and a third (checked May 2026) says Safari and Firefox still don't. This run's own `WebFetch` to MDN's and Chrome's pages to resolve that conflict at the primary source hit this environment's standing `EGRESS_BLOCKED` proxy block (the same block that stops the ChromeRiver drift check's `WebFetch` to apexflowlabs.com, logged every prior day) — so, like day 27's disputed-version blog claims, the Safari-support claim is treated as unverified and NOT relied on: this entry assumes Chromium-only until confirmed otherwise. **Fallback is safe regardless of which version claim is right:** an unsupported pseudo-element makes its whole CSS rule invalid, so a browser without this feature simply never matches `::scroll-button`/`::scroll-marker` at all — no error, no empty box, just the plain `scroll-snap` track underneath with native touch/trackpad swipe and (per MDN) scrollbar/keyboard scrolling, same 'never broken, never half-done' bar as every other entry here. No WebGL, no scroll-jacking — fits the DIY $999 tier as cleanly as it fits here. (Vanilla example: live iframe preview + HTML/CSS tabs, four color slides; the generated arrows/dots only appear in a Chromium build that implements this feature — Chromium's own feature-detection doc, not this demo, decides that.)

<div class="cnc-wrap">
  <ul class="cnc-track">
    <li class="cnc-slide" style="background:linear-gradient(135deg,#6366f1,#22d3ee)">1</li>
    <li class="cnc-slide" style="background:linear-gradient(135deg,#22d3ee,#34d399)">2</li>
    <li class="cnc-slide" style="background:linear-gradient(135deg,#34d399,#f59e0b)">3</li>
    <li class="cnc-slide" style="background:linear-gradient(135deg,#f59e0b,#ef4444)">4</li>
  </ul>
</div>

How it works

CSS-Native Carousel (::scroll-button + ::scroll-marker) is a hand-built scroll component in plain HTML and CSS — no React, no Tailwind, no framework at all. Paste it into any site as-is and it stays performant on real devices. It's free — copy the code above and ship it.

← Browse all components
Reviews

We’re early. Real reviews only.

Apex Flow Digital launched recently. Every purchase comes with a request for honest feedback through our help center. When real buyers write real reviews, they go here — with their permission, by name. Until then, this section stays empty. No fakes. No stock photos. No filler.

Used something from the catalog? Leave honest feedback →

While you’re here…