Skip to main content

Typography

How text is set: roles, sizes and line height.

display24px · 1.2 · 600Open alerts
title20px · 1.2 · 600Open alerts
heading16px · 1.2 · 600Alert ALR-2043
body14px · 1.45 · 400A security analyst opens the alert queue at 8:00 and scans 200 rows for escalated threats.
label12px · 1.2 · 500Investigate
caption12px · 1.45 · 400A security analyst opens the alert queue at 8:00 and scans 200 rows for escalated threats.
data13px · 1.45 · 400Open alerts 142 · Escalated 7 · Model precision 96.4% · Mean time to contain 38 min

The five answers​

QuestionAnswerWhy
Which text roles does it need?Core and dataA data role keeps numbers in aligned columns.
How many steps does the type scale take?Only the steps the screens needA screen full of records stays calm with only the sizes it needs.
How are sizes and line heights defined?A ratio, line heights in proportionLine height is a ratio of each text's own size, so it follows the text. Two steps: tight for headings and labels, open for body, data and captions.
How large is body text?SmallSmall body text fits more rows on the screen.
Where does type do the most work?Tables and inputsMost text sits in table cells and inputs.

Tokens​

Each token points to another token. Values live only on primitives, below.

TokenPoints to
type.display.font-familydense-data.theme.base.type.display.font-family → font.family.ibm-plex-sans
type.display.font-sizefont.size.24
type.display.line-heightfont.line-height.1_2
type.display.font-weightfont.weight.600
type.title.font-familydense-data.theme.base.type.title.font-family → font.family.ibm-plex-sans
type.title.font-sizefont.size.20
type.title.line-heightfont.line-height.1_2
type.title.font-weightfont.weight.600
type.heading.font-familydense-data.theme.base.type.heading.font-family → font.family.ibm-plex-sans
type.heading.font-sizefont.size.16
type.heading.line-heightfont.line-height.1_2
type.heading.font-weightfont.weight.600
type.body.font-familydense-data.theme.base.type.body.font-family → font.family.ibm-plex-sans
type.body.font-sizefont.size.14
type.body.line-heightfont.line-height.1_45
type.body.font-weightfont.weight.400
type.label.font-familydense-data.theme.base.type.label.font-family → font.family.ibm-plex-sans
type.label.font-sizefont.size.12
type.label.line-heightfont.line-height.1_2
type.label.font-weightfont.weight.500
type.caption.font-familydense-data.theme.base.type.caption.font-family → font.family.ibm-plex-sans
type.caption.font-sizefont.size.12
type.caption.line-heightfont.line-height.1_45
type.caption.font-weightfont.weight.400
type.data.font-familydense-data.theme.base.type.data.font-family → font.family.ibm-plex-mono
type.data.font-sizefont.size.13
type.data.line-heightfont.line-height.1_45
type.data.font-weightfont.weight.400

The raw values these tokens end at are on Primitives › Type.

When to use what​

SituationUseNotWhy
Page titletype.titletype.displayTitles stay small so the table starts higher on the screen.
A number in a tabletype.datatype.bodyMono digits line up in columns, so values compare at a glance.
Paragraph or help texttype.bodytype.labelHelp text is a sentence read in passing. Body size reads quickly; the label style is made for short names, not sentences.
Field label or column headertype.labeltype.headingHeaders repeat on every column; a heavy style would compete with the data.