OpenType features
Last updated 2026-11-02
- OpenType
- 特性
- 小型大写
- smcp
- 旧式数字
- 等宽数字
- 连字
On this page
Many fonts carry more than one set of letterforms: a shrunken set of capitals (small caps), digits that are level and digits that step up and down, an fi that joins… These optional shapes are controlled by OpenType features, each with a four-letter tag.
The usual suspects
| Effect | Tag | Default | How to spot it |
|---|---|---|---|
| Standard ligatures | liga |
on | fi, fl joined |
| Discretionary ligatures | dlig |
off | showy ct, st joins |
| Small caps | smcp |
off | capitals at roughly x-height |
| Oldstyle figures | onum |
off | 3, 4, 7, 9 descend below |
| Lining figures | lnum |
on | digits align to cap height |
| Tabular figures | tnum |
off | every digit the same width, columns line up |
| Proportional figures | pnum |
on | widths follow the shapes, better in text |
| Fractions | frac |
off | 1/2 set as a real fraction |
| Super / subscript | sups / subs |
off | footnotes, chemistry |
| Stylistic alternates | salt / ss01–ss20 |
off | a differently drawn letter |
| Localised forms | locl |
per language | same code point, Chinese vs Japanese shapes |
Small caps are not "scaled capitals"
Real small caps are drawn separately: stroke weight matches the capitals, height roughly matches the x-height.
Without them, software may "shrink the capitals" instead — synthetic small caps, with thinner strokes and wrong proportions. If a layout says "small caps", check that the font actually has smcp.
The four combinations of figures
Digits vary along two independent dimensions, often confused:
| Dimension | Two options | Use |
|---|---|---|
| Height | lining / oldstyle | lining aligns to cap height (tables); oldstyle steps up and down (text) |
| Width | tabular / proportional | tabular for columns; proportional for running text |
So "digits in a table" usually means lining + tabular, and "digits in a paragraph" means oldstyle + proportional. Not every font has all four.
Marking it on a layout
Write the tag, not the prose:
Figures: tnum (tables) / onum (body)
Headline: smcp
It maps directly to both CSS and the font's own features. Also note what should happen if the feature is missing — otherwise implementation may quietly ship a synthesised version.
What appears by itself
liga and clig are on by default, so fi usually joins without you doing anything; dlig, smcp, onum, tnum are off and must be asked for.
Which answers a common question: "the layout shows a joined fi, why does my setting not?" If the font has liga and the engine does not enable it, it will not join; if the font lacks it, enabling does nothing.
Chinese-specific ones
| Tag | Effect |
|---|---|
palt |
proportional widths for punctuation (less white space) |
vert / vrt2 |
vertical-writing forms |
locl |
regional forms (Simplified / Traditional / Japanese) |
hwid / twid / fwid |
half / third / full width forms |
palt is genuinely useful in Chinese: default full-width punctuation leaves large gaps on both sides; turning it on tightens things, at the cost of some alignment.
Trying it here
The type preview currently offers size, line height, spacing and alignment; OpenType features are not exposed yet — they are still on the type tester's to-do list (docs/backlog.md).
To check whether a font has a feature, look at its GSUB / GPOS capabilities or try it in the preview.
Further reading
- OpenType spec: the feature tag registry
- MDN:
font-variant-*,font-feature-settings - This site: GSUB / GPOS, font-feature-settings and font-variant