On this page
Dark mode can make familiar typography feel unexpectedly dense, bright, or fragile. The letters have not necessarily changed, but their relationship with the surrounding surface has. The solution is not a universal instruction to reduce weight: it is a controlled comparison of contrast, stroke structure, size, and reading conditions.
Measure the text pair before changing the font
Collect the actual foreground and background values for paragraphs, headings, labels, and secondary information. Use the contrast checker to test each pair, including text on raised panels. A passing body-text pair does not establish that a muted caption on another surface is equally readable.
For ordinary text, WCAG AA generally requires 4.5:1 contrast; qualifying large text requires 3:1. Large text has a specific definition, not simply whatever your team calls a heading. Use the WAI contrast guidance for the thresholds and qualifications rather than estimating from screenshots.
Contrast is a necessary check, not a complete reading assessment. A very thin face can remain hard to read despite an adequate measured ratio. Conversely, changing a bright white foreground to a slightly softer neutral may improve comfort for some readers while still retaining strong contrast. Measure again after every adjustment.
Diagnose brightness and apparent stroke weight separately
Light letters on a dark field can appear heavier or more luminous than the same design in a light theme. The effect varies with display, environment, eyesight, and typeface. Treat perceived weight as a hypothesis to test, not proof that dark mode needs a blanket reduction from 400 to 300.
Begin with the same font size and weight as the light theme. If text appears too forceful, first compare the foreground brightness against a slightly softened alternative that still meets the intended contrast target. Then inspect whether stems, counters, and punctuation remain clear at ordinary reading size.
Only adjust weight after isolating those variables. A small change in a variable font may be useful, while dropping an entire named weight can make small text fragile. If the font has only regular and bold, the safest choice may be to preserve both and improve size or spacing instead.
Avoid relying on proprietary font-smoothing rules to make dark text look thinner. Rendering differs across platforms, and such rules are not a portable typography control. Test the font's actual outlines and supported weights. MDN's font-weight reference explains numeric weight behavior and available ranges.
Protect small text and interior detail
Small text is the wrong place to prioritize delicacy. Thin punctuation, narrow apertures, and crowded counters can become difficult to distinguish on a dim display. A slightly larger size or sturdier weight may help more than increasing brightness until the text looks glaring.
Keep essential instructions at a comfortable reading size. Do not make help text simultaneously smaller, lighter, and lower contrast merely because it is subordinate. Establish hierarchy using one or two controlled differences, and retain sufficient prominence for readers to find the information when it becomes relevant.
Line-height and measure also affect the experience. Start by preserving the light theme's paragraph leading, then compare a slightly more open treatment if lines feel visually crowded. There is no universal dark-mode line-height multiplier. Short controls and long paragraphs need different evaluation samples.
If you increase text size, let the layout expand. A fixed-height badge may clip a new size, while a navigation item may wrap unexpectedly. Review those consequences as part of the typography change, not as unrelated component bugs discovered later.
Implement explicit, restrained theme adjustments
Use role-based tokens so text decisions remain visible. Separate primary text from muted text, and keep heading weight distinct from body weight. Avoid a theme rule that changes every descendant's weight; it can flatten emphasis and alter icons or controls that inherit typographic properties.
:root {
color-scheme: light;
--surface: #ffffff;
--text-primary: #202124;
--text-secondary: #555b65;
--body-weight: 400;
--heading-weight: 650;
}
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--surface: #15171b;
--text-primary: #e5e7eb;
--text-secondary: #afb6c2;
}
}
body {
background: var(--surface);
color: var(--text-primary);
font-size: 1rem;
font-weight: var(--body-weight);
line-height: 1.6;
}
h1, h2, h3 { font-weight: var(--heading-weight); }
.secondary-copy { color: var(--text-secondary); }The example deliberately preserves weights between themes. The 650 heading value assumes a face that provides that weight, such as a suitable variable font. If your family only includes 600 and 700, choose an available face rather than expecting a unique intermediate design.
The MDN prefers-color-scheme documentation explains system preference detection. If your product also offers a manual theme switch, make sure its chosen theme controls these same tokens. Otherwise the reading surface and type treatment can follow different settings.
Compare real reading samples across conditions
Build a specimen page with paragraphs, emphasized phrases, headings, timestamps, form hints, validation messages, and disabled controls. Compare the light and dark themes using identical copy. Include characters that reveal shape problems, such as lowercase l, uppercase I, digits, commas, and accented letters.
Test on more than one display, at both normal and low brightness. Check ordinary room lighting as well as dim conditions; dark mode is not used exclusively at night. Ask readers which sample is easier to follow over several paragraphs, not simply which looks more stylish at a glance.
Change one variable at a time and record the reason. “Increase caption size because punctuation disappeared at low brightness” is actionable. “Make dark mode more premium” is not. If only one font family struggles, consider a different text face rather than layering compensating rules indefinitely.
Keep typography decisions connected to the larger theme without turning them into a new palette project. The existing dark-mode design guide covers surrounding color decisions, while design tokens basics helps document stable roles. Recheck contrast whenever those surrounding surfaces change, including overlays and selected states.
Include selected text and keyboard focus in the final review. Selection colors can temporarily replace an otherwise successful text pair, while focus outlines need to remain distinguishable near bright labels. Also inspect bold phrases inside paragraphs: a theme that makes regular text comfortable can still produce distracting patches of heavy emphasis. Preserve the distinction, but judge it within a full sentence rather than as an isolated font specimen. These small states are part of the reading experience, not optional polish.
Key takeaways
- Measure every important foreground and surface pairing.
- Do not assume dark mode requires thinner text.
- Preserve detail in small labels and essential instructions.
- Change brightness, weight, size, and spacing independently.
- Validate the final treatment across displays and reading conditions.
Reach designers & developers at work
Put your product next to the tools people use every day. One sponsor per placement, no tracking pixels.
Become a sponsor