| name | typography |
| description | Typography-first design - type hierarchy, Fluent principles |
Mike Kruzeniski - Typography
Typography is not decoration - it IS the interface. Type-first design means hierarchy through type alone.
Core Philosophy
Content First
The content is the interface. Chrome (buttons, borders, containers) should be invisible.
Type as UI
Well-designed typography eliminates the need for visual chrome:
- Size creates hierarchy (no boxes needed)
- Weight creates emphasis (no colors needed)
- Space creates grouping (no borders needed)
Metro/Fluent Principles
- Clean, light, fast
- Celebrate typography
- Content over chrome
- Authentically digital (not skeuomorphic)
The Type System
Font Stack
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
'Helvetica Neue', Arial, sans-serif;
--font-mono: 'SF Mono', 'Fira Code', 'Consolas', monospace;
Type Scale
--text-xs: 12px;
--text-sm: 14px;
--text-base: 16px;
--text-lg: 18px;
--text-xl: 20px;
--text-2xl: 24px;
--text-3xl: 30px;
--text-4xl: 36px;
--text-5xl: 48px;
Line Height
--leading-none: 1;
--leading-tight: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.625;
--leading-loose: 2;
Font Weight
--font-normal: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
Letter Spacing
.display { letter-spacing: -0.02em; }
.heading { letter-spacing: -0.01em; }
.body { letter-spacing: 0; }
.small { letter-spacing: 0.01em; }
.caps { letter-spacing: 0.05em; }
Prescriptive Rules
Hierarchy Through Type Alone
<div class="card with-border blue-header">
<h3 class="blue-text">Title</h3>
<p>Content</p>
</div>
<article>
<h3 class="text-xl font-semibold">Title</h3>
<p class="text-base text-gray-600">Content</p>
</article>
Spacing with Type
h2 {
margin-top: 48px;
margin-bottom: 16px;
}
p + p {
margin-top: 16px;
}
Maximum Line Length
.prose {
max-width: 65ch;
}
Text Color
--text-primary: #1f2937;
--text-secondary: #4b5563;
--text-tertiary: #6b7280;
--text-muted: #9ca3af;
Component Typography
Buttons
.button {
font-size: 14px;
font-weight: 500;
letter-spacing: 0.01em;
text-transform: none;
}
Form Labels
.label {
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
margin-bottom: 4px;
}
Navigation
.nav-item {
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
}
.nav-item.active {
font-weight: 600;
color: var(--text-primary);
}
Data Tables
.table-header {
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
}
.table-cell {
font-size: 14px;
font-weight: 400;
}
Review Checklist
Anti-Patterns
| Bad | Why | Fix |
|---|
| 13px body text | Too small, fails accessibility | 16px minimum |
| Full-width paragraphs | Exhausting to read | max-width: 65ch |
| Many font weights | Muddy hierarchy | 3 weights max |
| Pure black text | Harsh, vibrates | Use #1f2937 |
| All caps buttons | Aggressive, dated | Sentence case |
| Decorative fonts | Reduces readability | System fonts |
Kruzeniski Score
| Score | Meaning |
|---|
| 10 | Typography alone creates all hierarchy |
| 7-9 | Mostly type-driven, some unnecessary chrome |
| 4-6 | Relies on boxes/colors instead of type |
| 0-3 | Typography is an afterthought |
Integration
Combine with:
/visual - Visual system that type lives within
/design - Philosophy of "less but better" applies to fonts too
/components - Components built on this type system