TaskSet body font-family to 'system-ui, sans-serif' and font-size to 16px. Set code, pre to 'ui-monospace, SF Mono, Consolas, monospace' at 14px.
font-family stacks: system-ui first
75 XP6 min
Theory
What "system-ui" gives you for free
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, "Helvetica Neue", Arial, sans-serif;
}Each entry is a fallback. The browser walks the list left-to-right and uses the first one available.
-apple-system/BlinkMacSystemFontβ San Francisco on Mac/iOS.Segoe UIβ Windows.Robotoβ Android / Chrome OS.Helvetica Neueβ old Mac fallback.Arialβ Windows fallback.sans-serifβ last-resort generic family.
Modern CSS has the shorter system-ui keyword that maps to the OS's native UI font:
body { font-family: system-ui, sans-serif; }That's 2 entries instead of 6, and works on every modern browser.
Why prefer the system font
- Zero download. No FOUT, no CDN hit, no Lighthouse penalty.
- Familiar to the user. Your site feels native to their OS.
- Hinted for the screen. Apple, Microsoft, Google spent millions making these readable at small sizes.
When to ship a custom font
- Brand identity (your logo or a hero headline).
- Specific aesthetic (serif for editorial, mono for code).
- Variable font that does work with one file (next lesson).
For body text on a SaaS product, system-ui is usually the right call.
Generic families
Always end your stack with a generic family:
sans-serifβ Helvetica-styleserifβ Times-stylemonospaceβ Courier-stylesystem-uiβ OS-specific UI fontui-monospaceβ OS-specific mono (SF Mono on Mac, Cascadia on Win, etc.)
π
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.