Testing

CSS ::marker: Browser Support, Properties, Limitations

CSS ::marker works in Chrome 86+, Edge 86+, Firefox 68+, Opera 72+, and Samsung Internet 14+, while Safari ships partial support. See full browser support.

Author

Prince Dewani

May 1, 2026

CSS ::marker is a W3C pseudo-element that selects the marker box of a list item, the bullet or number next to each list entry. It works in Chrome 86+, Edge 86+, Firefox 68+, Opera 72+, and Samsung Internet 14+, while Safari 11.1+ and Safari on iOS 11.3+ have only partial support and Internet Explorer never added it.

This guide covers what CSS ::marker is, which browsers support it, the supported properties, how to change a marker, and known issues.

What is CSS ::marker?

CSS ::marker is a pseudo-element from the W3C CSS Lists Module Level 3 that targets the marker box of any element with display: list-item. It applies to li, ol, ul, and summary, letting you style the bullet or number with a limited set of CSS properties.

Which browsers does CSS ::marker support?

CSS ::marker works in every modern desktop browser and in Chromium-based mobile browsers, while Safari ships partial support and Internet Explorer never added it. Coverage today reaches roughly 95% of global users when partial support is counted.

Loading browser compatibility data...

CSS ::marker compatibility in Chrome

Chrome supports CSS ::marker by default from Chrome 86 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 4 to 85 did not recognize the selector. The Blink engine forces white-space: pre on outside-positioned markers, so any trailing space inside the content property is preserved.

CSS ::marker compatibility in Edge

Microsoft Edge supports CSS ::marker by default from Edge 86 on Windows, macOS, Linux, and Android. The Chakra-based Edge 12 to 18 never supported the pseudo-element. Chromium-based Edge tracks Chrome exactly, so the same Blink quirks and behavior apply.

CSS ::marker compatibility in Firefox

Firefox supports CSS ::marker by default from Firefox 68 on Windows, macOS, Linux, and Android. Mozilla shipped the first full implementation, including the content property and animation support. Firefox 2 to 67 did not recognize the selector.

CSS ::marker compatibility in Safari

Safari supports CSS ::marker only partially: Safari 11.1+ on macOS and Safari on iOS 11.3+ accept color and font longhands, but the content property and most layout properties are dropped by WebKit. Safari 3.1 to 11 do not support the selector at all. Safari on iPadOS follows the same partial-support behavior.

CSS ::marker compatibility in Opera

Opera supports CSS ::marker by default from Opera 72 on Windows, macOS, Linux, and Android. Opera 9 to 71 did not support it. Opera Mini, which renders pages on a remote server, never added the pseudo-element and falls back to the default marker glyph.

CSS ::marker compatibility in Samsung Internet

Samsung Internet supports CSS ::marker by default from Samsung Internet 14 on Galaxy phones and tablets. Samsung Internet 4 to 13 did not support it because those builds tracked an older Chromium baseline. Every release from version 14 forward inherits the same behavior as Chrome on Android.

CSS ::marker compatibility in Android Browser

The legacy Android Browser, replaced by Chrome for Android on most devices, did not support CSS ::marker. Modern Android Browser builds running on Chromium 86 and later inherit the pseudo-element from the system WebView. Apps that embed Android WebView pick up ::marker once the WebView updates past the Chromium 86 baseline.

CSS ::marker compatibility in Internet Explorer

Internet Explorer 5.5 through 11 do not support CSS ::marker in any version. The Trident engine never received the pseudo-element and silently ignores the rule. Microsoft has retired Internet Explorer 11, so users on supported Windows builds run Microsoft Edge, which supports ::marker from Edge 86 forward.

Note

Note: CSS ::marker breaks across Safari and older mobile browsers. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What CSS properties can you style with ::marker?

The ::marker pseudo-element accepts only a small set of CSS properties. The W3C CSS Lists Module Level 3 spec and MDN agree on which properties apply, so anything outside the list either has no effect or behaves inconsistently between browsers.

