::details-content: style expandable content without wrapper divs

The ::details-content pseudo-element lets you style the expandable content of details elements separately from the summary, no divs needed.

Trevor I. Lasn Trevor I. Lasn
· 2 min read
Building 0xinsider.com, the intelligence layer for prediction markets. Discover what's moving, see who's behind it, and find the edge before the crowd.

The ::details-content pseudo-element solves a problem that existed since <details> was introduced: you couldn’t style the content area without wrapping it in a div.

The problem: you want the summary and content to look different, so you’d need to add a wrapper div just for styling:

<!-- The old way: wrapper required for styling -->
<details>
<summary>How do I return an order?</summary>
<div class="content-wrapper">
<p>
Visit your order page and click "Return Item". You'll receive a prepaid
shipping label via email within 24 hours.
</p>
</div>
</details>
details::summary {
padding: 1rem;
background: white;
}
.content-wrapper {
padding: 1rem;
background: #f9fafb;
border-top: 1px solid #e5e7eb;
}

Now with ::details-content, forget the wrapper:

<!-- Clean HTML, no wrapper needed -->
<details>
<summary>How do I return an order?</summary>
<p>
Visit your order page and click "Return Item". You'll receive a prepaid
shipping label via email within 24 hours.
</p>
</details>
details::summary {
padding: 1rem;
background: white;
}
details::details-content {
padding: 1rem;
background: #f9fafb;
border-top: 1px solid #e5e7eb;
}

Here’s what that looks like in action:

How do I return an order?

Visit your order page and click "Return Item". You'll receive a prepaid shipping label via email within 24 hours. Ship the item back in original condition.

What's your return window?

We accept returns within 30 days of purchase. Items must be unused, in original packaging, and have the original receipt or proof of purchase.

Do you offer refunds or exchanges?

You can choose between a full refund or an exchange for a different size or color. Refunds are processed within 5-7 business days after we receive your return.

What if my item arrives damaged?

Contact our support team immediately with photos of the damage. We'll send a replacement at no cost or process a full refund, whichever you prefer.

You can also animate it:

details::details-content {
opacity: 0;
transition:
opacity 300ms,
content-visibility 300ms allow-discrete;
}
details[open]::details-content {
opacity: 1;
}

This fades the content in/out smoothly when opening and closing. The allow-discrete keyword lets content-visibility participate in the transition—important for performance when you have lots of content inside.

::details-content hit Baseline status in September 2025, so it works everywhere: Chrome 131+, Firefox 143+, Safari 18.4+, and Edge 131+. For older browsers, fall back to wrapper divs.

Use it for FAQs, documentation sidebars, expandable menus, pricing tiers, anything where the content needs to look different from the trigger. You get cleaner HTML, less CSS, full control over the content area, and no semantic compromises.


Trevor I. Lasn

Building 0xinsider.com, the intelligence layer for prediction markets. Discover what's moving, see who's behind it, and find the edge before the crowd. Product engineer based in Tartu, Estonia, building and shipping for over a decade.


Found this article helpful? You might enjoy my free newsletter. I share dev tips and insights to help you grow your coding skills and advance your tech career.


Related Articles

Check out these related articles that might be useful for you. They cover similar topics and provide additional insights.

Webdev
4 min read

Understanding Vue's Suspense

How the Suspense component manages async dependencies and improves loading states in Vue apps

Aug 23, 2024
Read article
Webdev
6 min read

Inside the CSS Engine: CSSOM Explained

A deep dive into how browsers parse and manipulate CSS, its impact on web performance, and why it matters

Oct 25, 2024
Read article
Webdev
5 min read

The Secret to Being a Top Developer Is Building Things

You can only become a great developer if you're willing to put effort into it

Dec 2, 2017
Read article
Webdev
12 min read

Frontend Security Checklist

Tips for Keeping All Frontend Applications Secure

Jul 30, 2024
Read article
Webdev
3 min read

The HTML Native Search Element

The search HTML element is a container that represents the parts of the web page with search functionality

Dec 2, 2024
Read article
Webdev
3 min read

NPQ: Open source CLI tool that audits and protects your npm installs from malicious packages

A CLI tool that checks packages for security issues and social engineering attacks before they hit your project

Jul 26, 2025
Read article
Webdev
3 min read

Preloading Responsive Images

How to properly preload responsive images to improve initial page load

Nov 28, 2024
Read article
Webdev
5 min read

WebAssembly (Wasm): When (and When Not) to Use It

Understanding the real use cases for WebAssembly beyond the performance hype

Nov 25, 2024
Read article
Webdev
6 min read

How I Use Vercel BotID to Stop Bots on Auth Endpoints

BotID verifies browser challenges before proxying to the backend. Here's how I set it up in Next.js 16.

Feb 16, 2026
Read article

This article was originally published on https://www.trevorlasn.com/blog/details-content-pseudo-element. It was written by a human and polished using grammar tools for clarity.