Unicode in CSS
CSS supports Unicode via escape sequences (\2713 for ✓), the content property for generated text, unicode-range for font subsetting, and the writing-mode property for vertical text.
What is Unicode in CSS?
CSS has multiple mechanisms for working with Unicode characters: escape sequences for inserting characters by code point, the content property for generated text, unicode-range for selective font loading, and properties that control writing direction and script rendering. Understanding these tools is essential for building multilingual, internationalized web interfaces.
CSS Unicode Escape Sequences
CSS uses a backslash-based escape syntax to insert Unicode characters by code point. The format is \ followed by one to six hexadecimal digits, optionally followed by a space:
/* Checkmark ✓ (U+2713) in generated content */
.item::before {
content: "\2713 ";
}
/* Copyright symbol © (U+00A9) */
.footer::after {
content: "\A9 2024 My Company";
}
/* Emoji via code point (🌍 = U+1F30D) */
.global::before {
content: "\1F30D";
}
The trailing space after the hex digits is required if the next character is also a valid hex digit, to prevent ambiguity. Modern CSS also accepts the notation \{1F30D} with curly braces in some contexts, but browser support for this form is uneven.
The content Property and Unicode
The CSS content property (valid on ::before and ::after pseudo-elements) accepts literal Unicode strings or escape sequences. You can mix them:
.required::after {
content: " \2733"; /* ✳ */
color: red;
}
@font-face unicode-range
The unicode-range descriptor inside @font-face tells the browser to download a font file only when the page contains characters in the specified range. This is the backbone of efficient multilingual font loading — it prevents loading a full Japanese font just because a page has one Japanese character.
@font-face {
font-family: "MyFont";
src: url("latin.woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153;
}
@font-face {
font-family: "MyFont";
src: url("japanese.woff2");
unicode-range: U+3000-9FFF, U+F900-FAFF;
}
The browser matches code points in the document against the declared ranges and downloads only the relevant font files.
Writing Mode and Direction
CSS controls text flow direction through three core properties:
/* Horizontal top-to-bottom (default) */
.latin { writing-mode: horizontal-tb; }
/* Vertical right-to-left (Traditional Chinese, Japanese) */
.vertical-cjk { writing-mode: vertical-rl; }
/* Right-to-left base direction (Arabic, Hebrew) */
.arabic { direction: rtl; }
CSS Counters with Non-Latin Numerals
The list-style-type property and counter() function support dozens of non-Latin numeral systems:
ol { list-style-type: cjk-decimal; } /* CJK numerals: 一, 二, 三 */
ol { list-style-type: arabic-indic; } /* ١, ٢, ٣ */
ol { list-style-type: devanagari; } /* १, २, ३ */
Quick Facts
| Feature | CSS Property / Syntax |
|---|---|
| Insert by code point | content: "\2713" (1–6 hex digits) |
| Selective font loading | @font-face { unicode-range: U+... } |
| Writing direction | direction: rtl \| ltr |
| Vertical text | writing-mode: vertical-rl \| vertical-lr |
| Non-Latin list numbers | list-style-type: devanagari \| arabic-indic \| ... |
| Bidi control | unicode-bidi: isolate \| embed \| override |
| Font rendering | font-variant (OpenType feature access) |
관련 용어
웹 & HTML의 더 많은 용어
응답의 문자 인코딩을 선언하는 HTTP 헤더 매개변수(Content-Type: text/html; charset=utf-8). 문서 내 인코딩 …
::before 및 ::after 의사 요소를 통해 유니코드 이스케이프를 사용하여 생성된 콘텐츠를 삽입하는 …
CSS properties (direction, writing-mode, unicode-bidi) controlling text layout direction. Works with Unicode …
HTML에서 문자를 텍스트로 표현하는 방식. 세 가지 형태: 이름(&), 십진수(&), 16진수(&). HTML …
ECMAScript Internationalization API providing locale-aware string comparison (Collator), number formatting (NumberFormat), date …
유니코드 도메인 이름을 ASCII 호환 인코딩으로 변환하여 xn-- 접두사가 붙은 ASCII 문자열로 …
XML 버전의 숫자 문자 참조: ✓ 또는 ✓. XML에는 명명된 엔티티가 5개(& …
비ASCII 유니코드 문자를 포함하는 도메인 이름으로, 내부적으로는 Punycode(xn--...)로 저장되지만 사용자에게는 유니코드로 표시됩니다. …
U+2060. 줄 바꿈을 방지하는 너비 없는 문자. 너비 없는 줄 바꿈 없는 …
사람이 읽기 쉬운 이름을 사용하는 HTML 엔티티: © → ©, — → …