Properties that work on ::marker:

  • Font longhands: font-family, font-size, font-weight, font-style, font-variant, and the rest of the font shorthand parts apply to the marker glyph.
  • color: Sets the bullet or number color independently from the list item text.
  • content: Replaces the default marker glyph with a string, a counter() value, or a Unicode symbol.
  • All animation and transition properties: animation-name, animation-duration, transition-property, and the rest let you animate marker color, font-size, or content over time in Firefox and Chromium.
  • Writing-mode helpers: direction, unicode-bidi, and text-combine-upright control the marker in vertical and right-to-left flows.
  • white-space: Controls how trailing space inside content="" is preserved or collapsed.

Properties that do NOT work on ::marker:

  • background and background-color: The marker box ignores background paints. Use list-style-image on the parent li for an image marker, or move the styling to a ::before pseudo-element.
  • margin, padding, border, width: The marker is sized and positioned by the parent list-style-position value. Box-model properties have no effect on ::marker.
  • text-decoration: Underlines and strike-throughs declared on ::marker are dropped by every implementing engine.
  • position, display, flex, grid: Layout-changing properties do not apply to the marker box and are ignored.
/* Restyle the bullets and numbers on every list item. */
li::marker {
    color: hotpink;
    font-size: 1.25rem;
    content: "✦ ";
}

/* Replace the default ordered-list number with a custom format. */
ol li::marker {
    content: counter(list-item) ". ";
    font-weight: 700;
    color: #00b7a8;
}

The two rules above restyle every bullet on the page and replace the ordered-list number with a bold custom format that still increments through counter(list-item).

How do you change the marker in CSS?

Changing a marker takes one of two routes: replace the marker glyph with the content property, or restyle the default glyph through font and color properties. The steps below cover both routes in one pass.

  • Pick the selector scope: Decide whether you want to change the marker for an entire list (li::marker), one specific item (li:first-child::marker), or every list-item element on the page (::marker).
  • Decide replace or restyle: Use list-style-type: none on the parent if you plan to fully replace the glyph through content. Leave the default list-style-type if you only want to recolor or resize the existing bullet or number.
  • Write the ::marker rule: Add li::marker { ... } to your stylesheet and set the property you want to change, such as color, font-size, font-family, or content.
  • Use counter(list-item) for ordered numbers: When you replace the content of an ordered-list marker, call counter(list-item) so each item still increments. Plain string content overrides the number entirely.
  • Test on Safari and Safari on iOS: Reload the page in Safari to confirm the limited WebKit support handles your rule. If the content property silently drops, fall back to list-style-type or list-style-image so Safari users still see a custom marker.

If the marker still does not change after these steps, check that the parent has display: list-item and that list-style-type is not set to none on a higher-priority rule, both of which suppress the marker box entirely.

...

What are the known issues with CSS ::marker?

CSS ::marker has clear sharp edges that show up only when you ship to production across browsers. Plan around these before you replace list-style-image with a ::marker rule.

  • Safari only accepts color and font longhands: The content property and animation properties are buggy or rejected in WebKit, so any marker that relies on content="..." renders the default glyph in Safari and Safari on iOS instead of your custom symbol.
  • Background and box properties are ignored by spec: background-color, padding, margin, and border do not apply to the marker box. Styles that draw a colored chip behind a number have to live on a ::before pseudo-element instead.
  • Chromium forces white-space: pre on outside markers: Trailing whitespace inside content="" sticks, so write content="\u2726 " with the space included; the gap will not collapse the way it does in normal flow.
  • list-style-type: none hides the ::marker entirely: If a parent rule sets list-style-type: none, the marker box is suppressed and ::marker has nothing to style. Reset list-style-type or apply display: list-item on a different element.
  • Android Browser, Opera Mini, and Internet Explorer have no support: Treat ::marker as a progressive enhancement, with list-style-image as the cross-browser fallback for any audience that includes legacy mobile or enterprise browsers.

In my experience, the Safari partial-support gap catches more teams than any other browser quirk: a polished marker design ships, looks perfect in Chrome and Firefox, and falls back to the default disc in Safari without any console warning, so always include Safari in the test matrix before release.

...

Citations

All CSS ::marker version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests