Technical guide2 min read

RTL product design beyond mirroring

Treat reading direction as an input to hierarchy, interaction, motion and mixed-direction text.

The question behind the term

A global rtl declaration fixes browser layout behavior but cannot decide hierarchy, icon meaning or spatial composition. Mechanical mirroring can invert a real process diagram or put the primary action in an awkward reading position.

A reviewable approach

Review navigation order, focus order, gesture direction, progress motion and anchored actions for each locale. Use bidi-safe markup for emails, identifiers and code, and test with actual Persian content at zoom and narrow widths.

  • Set lang and dir on the server-rendered root
  • Test keyboard order and screen-reader landmarks
  • Use a Persian font with appropriate metrics
  • Localize motion with meaning

The boundary to keep visible

Decorative asymmetry does not always need mirroring. Preserve causal meaning and accessibility before pursuing visual symmetry.

04

Test meaning across both directions

A back arrow should follow reading direction, but a diagram of a real data pipeline may need its causal direction preserved and its labels localized. Check keyboard focus order separately from visual order; both can look correct in a screenshot while behaving differently in use.

Use the actual Persian interface, not placeholder English, to test email addresses, identifiers, numerals and code within right-to-left sentences. Isolate the mixed-direction fragment with semantic markup and review punctuation at narrow widths and zoom. Persian font metrics and line height also deserve their own layout decisions.

R

References and further reading

  1. W3C guidance on text direction

Frequently asked questions

Should every interface element be mirrored for Persian?

No. Mirror directional controls when their meaning changes with reading direction; preserve the causal direction of a real process and localize its explanation.

LIVARA CHAT

Better conversations start here.

Try Livara Chat on the web or get the Android app.

Open Livara Chat