Design Trends

Why Traditional Chinese Websites Feel Cramped: A Testable Typography Spec (line-height 1.75, 0.25em Mixed-Script Spacing, Punctuation Trimming)

2026.08.16 · 40 views
Why Traditional Chinese Websites Feel Cramped: A Testable Typography Spec (line-height 1.75, 0.25em Mixed-Script Spacing, Punctuation Trimming)

The problem is rarely the typeface. It is line-height, measure, mixed-script spacing and line-breaking rules that nobody adjusted.

Share:

When an English template gets reused for Traditional Chinese, the problem is rarely an ugly typeface. It is that nobody changed the layout parameters: line-height still sits at 1.5, the measure has no upper bound, Latin characters and digits collide with Chinese glyphs, and runs of full-width punctuation blow open holes in the text. None of that is fixed by swapping fonts. In 2026, browsers have finally shipped text-spacing-trim, text-autospace and text-wrap — properties designed for East Asian text — so Chinese typography can be specified in CSS and, more importantly, signed off in an acceptance checklist.

How real sites handle it

The Reporter and CommonWealth Magazine optimise for long-form reading: generous line spacing, a deliberately narrow body column that keeps lines in the low-to-mid thirties in characters, and paragraph gaps clearly larger than the leading, so readers get a real pause between blocks.

Apple Taiwan is the reference case for mixed scripts. Product names, spec numbers and Chinese copy alternate constantly; headings run tighter tracking while body copy runs looser leading, and there is visible breathing room between Chinese and Latin, and between numbers and units.

PChome 24h and momo go the other way: tight leading, headings that truncate or break awkwardly, trading comfort for scan speed. That is not a mistake — it is a different task.

The cautionary examples are easy to find. Notion's Chinese UI and GitHub's Chinese docs were laid out for English, so Chinese inherits cramped leading and zero spacing around Latin words. Chinese Wikipedia on a wide monitor shows the same family of problem in its unbounded line length.

Why Chinese needs different numbers

Chinese is written in square glyphs with no spaces between words. English gets free scanning pauses from word spaces; Chinese does not. At identical line-height, a Chinese paragraph is visually denser, so it needs more leading before lines separate cleanly.

The cap on characters per line comes from the return sweep. When a line is too long, the eye mis-targets the next line's start and the reader re-reads. That is eye-movement behaviour, not an aesthetic preference.

Chinese also has no x-height contrast and almost no ascender or descender variation, so a paragraph reads as an even grey slab with no silhouette. Rhythm has to come from paragraph spacing and subheadings. Punctuation occupies a full-width box, so consecutive marks open large gaps — precisely what W3C CLREQ (Requirements for Chinese Text Layout) documents at length.

Cost and constraints

text-spacing-trim ships in Chrome and Safari but not Firefox, and is not yet Baseline, so the degraded rendering must still be readable (see MDN). text-autospace has been supported since Safari 18.4 with other engines in progress; Chrome for Developers has the full rundown. text-wrap: balance is better supported but most implementations only handle roughly six lines, so long paragraphs are untouched.

On effort: a complete spec plus site-wide rollout and cross-browser verification runs about 8–20 person-hours; tokenising it into a design system and aligning with Figma adds up to roughly 24–40. Pure CSS parameters cost essentially nothing in bytes (under 1KB). What actually hurts LCP is the font file — a single Chinese weight is commonly 3–8MB, so loading an extra weight for typographic reasons is the real expense. Typography is not a ranking factor, but readability shows up in dwell time and scroll depth. Also, injecting spacer span elements to fake mixed-script spacing pollutes the plain-text content and leaves stray whitespace when AI systems scrape the page. Solve it in CSS first.

Where it is worth the investment

Worth itNot worth it
Long-form media, knowledge bases, technical docsE-commerce listing and search pages
Law, accounting and consulting firmsAdmin back offices
Brand sites and educationDashboards and reports
Long reading sessions, trust-buildingDensity first — tighten leading for scanning

The test is simple: are users reading or looking? Reading wants space; looking wants density.

A spec you can sign off

ItemTarget
Body line-height1.7–1.8 unitless (e.g. 1.75), never inherit 1.5
Heading line-height1.2–1.35
Measure30–40 Chinese characters, around max-width: 38em
Paragraph gapAt least 1.5× the leading (1.75 implies 1.2em or more)
Mixed-script spacingAbout 0.25em, ideally via text-autospace
Body size17px+ on desktop, 16px+ on mobile
Letter-spacingBody 0 to 0.02em; headings up to 0.05em
Punctuationtext-spacing-trim for consecutive marks
Line breakingline-break: strict with word-break: normal
Orphanstext-wrap: balance on headings, pretty on body
JustificationAllowed only with pretty; otherwise stay left-aligned
BoldAvoid synthetic bold; use a real 700 weight, size or colour

How to apply it

  • ☐ Measure first — inspect body line-height and max-width in DevTools; most templates still hold English defaults
  • ☐ Define four variables: --lh-body: 1.75, --lh-heading: 1.3, --measure: 38em, --gap-para: 1.2em
  • ☐ Apply to one page only, compare side by side, then roll out
  • ☐ Layer on text-spacing-trim, text-autospace and text-wrap, and confirm the Firefox fallback still reads well
  • ☐ Handle mixed-script spacing in CSS first, editorial guidelines second, backend insertion last
  • ☐ Test with your longest real heading and longest real paragraph, never Lorem Ipsum
  • ☐ Verify at 375px, 768px and 1440px

Common mistakes

  • Keeping line-height: 1.5 from an English template — move body copy to 1.7–1.8.
  • Adding letter-spacing: 0.1em to Chinese body copy to look refined — Chinese is already monospaced by nature, and extra tracking only slows reading. Save it for headings or all-caps Latin.
  • Breaking headings manually with br — it collapses on the next breakpoint; use text-wrap: balance.
  • Justifying everything — Chinese justification produces irregular gaps; pair it with text-wrap: pretty or stay left-aligned.
  • Faking hierarchy with synthetic bold — strokes blur; use a real weight, a size step or colour.

Further reading

FAQ

Does 1.75 make pages uncomfortably long?

Pages do get longer, but scrolling costs far less than re-reading. If you must compress, narrow the measure before lowering leading, and never drop below 1.5.

Can CSS alone handle mixed-script spacing without CMS access?

Yes. Safari already supports text-autospace; other browsers simply omit the 0.25em for now, which neither breaks the layout nor hurts readability.

Do we need a new typeface?

Fix the parameters first — most of the crowding disappears. A font change is only mandatory when you need a genuine 700 weight, and it must be weighed against file size.

Does measure matter on mobile?

Width is naturally constrained there. The real risks are body text below 16px and side padding eating the readable width.

What counts as passing?

At all three widths: no orphaned characters in headings, no punctuation at line starts, no line over 40 characters, and visible pauses between paragraphs.

Put this spec into your project

ScriptWalker handles design and development together, so we can turn this spec into design-system tokens and ship it into your Laravel, Vue/Nuxt or Flutter project, with a cross-browser acceptance checklist attached. If you want to know where your current site stands, send us the URL and we will return a concrete parameter comparison.

Share:
Design Trends Back to Blog