CSS text-transform full-width in CJK Typography

The CSS property text-transform: full-width is a typographic tool designed to harmonize Latin and half-width characters within East Asian (Chinese, Japanese, and Korean) layouts. This article explains how the property operates by mapping standard half-width Latin glyphs to their full-width Unicode equivalents, how it preserves the traditional square grid of CJK typography, and its specific behavior in both horizontal and vertical text modes.

The Unicode Mapping Mechanism

Standard Latin characters, numbers, and basic punctuation marks originate from the ASCII character set (Unicode range U+0020 to U+007E). In standard proportional fonts, these characters have variable, narrow widths.

When text-transform: full-width is applied, the browser dynamically transforms these standard characters into their counterparts in the Halfwidth and Fullwidth Forms Unicode block (U+FF01 to U+FF5E). For example, a standard Latin letter "A" (U+0041) is rendered as full-width "A" (U+FF21). This is purely a visual transformation; the underlying text in the DOM remains standard ASCII, meaning accessibility tools, copy-paste operations, and search functions are not broken by corrupted text strings.

Preserving the CJK Typographic Grid

East Asian typography traditionally operates on a strict square grid system known as an em-box. Every Chinese character (hanzi), Japanese kanji/kana, and Korean hangul glyph occupies a uniform square cell.

When proportional Latin characters are inserted into CJK body text, they disrupt this rhythm because they occupy significantly less horizontal space. Applying text-transform: full-width forces Latin characters to occupy an entire square em-box, matching the width, baseline, and spacing of adjacent East Asian ideographs. This is especially common in Japanese typography, where mixed alphanumeric data—such as model numbers, addresses, or dates—is expected to conform to the monospaced grid.

Behavior in Vertical Writing Modes

The effect of text-transform: full-width is prominent in vertical writing modes (writing-mode: vertical-rl or vertical-lr):

  • Standard Latin Text: By default, Latin words in vertical layouts are often rotated 90 degrees clockwise to run sideways along the column.
  • Full-Width Transformed Text: Full-width characters are treated as native East Asian ideographs. Instead of being rotated sideways, each character stays upright and is stacked sequentially from top to bottom, perfectly centered on the vertical line.

Implementation

The property is implemented directly via CSS:

.cjk-mixed-content {
  text-transform: full-width;
}

This declaration affects all Latin letters, ASCII digits, half-width katakana, and basic symbols inside the targeted element, ensuring an even visual distribution across mixed-language typography.