← Chrome 154 reference

v154 · css · enabled by default

CSS scroll-marker-group modes

Limited availability

  • Chrome · property since 135; links/tabs modes since 154
  • Edge · property since 135 (mirrors Chrome); modes not yet recorded
  • Firefox · not shipped (no signal)
  • Safari · not shipped (no signal)

The parent scroll-markers web-feature is Baseline limited (webstatus.dev API, queried 2026-10-04): Chrome/Edge 135, no Firefox or Safari implementation. The links/tabs modes themselves have no BCD entry yet — see the full table.

Chrome 154 extends the scroll-marker-group property so scroll markers can declare which WAI-ARIA interaction pattern they follow: links (the default — a navigation list of sequential tab stops) or tabs (a tablist with roving focus, tabpanel roles, and automatic accessibility-tree pruning of inactive panels). The chosen mode changes the roles, focus order, and activation behavior of the ::scroll-marker-group and ::scroll-marker pseudo-elements. Ships enabled by default in Chrome 154 on desktop, Android, and WebView.

Single-engine, spec still in flight The modes are enabled by default in Chrome 154 (runtime flag CSSScrollMarkerGroupModes is stable, no opt-in needed), but CSS Overflow Level 5 is a CSSWG Editor’s Draft under active development, the originating CSSWG issue #12122 remains open, and Firefox (position requested) and Safari (position requested) have given no signal. The API surface may still move — treat it as a progressive enhancement and do not rely on mode semantics as your only accessibility affordance in production.

at a glance

Shipped inChrome 154 (desktop, Android, WebView) — filed under “Enabled by default” in the milestone=154 listing
Runtime flagCSSScrollMarkerGroupModes, status stable in runtime_enabled_features.json5 (checked 2026-10-04) — on by default, no flag flip required
Spec changew3c/csswg-drafts PR #13627 (merged 2026-03-17) adding modes to CSS Overflow 5 §3.1.3, from CSSWG issue #12122 (“Discrete versus navigation scroll marker mode”, opened by Robert Flack)
Intent to Shipblink-dev thread (2026-07-15)
Tracking bugissues.chromium.org/425931511
Explainerscroll-marker-group modes vs. WAI-ARIA patterns (Daniil Sakhapov)
ChromeStatus5109685301673984 — CSS scroll-marker-group modes

syntax

The value-definition grammar, quoted verbatim from the scroll-marker-group propdef in CSS Overflow 5 (fetched 2026-10-04):

scroll-marker-group: none | [ [ before | after ] || [ links | tabs ] ]
Namescroll-marker-group
Valuenone | [ [ before | after ] || [ links | tabs ] ]
Initialnone
Applies toscroll containers
Inheritedno
Percentagesn/a
Computed valuespecified keyword(s)
Canonical orderper grammar
Animation typediscrete

The || combinator means a position keyword (before | after) and a mode keyword (links | tabs) may each appear at most once, in either order — scroll-marker-group: after tabs and scroll-marker-group: tabs after are both valid. If the mode keyword is omitted, links is the default mode (spec: “This is the default mode if omitted”). Note the grammar also permits a bare mode keyword with no position keyword; the spec prose read on 2026-10-04 defines ::scroll-marker-group box placement only for before and after, so the placement for a bare-mode value is not explicitly stated — specify a position keyword in practice. There is no error surface beyond parsing: a declaration that does not match this grammar is simply invalid and ignored, per CSS Syntax 3 error handling (see each mode’s Errors section for the fallback consequences).

Source: CSS Overflow 5 §3.1.3 (propdef); valdef links; valdef tabs

the two modes

Per CSS Overflow 5 §3.1.6 Scroll Marker Modes, a ::scroll-marker-group operates in either links or tabs mode based on the scroll-marker-group value of its originating element. Each mode has its own reference page covering syntax, roles, focus behavior, activation, examples, and compatibility:

links (default)

A navigation list: ::scroll-marker-group gets the navigation role, each ::scroll-marker the link role. Every marker is a sequential tab stop; originating elements keep their natural roles.

links mode reference →

tabs

A tablist: ::scroll-marker-group gets the tablist role, markers get tab, originating elements get tabpanel. Roving focus via arrow keys, and inactive panels are pruned from the accessibility tree.

tabs mode reference →

