• Skip to main content
  • Skip to primary sidebar
  • Skip to footer

nSiteful Web Builders

Building a Better Web - One Site at a Time.

  • Home
  • About
    • Testimonials
    • Resources
    • Partner With Me
    • Frequently Asked Questions
  • Web Sites
  • Online Marketing
  • WordPress Support
    • Customized WordPress Training
    • 60-for-60 Sessions
  • Web Applications
  • Blog
    • At-A-Glance
    • Blog Articles Grouped by Category
    • Case Studies
    • General
    • Portfolio
    • Reviews
    • Snippets
    • Techniques
    • Projects
  • Contact
    • Purchase Retainer Consulting Hours
    • About Retainer Consulting Hours
    • Book a Meeting with Jeff
    • Tell Me About Your Web Project
    • nSiteful Newsletter Archives
    • nSiteful Rewards
Man and womain playing accordions

By Jeff - 2/27/2025
Cats: Techniques · Tags: CSS, HTML

techniques

Create Accordions & Toggles in WordPress with HTML and CSS Only

On this page...

Toggle
  • What are accordions and toggles?
  • Examples
    • Accordion example
    • Toggle example
  • Accordions and toggles in WordPress
    • Screenshot of dueling accordions
    • Source code for accordion created by Kadence block
    • Source code for custom-HTML-generated accordion
  • What about the CSS?
  • What do you think?

Last updated March 6th, 2025 at 10:34 am

What are accordions and toggles?

Accordions and Toggles are groupings of interactive web page design elements — perhaps most commonly associated with sets of FAQs — that organize and display content in a compact and user-friendly way.

Each element in an accordion and toggle group typically consists of two parts:

  • a heading (e.g., a term, phrase, sentence, or question); and
  • the “meat” or main content, which is usually a definition of the term, an answer to the question, and so on.

In both cases, clicking on the heading reveals the main content. Clicking on the heading again hides the main content.

According to the W3C, both of these design elements are technically disclosure widgets, defined by the details HTML elements, and optionally (but usually) consisting of a child element defined by the summary HTML element. Read about the details element and the summary element at the MDN website.

Accordions and toggles are essentially identical in all respects but one: With accordions, only one element can be expanded at a time; with toggles, there is no such restriction.

Examples

Click the headings in these examples to see how these element work.

Accordion example

(Only one element can be opened at a time with accordions.)

I am a heading (summary)

I am the meat, or main content. Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.

What are accordions and toggles?

Accordions and Toggles are groupings of interactive web page design elements — perhaps most commonly associated with sets of FAQs — that organize and display content in a compact and user-friendly way.

What are the main differences between accordions and toggles?

Accordions and toggles are essentially identical in all respects but one: With accordions, only one element can be expanded at a time; with toggles, there is no such restriction.

Is there a technical definition of accordions and toggles?

According to the W3C, both of these design elements are technically disclosure widgets, defined by the details HTML elements, and optionally (but usually) consisting of a child element defined by the summary HTML element. Read about the details element and the summary element at the MDN website.

Toggle example

(Multiple elements can be opened at the same time with toggles.)

I am a heading (summary)

I am the meat, or main content. Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.

What are accordions and toggles?

Accordions and Toggles are groupings of interactive web page design elements — perhaps most commonly associated with sets of FAQs — that organize and display content in a compact and user-friendly way.

What are the main differences between accordions and toggles?

Accordions and toggles are essentially identical in all respects but one: With accordions, only one element can be expanded at a time; with toggles, there is no such restriction.

Is there a technical definition of accordions and toggles?

According to the W3C, both of these design elements are technically disclosure widgets, defined by the details HTML elements, and optionally (but usually) consisting of a child element defined by the summary HTML element. Read about the details element and the summary element at the MDN website.

Accordions and toggles in WordPress

Many WordPress themes have blocks or patterns for accordions and toggles. Also, there are more block addons for accordions and toggles than you can shake a stick at.

However, you don’t need special blocks to create accordions or toggles, and I strongly encourage you to roll your own, using either the classic editor or the Custom HTML Gutenberg block.

Why create accordions and toggles with custom HTML and CSS?

  • Custom coded accordions and toggles are easy to make.
  • Custom coded accordions and toggles are semantically sound; many block-generated accordions and toggles are not.
  • Custom coded accordions and toggles are lightweight; block-generated accordions and toggles are not.

Screenshot of dueling accordions

Here’s a screenshot of a comparison demo I created. I made two sets of accordions with identical content. The one on top uses the Kadence Blocks accordion block. The on the bottom uses custom HTML.

Two accordions
Accordion comparison

Source code for accordion created by Kadence block

Here’s the source code of the HTML generated by the Kadence block. Note how it does not use the details or summary HTML elements — and how bloated it is with CSS classes.

<div class="kt-accordion-wrap kt-accordion-id3483_66aec7-e0 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-left" style="max-width:none"><div class="kt-accordion-inner-wrap kt-accordion-initialized" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3483_9d4bad-89"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button" id="kt-accordion-header-381083" aria-controls="kt-accordion-panel-381083" data-kt-accordion-header-id="0" aria-expanded="false"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Heading 1</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden" id="kt-accordion-panel-381083" aria-labelledby="kt-accordion-header-381083" role="region" data-panel-height="0px"><div class="kt-accordion-panel-inner">
<p>Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.</p>
</div></div></div>

<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3483_de0a7f-68"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button" id="kt-accordion-header-358125" aria-controls="kt-accordion-panel-358125" data-kt-accordion-header-id="1" aria-expanded="false"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Heading 2</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden" id="kt-accordion-panel-358125" aria-labelledby="kt-accordion-header-358125" role="region" data-panel-height="0px"><div class="kt-accordion-panel-inner">
<p>Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.</p>
</div></div></div>

