Skip to main content

Presets

Target Element

Ligatures

Common Ligaturesfi, fl, ff, ffi (liga)
Discretionary Ligaturesst, ct, sp (dlig)
Historical Ligaturesſt (hlig)
Contextual AlternatesSmart substitutions (calt)

Figures / Numbers

Lining Figures1234567890 (lnum)
Oldstyle FiguresVarying heights (onum)
Proportional FiguresVariable width (pnum)
Tabular FiguresFixed width for tables (tnum)
Slashed ZeroØ vs 0 (zero)

Small Capitals

Small CapsLowercase to small caps (smcp)
Caps to Small CapsAll text to small caps (c2sc)
Petite CapsSmaller small caps (pcap)
UnicaseMixed case forms (unic)

Stylistic Features

Stylistic Set 1Font-defined alternates (ss01)
Stylistic Set 2(ss02)
Stylistic Set 3(ss03)
Stylistic AlternatesGeneral alternates (salt)
SwashDecorative forms (swsh)
OrnamentsDecorative elements (ornm)

Positional Features

Fractions1/2 → ½ (frac)
Ordinals1st, 2nd, 3rd (ordn)
Superscriptx² (sups)
SubscriptH₂O (subs)

Other Features

KerningLetter spacing (kern)
Case-Sensitive SpacingPunctuation adjustments (case)
Horizontal KanaJapanese horizontal forms (hkna)
Vertical KanaJapanese vertical forms (vkna)

Custom Features

Add additional OpenType features (comma-separated)

Output Options

Live Preview

Office 1/2 fraction fi fl ff ffi No. 1st 2nd 3rd 0123456789
Without Features
Office 1/2 fraction fi fl ff ffi No. 1st 2nd 3rd 0123456789
With Features
Office 1/2 fraction fi fl ff ffi No. 1st 2nd 3rd 0123456789

Generated CSS

.opentype-text {
  font-variant-ligatures: no-discretionary-ligatures;
}

Feature Demonstrations

Ligatures

Off:fi fl ff ffi office
On:fi fl ff ffi office

Figures

Lining:0123456789
Oldstyle:0123456789

Fractions

Off:1/2 3/4 1/4 5/8
On:1/2 3/4 1/4 5/8

Slashed Zero

Normal:O0 0x1A 10
Slashed:O0 0x1A 10

Examples

Body Text Typography

body {
  font-variant-ligatures: common-ligatures;
  font-variant-numeric: oldstyle-nums;
  font-kerning: normal;
}

Data Tables

table {
  font-variant-numeric:
    lining-nums
    tabular-nums
    slashed-zero;
}

Headings with Small Caps

h1, h2, h3 {
  font-variant-caps: small-caps;
  font-variant-ligatures:
    common-ligatures
    discretionary-ligatures;
  letter-spacing: 0.05em;
}

Scientific Text

.scientific {
  font-variant-numeric:
    lining-nums
    tabular-nums
    diagonal-fractions
    slashed-zero;
  font-feature-settings:
    "sups" 1, "subs" 1;
}

Code Blocks

code, pre {
  font-variant-ligatures: none;
  font-variant-numeric:
    lining-nums
    tabular-nums
    slashed-zero;
  font-feature-settings:
    "calt" 1, "ss01" 1;
}

Decorative Display

.display-heading {
  font-variant-ligatures:
    common-ligatures
    discretionary-ligatures
    historical-ligatures;
  font-feature-settings:
    "swsh" 1, "salt" 1;
}

CSS Variables for Typography

:root {
  --body-features:
    "liga" 1, "calt" 1, "onum" 1;
  --heading-features:
    "liga" 1, "smcp" 1;
  --data-features:
    "tnum" 1, "lnum" 1, "zero" 1;
}

.body {
  font-feature-settings: var(--body-features);
}
.heading {
  font-feature-settings: var(--heading-features);
}
.data {
  font-feature-settings: var(--data-features);
}

Progressive Enhancement

.text {
  /* Fallback */
  font-feature-settings:
    "liga" 1, "onum" 1;

  /* Modern browsers */
  @supports (font-variant-ligatures: common-ligatures) {
    font-variant-ligatures: common-ligatures;
    font-variant-numeric: oldstyle-nums;
    font-feature-settings: unset;
  }
}

Reference

OpenType Feature Tags

TagFeatureDescription
ligaStandard Ligaturesfi, fl, ff, ffi, ffl
dligDiscretionary Ligaturesst, ct, sp
hligHistorical Ligaturesſt, ct
caltContextual AlternatesSmart substitutions
lnumLining FiguresUniform height numbers
onumOldstyle FiguresVarying height numbers
pnumProportional FiguresVariable width numbers
tnumTabular FiguresFixed width numbers
smcpSmall CapitalsLowercase → small caps
c2scCaps to Small CapsAll text → small caps
fracFractions1/2 → ½
ordnOrdinals1st, 2nd, 3rd
supsSuperscriptx², footnotes
subsSubscriptH₂O
zeroSlashed Zero0 vs O
kernKerningPair adjustments
ss01-ss20Stylistic SetsFont-specific alternates
saltStylistic AlternatesGeneral alternates
swshSwashDecorative forms

font-variant-* Properties

PropertyValues
font-variant-ligaturesnone | common-ligatures | no-common-ligatures | discretionary-ligatures | no-discretionary-ligatures | historical-ligatures | contextual | no-contextual
font-variant-numericlining-nums | oldstyle-nums | proportional-nums | tabular-nums | diagonal-fractions | stacked-fractions | ordinal | slashed-zero
font-variant-capssmall-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps
font-kerningauto | normal | none
font-variant-alternatesstylistic() | styleset() | swash() | ornaments() | annotation()

Browser Support

PropertyChromeFirefoxSafariEdge
font-feature-settings16+34+9.1+15+
font-variant-ligatures34+34+9.1+79+
font-variant-numeric52+34+9.1+79+
font-variant-caps52+34+9.1+79+
font-kerning33+32+9.1+79+

Best Practices

  • Use font-variant-* properties when possible (better readability)
  • Use font-feature-settings for features not in font-variant-*
  • Test with fonts that support OpenType features
  • Use tabular figures for data alignment
  • Use oldstyle figures for body text
  • Disable ligatures in code blocks
  • Enable slashed zero for code and data
  • Small caps work best with fonts that have true small caps
  • Check font documentation for available stylistic sets

Fonts with Good OpenType Support

  • Serif: Minion Pro, Garamond Premier Pro, Adobe Caslon Pro
  • Sans-Serif: Open Sans, Lato, Source Sans Pro, Inter
  • Monospace: Fira Code, JetBrains Mono, Cascadia Code
  • Display: Playfair Display, Libre Baskerville

Rate this tool