Prose
Add .prose to any container to give headings and paragraphs
consistent vertical spacing.
Headings
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
<div class="prose">
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<h6>Heading 6</h6>
</div>
Lead
An <hgroup> pairs a heading with a muted subtitle.
Any <p> inside is automatically dimmed.
Tasks
Here's a list of your tasks for this month.
<hgroup>
<h2>Tasks</h2>
<p>Here's a list of your tasks for this month.</p>
</hgroup>
Paragraphs
Jazz is a minimal CSS design system. It styles native HTML elements directly — no class names required for most components.
Drop in the stylesheet and start writing semantic HTML. The defaults are sensible, and everything is customizable via CSS variables.
<div class="prose">
<p>First paragraph.</p>
<p>Second paragraph.</p>
</div>
Lists
There are a few points to note regarding this.
- It is a long established fact that a reader will be distracted by the readable content of a page.
- There are many variations of passages of Lorem Ipsum available.
- The majority have suffered alteration in some form.
<div class="prose">
<p>There are a few points to note.</p>
<ul>
<li>First item.</li>
<li>Second item.</li>
<li>Third item.</li>
</ul>
</div>
Follow these steps to get started.
- Import the stylesheet into your project.
- Write semantic HTML as you normally would.
- Override CSS variables to match your brand.
<div class="prose">
<p>Follow these steps to get started.</p>
<ol>
<li>Import the stylesheet into your project.</li>
<li>Write semantic HTML as you normally would.</li>
<li>Override CSS variables to match your brand.</li>
</ol>
</div>
Blockquote
"Design is a funny word. Some people think design means how it looks. But of course, if you dig deeper, it's really how it works."
<blockquote>
"Design is a funny word. Some people think design means how it looks. But of
course, if you dig deeper, it's really how it works."
<footer>
<cite>— Steve Jobs</cite>
</footer>
</blockquote>
Spacing
Vertical spacing between elements is controlled by
--jazz-typography-spacing, which defaults to
.61em.
:root {
--jazz-typography-spacing: 0.61em;
}
Article example
A realistic mix of all prose elements together.
The Case for Plain HTML
Why writing semantic markup still matters in 2025.
There is a quiet movement happening at the edges of the web. Developers, exhausted by ever-growing dependency trees, are rediscovering a simple truth: the browser already knows how to do most things.
Start with the right element
Semantic HTML is not a relic. Elements like <article>,
<nav>, and <details> carry meaning
that a <div> never can. Screen readers, search engines,
and browser devtools all benefit.
- Use
<button>for actions,<a>for navigation. - Reach for
<details>before writing a toggle component. - Let the browser handle focus management wherever possible.
Progressive enhancement
Build a solid HTML foundation first, then layer on styles and behaviour. A form that works without JavaScript is more resilient than one that requires three npm packages to render.
- Write the HTML structure.
- Add CSS for visual polish.
- Sprinkle JavaScript only where interaction cannot be avoided.
"The web is agreement. Every time you use a standard element you are contributing to a shared contract between authors and browsers."
A note on accessibility
Accessible markup is not extra work added at the end. It is the natural result of writing HTML the way it was designed to be written.
<div class="prose">
<hgroup>
<h1>The Case for Plain HTML</h1>
<p>Why writing semantic markup still matters in 2025.</p>
</hgroup>
<p>
There is a quiet movement happening at the edges of the web. Developers,
exhausted by ever-growing dependency trees, are rediscovering a simple
truth:
<a href="#">the browser already knows how to do most things</a>.
</p>
<h2>Start with the right element</h2>
<p>
Semantic HTML is not a relic. Elements like <code><article></code>,
<code><nav></code>, and <code><details></code> carry meaning
that a <code><div></code> never can.
</p>
<ul>
<li>Use <code><button></code> for actions.</li>
<li>Reach for <code><details></code> before writing a toggle.</li>
<li>Let the browser handle focus management.</li>
</ul>
<h2>Progressive enhancement</h2>
<ol>
<li>Write the HTML structure.</li>
<li>Add CSS for visual polish.</li>
<li>Sprinkle JavaScript only where necessary.</li>
</ol>
<blockquote>
"The web is agreement."
<footer><cite>Jeremy Keith</cite></footer>
</blockquote>
<h3>A note on accessibility</h3>
<p>
Accessible markup is not extra work. It is the natural result of writing
HTML the way it was designed to be written.
</p>
</div>