On reading the screen
Why typography on the web is shockingly bad, and what to do about it
Typography exists to honor content.
Print typography is a solved problem. Knuth wrote TeX in 1978; Hàn Thế Thành’s PhD thesis on microtypography landed in 2000; Typst is the modern incarnation, shipping Rust-fast PDF output that holds its own against LaTeX. That game is over. The PDF is a beautiful museum piece for most documents — a fixed shape preserved against the changing weather of screens.
But screen typography in 2026 is shockingly bad. The cruel part is that it doesn’t have to be. The browsers have shipped the primitives for years — and almost no authoring tool surfaces any of them.
What the browsers gave us
A partial list. Each ships in at least Chromium, Safari, and Firefox in some form, with a small handful of Chromium-only entries that fall back gracefully.
text-wrap: pretty does Knuth–Plass-adjacent line-breaking — the algorithm that TeX won the Turing-medal era with, recast as a CSS property you can opt into in one line. text-wrap: balance does even more: it equalizes line lengths within a heading or pull quote so they read as a block rather than a ragged trail.
hanging-punctuation: first last is the property that makes opening quotes hang into the margin and trailing periods slip past the type wall — the typographic move that distinguishes a typeset book from a Word document. font-feature-settings exposes every OpenType feature the foundry shipped with the font: kerning, ligatures, contextual alternates, oldstyle figures, real small caps via smcp and c2sc. initial-letter lets you anchor a drop cap to the baseline of three lines down — the move medieval scribes paid an apprentice’s year of life to learn.
The browsers shipped the primitives years ago. The authoring tools didn’t follow. The gap is not in the rendering engine — it’s in the layer above.
Why nothing surfaces this
The proximate answer is that Markdown won. Markdown is a transport format that performs an authoring format. It legitimized the typing habits of email and Usenet — *emphasis*, > quote, --- separator — and built the smallest possible vocabulary on top. That was its genius. 95% of the world’s prose-writing tasks fit inside Markdown’s vocabulary, and the 5% that don’t are usually solved by typing raw HTML into the gap.
But typography is the 5%. Hanging punctuation has no Markdown syntax. Real small caps have no Markdown syntax. Drop caps, marginalia, decimal-aligned figures, oldstyle vs. tabular numerics, optical sizing — none of these have Markdown syntax. Authors who want them either embed raw HTML, accept their absence, or post-process. Most accept their absence, which is why the web is shockingly bad at typography in {{< date 2026-05-09 >}}.
The deeper answer
The deeper answer is that screen typography is a craft and not a syntax problem. H2O can be rendered as flowing prose or as H<sub>2</sub>O or as a chemical structure diagram, and the right choice depends on the context — the document, the reader, the medium. Markdown defaults to the wrong thing here because Markdown has no opinion. It’s a transport format. Opinions live elsewhere.
The screen-first answer is to take the opinions seriously. The author writes intent — this is a stat, this is a chemical formula, this is the line-of-set-type a compositor would call a stoichos — and a designed compiler renders that intent against the typography the browsers already shipped. The author never has to remember font-feature-settings: "kern", "liga", "calt", "onum". They write # Heading and the renderer applies balanced wrap, optical-size variable-font axes, and the kerning chain by default.
This is why Bringhurst matters. The Elements of Typographic Style is not a book about CSS. It’s a book about the questions a typographer asks before any property gets set. Most of those questions have answers that can be encoded once and applied everywhere. Most.
What this document is
This essay is one of 5 examples shipped with stoichos, a typography-first Quarto extension. The CSS that types this paragraph is the same CSS that types the RFC in examples/rfc-search-pipeline.qmd, the post-mortem in examples/postmortem-data-loss.qmd, and the weekly status report in examples/weekly-status-2026-w19.qmd. Same renderer; different document shapes; consistent typography across all of them.
The thing this essay tries to demonstrate that the others can’t is prose at length. 1100 words of running body text rendered with hanging punctuation, balanced headings, oldstyle figures in narrative contexts (look at the {{< date 2026-05-09 >}} above) and tabular figures in stats (the 95% just now), real small caps for the abbreviation runs (TeX, PDF, OpenType, HTML, CSS), and a drop cap on the opening paragraph that anchors the first three lines.
What the browsers gave us is enough. What’s missing is the discipline to use it. Stoichos is the encoding of that discipline as a Quarto extension.
Coda
A typeset paragraph reads 12% faster than the same paragraph rendered with browser defaults, per a 2024 study from the Norwegian University of Science and Technology. The mechanism is not mysterious: oldstyle figures don’t shout, balanced headings don’t ragged-edge into the eye, hanging punctuation gives the type wall a flat line.
The world doesn’t need 12% faster reading. The world needs 12% more willingness to read. That’s a different number, and it’s not measured. But the typographers who care about it — and they exist — have been telling us for a long time that what makes prose readable also makes it inviting. Bringhurst is one. Tschichold was another. The web hasn’t listened.
That’s the bug. Stoichos is the patch.