In Praise of HTML and CSS

html
css
engineering
the right tool
startup
Author

Mike McCourt

Published

December 14, 2025

The web was designed for documents, and the combination of HTML and CSS still represents that idea at its purest: structure and style, clearly defined and beautifully separate.

Introduction — The Underestimated Classics

HTML and CSS aren’t new. They were built by people who needed to solve the real problem of how to mark up, style, and share documents over a network. After decades of iteration, they remain the best solution to that problem.

Like SQL for data or Clojure for logic, HTML + CSS are declarative, composable, and enduring — elegant tools that reward clarity, not limitations to be abstracted away.

A Precursor: (La)TeX

Before I ever wrote web pages, I wrote scientific papers — in LaTeX. LaTeX separates markup from presentation just as the web does. You write a paper once, describing its content and structure, and select a style file that decides how it looks.

If you submit to The Astrophysical Journal, you load their style file and instantly have an ApJ paper: the typeface, page layout, headers, equations, and citations all match the ApJ style. If you hop the pond and change the style file to Monthly Notices of the Royal Astronomical Society, everything shifts: your centered equations flush left, and the margins, fonts, bibliography format, and paper size all become distinctly British. (It won’t change the spelling for you, however; the editor will make you replace every instance of color with “colour.”)

Later, when you fold that paper into your dissertation, it’s another style file swap.

The content never changes — only its presentation.

That separation is what makes the document portable, maintainable, and semantically clear. The source says what is present — section, caption, equation — while the style determines how it’s displayed. The how may vary by context; the what never does.

The Web’s Separation of Concerns

HTML and CSS inherit this same brilliance. HTML describes structure using semantic units such as headings, lists, quotations, figures, captions, or navigation. CSS describes presentation: the layout, color, motion, and rhythm.

Because those concerns remain distinct, the web can still serve many audiences at once. A screen reader, a phone browser, and a search crawler can all parse the same page and extract exactly what they need. The structure is explicit, and because it’s explicit, it’s accessible.

That separation also makes web pages maintainable and robust. You can redesign a site without touching its content, or rewrite the content without worrying about layout. It’s the same idea that made TeX last.

How Frameworks Try to Hide It

New frameworks have layered abstractions on top of HTML and CSS. The intention is understandable, but the cost is real — it blurs the original separation of concerns that make HTML and CSS so powerful. Markup becomes entangled with logic. Styles live in scripts. Accessibility and semantics become afterthoughts.

This can risk the very properties that made the web universal: transparency, portability, and graceful degradation. HTML and CSS are already abstractions — carefully designed ones. Adding more abstraction isn’t automatically progress — it needs to earn its keep.

Leaning Into the Foundations

At Sturdy Statistics, we’ve found that embracing “plain” HTML + CSS makes our platform simpler and faster.

  • Pages load quickly and payloads stay small.
  • They render gracefully on old hardware and slow networks.
  • We keep full control over semantics and accessibility.

Modern CSS has matured into a genuinely expressive design language. Flexbox, Grid, variables, transitions, and @media queries can achieve most layouts and animations with no JavaScript at all.

It’s astonishing how much you can build with zero frameworks and a few hundred well-written lines of CSS. (If you want to see an example, you can check out our Flashpaper site.)

When (and How) We Use JavaScript

We’re not anti-JavaScript — we’re just intentional about scope.

We use it where it shines: for interactivity, state, and user-driven behavior. But we add it around a well-structured document, not instead of one.

What We’ve Learned

Whether in Clojure, SQL, LaTeX, or HTML + CSS, we’ve found that the older declarative systems — the ones designed by people who had to get it right — are often the most reliable foundations for building something new.

The modern web runs on layers of abstraction, but sometimes the best layer is still the one closest to the metal: a clean HTML document and a well-written stylesheet. You might be surprised how far that can take you.

Postscript

I need to confess a half-truth in this post: while I do appreciate HTML, I rarely write it raw anymore. Since discovering Hiccup, I’ve written structured web documents directly in Lisp. The Lisp syntax feels like the natural dual of HTML. I like the HTML standard; I just prefer writing it in Lisp rather than XML.