<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3483_71d895-61"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button" id="kt-accordion-header-700938" aria-controls="kt-accordion-panel-700938" data-kt-accordion-header-id="2" aria-expanded="false"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Heading 3</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden" id="kt-accordion-panel-700938" aria-labelledby="kt-accordion-header-700938" role="region" data-panel-height="0px"><div class="kt-accordion-panel-inner">
<p>Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.</p>
</div></div></div>

<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3483_830adf-21"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button" id="kt-accordion-header-777021" aria-controls="kt-accordion-panel-777021" data-kt-accordion-header-id="3" aria-expanded="false"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Heading 4</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden" id="kt-accordion-panel-777021" aria-labelledby="kt-accordion-header-777021" role="region" data-panel-height="176px" style=""><div class="kt-accordion-panel-inner">
<p>Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.</p>
</div></div></div>
</div></div>

Source code for custom-HTML-generated accordion

Here’s the source code of the HTML generated by the custom HTML — which is identical to the code I entered into the Custom HTML Gutenberg block. Notice how clean it is, with only two HTML elements (details and summary), one attribute (name, associated with the details element) and zero CSS classes.

<details name="accordion">
<summary>Heading 1</summary>
Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.
</details>
<details name="accordion">
<summary>Heading 2</summary>
Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.
</details>
<details name="accordion">
<summary>Heading 3</summary>
Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.
</details>
<details name="accordion">
<summary>Heading 4</summary>
Lorem ipsum dolor sit amet, libero turpis non cras ligula, id commodo, aenean est in volutpat amet sodales, porttitor bibendum facilisi suspendisse, aliquam ipsum ante morbi sed ipsum mollis. Sollicitudin viverra, vel varius eget sit mollis. Commodo enim aliquam suspendisse tortor cum diam, commodo facilisis, rutrum et duis nisl porttitor, vel eleifend odio ultricies ut, orci in adipiscing felis velit nibh. Consectetuer porttitor feugiat vestibulum sit feugiat, voluptates dui eros libero. Etiam vestibulum at lectus.
</details>

What about the CSS?

An advantage of using an accordion block from your theme or from a block plugin is that it will have CSS rules built in.

However, styling disclosure widgets created with details and summary elements isn’t hard. Here are the CSS rules that style the examples at the top of the page:

details > summary {
	display: list-item;
	margin-block: 0;
	padding: 0;
	font-weight: bold;
}
summary:hover {
	cursor: pointer;
}
details {
	margin-block: 0.5em;
	font-family: Georgia, "Times New Roman", Times, serif;
	font-size: 0.9em;
	line-height: 135%;
}
details[open] > summary {
	margin-bottom: 1em;
}

What do you think?

Any questions? Are you likely to roll your own accordions and toggles now? Would you like to see more articles like this? Do you have suggestions for doing things better, or in a different way? Leave a comment below.

Like what you see? Share with others and join my mailing list. No long-term commitment, unsubscribe any time.

Related Posts

  1. Create a Membership Card for a MemberPress Site
  2. Everything can be gamed
  3. Side Effects of Rebuilding Web Sites to be Responsive and Mobile-Friendly
  4. New Membership Site To Help People Follow Through On Their Intentions
  5. Underlining for Emphasis: How to un-underline text on a Web page with CSS

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Primary Sidebar

mailchimp signup

Subscribe to get notified when new articles are published. Unsubscribe any time. No spam. I promise. Check out my newsletter archives.

social

Twitter Facebook LinkedIn

Recent Articles

  • Post-Specific CSS for WordPress October 5, 2026
  • You built an online course, but they haven’t come. September 16, 2026
  • Custom MemberPress Pricing Pages December 19, 2025
  • CSS Data Attribute Override December 11, 2025
  • MemberPress Rules Using Custom Taxonomies and Custom Roles December 10, 2025

Filter By Category/Tag

Categories

  • Case Studies (8)
  • For Staff (1)
  • General (73)
  • Portfolio (7)
  • Reviews (14)
  • Snippets (24)
  • Techniques (52)

Popular Tags

Advanced Custom Fields Blogging Child Themes Content Marketing CSS Customer Service Custom Fields Custom Post Types Diagnostics Domain Names Facebook FooGallery Genesis Hosting HTML Images iPhone Libra Live Chat Marketing Media MemberPress MemberPress Courses Membership Sites Mobile-Friendly MySQL Photo Gallery php Pinterest Plugins Post Formats Pricing Project Management SEBA SEO Seth Godin Shortcodes Social Networking Surveys Taxonomies Twitter Video Web design Web forms WordPress

Footer

Background

Web Sites | WordPress Support | Web Applications.

Formally trained in liberal arts and education (I have a B.A. in Government from Harvard and studied Secondary Education at Rutgers Graduate School), I have honed my skills in the communication arts and sciences as a teacher, trainer, instructional designer, writer, photographer, calligrapher, helpdesk manager, database programmer, and multimedia developer.

(I've also been a group counselor, waiter, bartender, bicycle messenger boy, computer salesman, carpenter's helper, financial analyst, and school board president.)

Tech

Systems since 1983.
Web sites since 1994.
PHP since 2001.
WordPress since 2007.

Contact

Book Meeting
770-772-5134
Email Jeff
Send Money
All Ways

Copyright 2026, nSiteful Web Builders, Inc.

Cookies Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
View preferences
  • {title}
  • {title}
  • {title}
https://iframe.mediadelivery.net/embed/392008/42d18bc1-2adc-4741-b733-053d08d09c32
https://vz-000c5976-3ab.b-cdn.net/42d18bc1-2adc-4741-b733-053d08d09c32/play_720p.mp4

Receive occasional emails from Jeff