Behaviorlinks (default)tabs
Group rolenavigationtablist
Marker rolelinktab
Originating element roleunaffectedtabpanel (for a ::column marker, assigned to the column’s originating element)
Tab stopsevery marker, in orderonly the active marker; arrow keys move within the focusgroup
Focus after activationlost from the marker; sequential focus navigation starting point moves to the targetretained on the marker
Inactive contentremains in the accessibility treehidden from the accessibility tree
Source: CSS Overflow 5 §3.1.6

what changes for existing content

scroll-marker-group itself shipped in Chrome 135; before Chrome 154 the property accepted only none | before | after (the value set recorded in BCD). From Chrome 154, any existing scroll-marker-group: before or after declaration operates in links mode, since the spec makes links the default when the mode keyword is omitted. The Intent to Ship discussion flagged exactly this as the feature’s main compatibility risk: fixing a default mode alters focus order and accessibility roles for pages already using scroll markers (usage was reported at roughly 0.09% of page loads in the thread). How pre-154 Chrome ordered focus and assigned roles for markers is not stated in the sources read here; if your carousel relied on the earlier implicit behavior, re-test focus order in 154 and declare tabs explicitly where you want tablist semantics.

Source: valdef links (“default mode if omitted”); blink-dev Intent to Ship; BCD css/properties/scroll-marker-group.json

activation behavior

When a scroll marker with a non-null scroll target is activated (by explicit invocation or arrow-key focus), CSS Overflow 5 §3.1.9 scrolls the target element into view (block and inline alignment “start”, within the nearest common ancestor scroll container). If the activation was an invocation, the browser follows the hyperlink, updating the URL. The modes then diverge:

Source: CSS Overflow 5 §3.1.9 Activation behavior (quoted verbatim, fetched 2026-10-04)

examples

A tabbed carousel using tabs mode — adapted from the explainer’s tabs-mode example:

.slides {
  /* Core tabs mode declaration: position keyword + mode keyword */
  scroll-marker-group: after tabs;

  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;

  & > div {
    min-width: 100%;
    scroll-snap-align: center;

    /* Each slide gets a marker, collected into the group */
    &::scroll-marker {
      content: "";
      display: inline-block;
      width: 1rem; height: 1rem;
      border-radius: 50%;
      border: 1px solid #444;
    }

    /* The active tab marker */
    &::scroll-marker:target-current {
      background: SelectedItem;
    }
  }
}

Switching the declaration to scroll-marker-group: before links; turns the same markup into a table-of-contents-style navigation list (see the links mode reference for a full example).

Live example from the Chrome Platform Showcase (route HEAD-checked 200, 2026-10-04). Sibling concept demos: tabbed carousel, ARIA tabs migration, column pager, and focus order journal.Source: chrome-platform-showcase

Upstream live demos by the feature author: tabs mode CodePen and links mode CodePen (from the ChromeStatus sample links).

Source: explainer gist; ChromeStatus sample links

browser compatibility

BCD css/properties/scroll-marker-group.json (fetched 2026-10-04) records the base property and its none/before/after values, but has no entry yet for the links and tabs values. The mode rows below are therefore interim data from the ChromeStatus API record, labelled as such:

Browserscroll-marker-grouplinks / tabs values
Chrome135 (BCD)154 desktop, Android, WebView (ChromeStatus, interim — no BCD entry yet)
Edge135 (BCD "edge": "mirror")Unknown — no BCD entry; Edge mirrors Chrome for the base property but no mode-specific record exists
FirefoxNot shipped (BCD version_added: false)Not shipped; position requested, none given
SafariNot shipped (BCD version_added: false)Not shipped; position requested, none given

Baseline: limited availability for the parent scroll-markers web-feature (webstatus.dev, queried 2026-10-04); ChromeStatus records “Missing feature” for a modes-specific web-feature id. Feature-detect with CSS.supports("scroll-marker-group", "after tabs") and treat the modes as a Chromium-only progressive enhancement.

Source: BCD; ChromeStatus API record; webstatus.dev API

security and privacy

CSS Overflow 5’s Appendix C and Appendix D state that the specification “introduces no new privacy considerations” and “no new security considerations”. The accessibility-relevant caveat is a direct consequence of the documented tabs behavior: content of inactive tab panels is hidden from the accessibility tree (the spec’s substitute for hand-written interactivity: inert management), so content that assistive-technology users must always be able to reach should not live only inside an inactive panel of a tabs-mode scroll container. This caveat is gendn guidance derived from the spec’s tree-pruning behavior, not a normative warning.

Source: CSS Overflow 5 Appendix C; Appendix D; §3.1.6 (tree pruning)

specifications

Source: ChromeStatus standards.spec (Working-Draft maturity recorded there)

see also