The unicode-bidi property works with direction to control how the Unicode bidirectional algorithm handles mixed left-to-right (LTR) and right-to-left (RTL) text.
The initial value is normal. It is not inherited. Values like embed, isolate, and bidi-override change embedding levels or force character order. Prefer the HTML dir attribute for everyday markup; use this property when you need precise embedding or isolation.
Warning Prefer HTML dir
MDN notes that unicode-bidi is intended mainly for DTD designers. Web authors should usually set direction with HTML dir instead of overriding bidi in CSS.
Baseline · Widely available.
Not deprecated. Standard-track CSS. Core values are ancient; isolate, isolate-override, and plaintext need modern browsers. Unaffected by the all shorthand (with direction).
isolate. The span is treated like a replaced object for outer bidi resolution.
Siblings stay stable. Punctuation and English around the name do not get pulled into the RTL run.
direction: rtl. Sets the base for content inside the isolated span.
Common UI fix. Usernames, emails, and quotes often need isolation in mixed-direction UIs.
Edge Cases & Pitfalls
If mixed text looks scrambled, check these first.
authors
Prefer HTML dir
For most pages, set direction in markup. Reserve CSS unicode-bidi for embedding/isolation cases you cannot express with dir alone.
pair
Needs direction for embed / override
embed and bidi-override take their base direction from direction. Without it, results may look unchanged.
all
Not reset by all
unicode-bidi and direction are the only properties the all shorthand does not affect.
support
Newer keywords need modern browsers
isolate, isolate-override, and plaintext arrived later than normal / embed / bidi-override.
a11y
Wrong override hurts readability
Forced order can reverse meaningful text. Prefer isolate for snippets; test with real RTL languages and screen readers.
Compatibility
Browser Support
unicode-bidi is a browser CSS property for bidirectional text. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
unicode-bidi
Core values (normal, embed, bidi-override) are widely supported. isolate, isolate-override, and plaintext need roughly Chrome 48+, Firefox 50+, Safari 11+, Edge 79+.
97%Core support
Google Chrome2+ / 48+*
Full support
Mozilla Firefox1+ / 50+*
Full support
Apple Safari1.3+ / 11+*
Full support
Microsoft Edge12+ / 79+*
Full support
Opera15+ / 35+*
Full support
Samsung Internet1+ / 5+*
Full support
Internet Explorer5.5+
Core values
unicode-bidiWidely supported
Bottom line: *Newer keywords (isolate / isolate-override / plaintext). Safe to teach; prefer HTML dir for authors. It is not a runtime API.
Remember
Key Takeaways
Role: control bidi embedding / isolation with direction.
Initial value:normal — no extra embedding level.
isolate vs override: protect neighbors vs force character order.
Authors: prefer HTML dir; treat CSS bidi as advanced.
One line:direction sets base flow; unicode-bidi decides how embedding and isolation work.
Frequently Asked Questions
Together with direction, it controls how the Unicode bidirectional algorithm embeds or isolates mixed left-to-right and right-to-left text.
The initial value is normal — the element does not add an extra embedding level; implicit bidi reordering still applies.
MDN warns that unicode-bidi is mainly for DTD designers. Prefer HTML dir attributes for everyday pages; use CSS unicode-bidi only when you truly need embedding or isolation control.
Use isolate for short opposite-direction snippets (names, emails, quotes) so they do not reorder surrounding punctuation or text.
It forces characters to follow direction in strict storage order, ignoring the usual implicit bidi reordering inside the element.
Core values are Baseline Widely available. isolate, isolate-override, and plaintext need modern engines (roughly Chrome 48+, Firefox 50+, Safari 11+). It is a browser CSS property, not a Node.js feature.