Progressive disclosure with HTML

Robin penned a little love letter to the details element. I agree. It is a joyous piece of declarative power.

That said, don’t go overboard with it. It’s not a drop-in replacement for more complex widgets. But it is a handy encapsulation of straightforward progressive disclosure.

Just last week I added a couple of more details elements to The Session …kind of. There’s a bit of server-side conditional logic involved to determine whether details is the right element.

When you’re looking at a tune, one of the pieces of information you see is how many recordings there of that tune. Now if there are a lot of recordings, then there’s some additional information about which other tunes this one gets recorded with. That information is extra. Mere details, if you will.

You can see it in action on this tune listing. Thanks to the details element, the extra information is available to those who want it, but by default that information is tucked away—very handy for not clogging up that part of the page.

<details>
<summary>There are 181 recordings of this tune.</summary>
This tune has been recorded together with
<ul>
<li>…</li>
<li>…</li>
<li>…</li>
</ul>
</details>

Likewise, each tune page includes any aliases for the tune (in Irish music, the same tune can have many different titles—and the same title can be attached to many different tunes). If a tune has just a handful of aliases, they’re displayed in situ. But once you start listing out more than twenty names, it gets overwhelming.

The details element rides to the rescue once again.

Compare the tune I mentioned above, which only has a few aliases, to another tune that is known by many names.

Again, the main gist is immediately available to everyone—how many aliases are there? But if you want to go through them all, you can toggle that details element open.

You can effectively think of the summary element as the TL;DR of HTML.

<details>
<summary>There are 31 other names for this tune.</summary>
<p>Also known as…</p>
</details>

There’s another classic use of the details element: frequently asked questions. In the case of The Session, I’ve marked up the house rules and FAQs inside details elements, with the rule or question as the summary.

But there’s one house rule that’s most important (“Be civil”) so that details element gets an additional open attribute.

<details open>
<summary>Be civil</summary>
<p>Contributions should be constructive and polite, not mean-spirited or contributed with the intention of causing trouble.</p>
</details>

Have you published a response to this? :

Responses

Arpit

@adactio Hey Jeremy, I really enjoyed reading your article. Thanks for sharing.

Also, it looks like you linked to the same tune (The Maid Behind The Bar) when you meant to compare it with some other tune.

# Posted by Arpit on Monday, April 17th, 2023 at 9:24am

3 Shares

# Shared by Sam Minnée on Saturday, April 15th, 2023 at 7:54am

# Shared by Martin Grubinger on Saturday, April 15th, 2023 at 8:57am

# Shared by Arpit on Monday, April 17th, 2023 at 9:33am

7 Likes

# Liked by Emma Builds 🚀 on Saturday, April 15th, 2023 at 7:54am

# Liked by Toby on Saturday, April 15th, 2023 at 8:22am

# Liked by Jono Ferguson on Saturday, April 15th, 2023 at 8:22am

# Liked by Martin Grubinger on Saturday, April 15th, 2023 at 8:57am

# Liked by Chris Taylor on Saturday, April 15th, 2023 at 8:57am

# Liked by Danilo Vega on Saturday, April 15th, 2023 at 10:33am

# Liked by Alan Dalton on Saturday, April 15th, 2023 at 11:30am

Related posts

A web font strategy

How I’m prioritising performance when it comes to typography on The Session.

The datalist element on iOS 26

Once again, Safari has fucked up its implementation.

Progressively enhancing maps

How I switched to high-resolution maps on The Session without degrading performance.

Train coding

Generating a static copy of The Session from the comfort of European trains.

Preventing automated sign-ups

Here’s a bit of PHP I’m using on The Session.

Related links

abc to SVG | CSS-Tricks

Aw, this is so nice! Chris points to the way that The Session generates sheet music from abc text:

The SVG conversion is made possible entirely in JavaScript by an open source library. That’s the progressive enhancement part. Store and ship the basic format, and let the browser enhance the experience, if it can (it can).

Here’s another way of thinking of it: I was contacted by a blind user of The Session who hadn’t come across abc notation before. Once they realised how it worked, they said it was like having alt text for sheet music! 🤯

Tagged with

Two Paradigms for Enhancing HTML Tags | That HTML Blog

This really gets to the heart of one of the biggest benefits of HTML web components: composability. You can nest your regular markup inside multiple custom elements; something that is can’t do.

The other exciting approach doesn’t exist yet: custom attributes. Again, they’d be a great way of using composability to turbo-charge your existing HTML in all sorts of ways.

Tagged with

Alistair Davidson / validation-enhancer · GitLab

Here’s another nice progressive web component for your forms, this time for showing error messages.

Tagged with

Never Lose Form Progress Again :: Aaron Gustafson

Here’s an excellent progressive web component from Aaron—wrap a custom element around your exising form and your good to go:

At its core, form-saver is a small web component that wraps a form, keeps an eye on it, stores values in localStorage, and restores them when the page loads again. Better yet, it clears out saved data after a successful submission so you’re not accidentally resurrecting stale information the next time someone stops by.

Tagged with

Progressive Web Components | Ariel Salminen

I’m slapping my forehead—progressive web components is a perfect name for what I’ve been calling HTML web components. Why didn’t I think of that?

A Progressive Web Component is a native Custom Element designed in two layers: a base layer of HTML and CSS that renders immediately, without JavaScript, and an enhancement layer of JavaScript that adds reactivity, event handling, and more advanced templating.

Tagged with

Previously on this day

8 years ago I wrote The audience for Going Offline

A book about service workers that doesn’t assume any prior knowledge of JavaScript.

11 years ago I wrote 100 words 024

Day twenty four.

11 years ago I wrote Hope

Judicious hope.

20 years ago I wrote Dichotomy

Not everything is black and white.

21 years ago I wrote Mo betta selecta

Aaron Gustafson is one smart cookie.

21 years ago I wrote Fixed fashion

Slap your PayPal payment down for the latest issue of Design In Flight, the PDF magazine for design professionals and web developers.

23 years ago I wrote Safari Public Beta 2

There’s a new Public Beta of Safari available for download.

24 years ago I wrote The grocer's apostrophe

While I was in town earlier today, I spotted these stickers posted up on every available surface.