OpenType features

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