Accordion
Use accordion panels to group related content and show one section at a time.
Overview
Use .accordion as the wrapper and .accordion-item for each section. Inside each item, use .accordion-header, .accordion-button, .accordion-button-toggle, and .accordion-body.
Accordion interaction uses Bootstrap Collapse. Add data-bs-toggle="collapse" and data-bs-target="#panel-id" to each .accordion-button, then use .accordion-collapse.collapse on the target panel. Use .show on the panel that should be open by default.
This preview shows the base structure with one expanded section.
<div class="accordion" id="accordion-overview">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#overview-item-1" aria-expanded="true" aria-controls="overview-item-1"> Account details <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="overview-item-1" class="accordion-collapse collapse show" data-bs-parent="#accordion-overview">
<div class="accordion-body">Update profile fields, contact details, and team role settings in this section.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#overview-item-2" aria-expanded="false" aria-controls="overview-item-2"> Security settings <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="overview-item-2" class="accordion-collapse collapse" data-bs-parent="#accordion-overview">
<div class="accordion-body">Configure password policy, two-factor requirements, and active device sessions.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#overview-item-3" aria-expanded="false" aria-controls="overview-item-3"> Notification preferences <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="overview-item-3" class="accordion-collapse collapse" data-bs-parent="#accordion-overview">
<div class="accordion-body"> Choose which updates to receive by email, browser push, and weekly digest. You can set separate rules for account alerts and product announcements. </div>
</div>
</div>
</div>Variants
Plus toggle icon
Use .accordion-button-toggle-plus to hide the first SVG path when expanded. This pattern is useful for plus-to-minus toggles.
<div class="accordion" id="accordion-plus">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#plus-item-1" aria-expanded="true" aria-controls="plus-item-1"> Billing details <span class="accordion-button-toggle accordion-button-toggle-plus">
<!-- Download SVG icon from http://tabler.io/icons/icon/plus -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M12 5l0 14" />
<path d="M5 12l14 0" />
</svg>
</span>
</button>
</h2>
<div id="plus-item-1" class="accordion-collapse collapse show" data-bs-parent="#accordion-plus">
<div class="accordion-body">View invoices, payment method status, and tax details.</div>
</div>
</div>
</div>With leading icon
Use .accordion-button-icon when a row needs a small icon before the label. The icon color uses the secondary token.
<div class="accordion" id="accordion-icon">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#icon-item-1" aria-expanded="true" aria-controls="icon-item-1">
<span class="accordion-button-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/user -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" />
<path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" />
</svg>
</span> Team profile<span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="icon-item-1" class="accordion-collapse collapse show" data-bs-parent="#accordion-icon">
<div class="accordion-body">Manage member names, avatars, and workspace profile details.</div>
</div>
</div>
</div>Flush accordion
Use .accordion-flush to remove side borders and border radius. The first and last items also remove top and bottom borders.
<div class="accordion accordion-flush" id="accordion-flush">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#flush-item-1" aria-expanded="true" aria-controls="flush-item-1"> API access <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="flush-item-1" class="accordion-collapse collapse show" data-bs-parent="#accordion-flush">
<div class="accordion-body">Generate tokens and control access scopes.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-item-2" aria-expanded="false" aria-controls="flush-item-2"> Webhooks <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="flush-item-2" class="accordion-collapse collapse" data-bs-parent="#accordion-flush">
<div class="accordion-body">Manage delivery URLs, retry policy, and event subscriptions.</div>
</div>
</div>
</div>Examples
Tab-like spacing
Use .accordion-tabs to add a gap between items and keep full borders around each item. This style works well for settings pages.
<div class="accordion accordion-tabs" id="accordion-tabs">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#tabs-item-1" aria-expanded="true" aria-controls="tabs-item-1"> Workspace <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="tabs-item-1" class="accordion-collapse collapse show" data-bs-parent="#accordion-tabs">
<div class="accordion-body">Configure workspace name, slug, and timezone.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#tabs-item-2" aria-expanded="false" aria-controls="tabs-item-2"> Notifications <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="tabs-item-2" class="accordion-collapse collapse" data-bs-parent="#accordion-tabs">
<div class="accordion-body">Control email, push, and digest notification preferences.</div>
</div>
</div>
</div>Inverted toggle position
Use .accordion-inverted to move the toggle to the start of the button row. This helps layouts where controls should appear before text.
<div class="accordion accordion-inverted" id="accordion-inverted">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#inverted-item-1" aria-expanded="true" aria-controls="inverted-item-1"> Access policy <span class="accordion-button-toggle">
<!-- Download SVG icon from http://tabler.io/icons/icon/chevron-down -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M6 9l6 6l6 -6" />
</svg>
</span>
</button>
</h2>
<div id="inverted-item-1" class="accordion-collapse collapse show" data-bs-parent="#accordion-inverted">
<div class="accordion-body">Set default policy, invite flow, and sign-in restrictions.</div>
</div>
</div>
</div>Accessibility
- Use a real
<button>element for.accordion-button. - Keep heading structure with
.accordion-headerso sections are easy to scan. - Use
aria-expandedandaria-controlson toggle buttons when wiring interactive behavior. - Keep
data-bs-targetand panelidvalues in sync for every toggle. - Keep visible focus styles. The header and button styles include focus handling.
- Add meaningful text labels, not only icons.
SCSS variables
Use these SCSS variables to customize the accordion. The default values are:
$accordion-padding-y: 1rem;
$accordion-padding-x: 1.25rem;
$accordion-border-width: var(--border-width);
$accordion-border-radius: var(--border-radius);
$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width);
$accordion-btn-toggle-width: $icon-size;
$accordion-body-padding-y: $accordion-padding-y;
$accordion-body-padding-x: $accordion-padding-x;
$accordion-button-padding-y: $accordion-padding-y;
$accordion-button-bg: transparent;
$accordion-button-active-color: inherit;
$accordion-btn-gap: 0.75rem;
$accordion-header-gap: 1rem;
$accordion-tabs-gap: 0.75rem;
$accordion-btn-focus-box-shadow: $focus-ring-box-shadow;Class reference
Every class this component ships, grouped by what it changes. A name in braces stands for a family — {color} is any base color, {breakpoint} any responsive step.
accordion | component | Container element |
accordion-item | part | One collapsible section |
accordion-header | part | Heading that holds the toggle button |
accordion-button | part | The toggle itself |
accordion-body | part | Panel revealed when the section opens |
accordion-button-toggle | style | Chevron indicator on the toggle |
accordion-button-toggle-plus | style | Plus and minus indicator instead of a chevron |
accordion-flush | modifier | Removes the outer border and rounding, to sit flush in a parent |
accordion-inverted | modifier | Moves the toggle indicator to the start of the header |
accordion-tabs | modifier | Styles the headers as a row of tabs |
