The Page as a Made Thing
On learning to see, and why HTML is a surprisingly good place to start.
There is a moment, when reading a well-made book, where you stop noticing the type. The words arrive cleanly, one after another, and the page seems to disappear. You are simply reading. That invisibility is not an accident. It is the result of hundreds of small decisions — about typeface, spacing, margins, hierarchy, rhythm — made so carefully that none of them call attention to themselves.
This book is about learning to make those decisions.
It is also, unavoidably, about learning to see them. The two go together. Before you can set type well, you have to be able to look at a page and know what is wrong with it — and more importantly, why. That kind of seeing is a skill, and like most skills, it feels mysterious until it doesn't. At some point it becomes second nature. You'll find yourself reading a restaurant menu and noticing the letter-spacing. You'll pick up a novel and feel, before you've read a word, whether the typographer did their job. This is not a curse. It is, most designers will tell you, one of the quiet pleasures of the craft.
· · ·Why HTML and Paged.js
For most of its history, professional typesetting has lived behind expensive software and a steep learning curve. If you wanted to produce a book that looked like a book — with proper margins, running headers, controlled page breaks, a considered grid — you learned InDesign. There wasn't much of an alternative.
That has changed.
CSS has matured into a genuinely powerful typographic tool. Web fonts have made serious typefaces accessible to everyone. And Paged.js — a free, open-source library — has quietly filled the last remaining gap, bringing the precision of print layout to HTML and CSS. Today it is possible to typeset a book, a journal, a report, or an academic paper entirely in a text editor, and export it as a PDF that a professional printer will accept without complaint.
This matters for several reasons. If you already know HTML and CSS, you are closer to professional-grade typesetting than you might think — you simply need to learn to apply what you know with more intention. The toolchain is open and free. The workflow is text-based, which means it plays well with version control, automation, and collaboration. And unlike proprietary software, it doesn't lock your documents into a format that future software may not open.
But the deeper reason is this: learning to typeset in HTML forces you to be explicit about every decision. There is no drag-and-drop, no nudging things until they look right. You have to name what you want. That constraint turns out to be a surprisingly good teacher.1
· · ·What this book covers
We begin, before touching any code, with design fundamentals — the principles that underlie every good page, regardless of medium or tool. Composition, contrast, balance, color, visual hierarchy. These are not abstract concepts. They are the difference between a page that works and one that doesn't, and understanding them changes how you see everything you read.
From there we move into typography — the heart of the book. Choosing typefaces, building a type scale, establishing rhythm and spacing, working with OpenType features, understanding what makes text readable at length. Typography is where most of the meaningful decisions happen, and we spend time here accordingly.
Then layout and grid — how to give a page structure, how margins and columns create a spatial logic that the reader feels even when they can't name it. And finally, Paged.js itself: the @page rule, running headers and footers, page numbers, controlling breaks, generating print-ready PDFs.2
Throughout, we build a single project together: a short book called The Compositor's Garden, by the fictional Eleanor Voss. We start with a bare, unstyled HTML document. By the end, we have a complete, professionally typeset book — every decision made consciously, every element understood. Part Five then applies that same understanding to other document types: reports, editorial layouts, academic papers.
· · ·What this book assumes
You should be comfortable with HTML and CSS — not expert-level, but familiar. You know what a div is. You've written a CSS rule. You've probably built a webpage or two. Beyond that, no prior design knowledge is assumed. If you've never thought about type before, this book starts from the beginning. If you have some design background, you'll find the early chapters move quickly and the later ones go deep.
What this book does not assume is that you have access to expensive software, a design degree, or years of experience. It assumes curiosity, patience, and a willingness to look carefully at things. That's enough.
· · ·A note on taste
Design involves judgment, and judgment is personal. Throughout this book I'll make recommendations and express preferences. Some of them you'll disagree with, and that's as it should be. The goal isn't to hand you a set of rules to follow mechanically — it's to give you a foundation from which to make your own considered decisions.
The best typographers have strong opinions. They also know when to break their own rules. You'll get there. For now, it helps to have somewhere to start.
· · ·The rules of typography are not arbitrary. They are the residue of centuries of reading — patterns worn into practice by the accumulated experience of everyone who has ever set type and everyone who has ever read it.
— Robert Bringhurst, The Elements of Typographic Style
Setting up your environment
Before we begin, a few things to get in place. You'll need a text editor — anything you're comfortable with, though something with syntax highlighting makes life easier. You'll need a modern browser; Chrome or Chromium gives the most reliable Paged.js output. And you'll need Paged.js itself, which we'll set up at the start of Part Four.
The complete project files for The Compositor's Garden are included with this book — you can browse the source, open the HTML preview, and build the PDF directly. Whenever you see a reference to a project file in the text, that is the file you are looking at. I'd encourage you to type the code yourself rather than copy it. The friction is useful.
When you're ready, turn the page. There's a lot of good work ahead.