The paint-order property controls the order in which fill, stroke, and markers are drawn on SVG shapes and text. The default paints fill first, then stroke, then markers.
It is inherited. The initial value is normal. A thick stroke often looks better behind the fill—set paint-order: stroke fill for that.
Note Markers are SVG-only
markers applies to SVG shapes that use marker-*. For HTML text you mainly reorder stroke and fill (often with -webkit-text-stroke).
Same look here. For fill + stroke only, stroke matches stroke fill.
Use markers when needed. Add markers when SVG markers are part of the graphic.
Edge Cases & Pitfalls
If the outline still looks wrong, check these first.
stroke
Needs a visible stroke
Without stroke and a thick enough stroke-width, changing order has little visible effect.
markers
markers needs SVG markers
HTML text ignores markers. Use marker elements on SVG paths when that keyword matters.
html
HTML text needs a stroke source
Browsers often stroke HTML text with -webkit-text-stroke. Pair that with paint-order for filled outlines.
omit
Omitted layers keep default order
Listing one or two keywords does not drop the others—they paint afterward in their normal relative order.
scope
Not a general stacking property
It does not replace opacity, mix-blend-mode, or z-index. It only orders fill / stroke / markers on the same shape.
Compatibility
Browser Support
paint-order is a browser rendering property for SVG and stroked text. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
paint-order
Interoperable across modern browsers. Full CSS support from Chrome/Edge 123+, with earlier support in Firefox and Safari.
97%Modern browsers
Google Chrome123+
Full
Mozilla Firefox60+
Full
Apple Safari11+
Full
Microsoft Edge123+
Full
Opera109+
Full
Samsung Internet27+
Full
Internet ExplorerNo
None
paint-orderWidely supported
Bottom line: Safe for modern sites. Older Chromium before 123 had partial SVG-attribute support; IE does not support it.
Remember
Key Takeaways
Role: choose which paints first among fill, stroke, and markers.
Default:normal = fill → stroke → markers.
Go-to value:stroke fill for cleaner outlined SVG text.
Inherited: yes. Markers matter only with SVG <marker> usage.
One line:paint-order decides whether the stroke sits on top of the fill or behind it.
Frequently Asked Questions
It controls the order in which fill, stroke, and markers are painted on SVG shapes and text. Changing the order changes how thick strokes and fills overlap.
The initial value is normal, which paints fill first, then stroke, then markers.
Use it when a thick stroke should sit behind the fill. Outlined SVG text often looks cleaner with the fill painted on top.
No. Markers apply to SVG shapes that use marker-* properties. For HTML text you mainly choose between stroke and fill order.
Yes. That layer paints first. The remaining layers keep their default relative order after it.
It is Baseline Widely available. Full CSS support landed across major browsers around Chrome/Edge 123, with earlier support in Firefox and Safari. It is a browser rendering property, not a Node.js feature.