Skip to Content

2025.05.29

Systemic Typography

Approaches to typographic implementations inside design systems.

  • Use as classes – or event data attribs if you want – on native elements
  • Also on custom components
  • Map component prop variations to the classes as well
  • Core system and extentions
// CSS Only Typography
:root {
	--text-scale-1: var(--some-value);
	--text-scale-2: var(--some-value);
	--text-scale-3: var(--some-value);
	--text-scale-4: var(--some-value);
}

// global.css
@layer type {
	.headline {
		font-size: var(--text-scale-3);
		…
	}
	.subhead {
		font-size: var(--text-scale-2);
		…
	}
	.body {
		font-size: var(--text-scale-1);
		…
	}
}

// local.css
@layer type {
	.headline {
		font-size: var(--text-scale-4);
		…
	}
	.subhead {
		font-size: var(--text-scale-3);
		…
	}
	.subsubhead {
		font-size: var(--text-scale-2);
		…
	}
	.body {
		font-size: var(--text-scale-1);
		…
	}
}

// Tailwind Only Typography

// global.css
@layer type {
	.headline {
		@apply font-size-300;
		@apply font-weight-400;
		@apply leading-tight;
		@apply tracking-loose;
		@apply text-color-off-black;
	}
	.subhead {
		@apply font-size-200;
		@apply font-weight-600;
		@apply leading-tight;
		@apply text-color-off-black;
	}
}

// local.css
@layer type {
	.headline {
		@apply font-size-600;
	}
	.subhead {
		@apply font-size-300;
		@apply font-weight-400;
	}
	.subsubhead {
		@apply font-size-200;
		@apply font-weight-600;
		@apply leading-tight;
		@apply text-color-off-black;
	}
}

// In use;

<Text 
	className="headline" 
	as="h1">
	Cool Headline
</Text>

<h2 class="subhead">
	With a Subhead
</h2>

<p class="body">
	Lorem ipsum…
</p>

// Migration:

<Text 
	fontSize=300
	fontWeight=600>
	Old Style
</Text>

<Text 
	as="h1"
	className="headline">
	New Style
</Text>

Elsewhere

css
design-systems

© 2026