Accordion
Vue Accordion component
Responsive accordion built with the latest Bootstrap 5 and Vue 3. Accordion is a vertically collapsing element to show and hide content via class changes.
Build vertically collapsing accordions in combination with our Collapse JavaScript plugin.
How it works
The accordion uses collapse internally to make it collapsible.
Basic example
Click the accordions below to expand/collapse the accordion content.
MDBAccordionItem
, though the transition does limit overflow.
MDBAccordionItem
, though the transition does limit overflow.
MDBAccordionItem
, though the transition does limit overflow.
<template>
<MDBAccordion v-model="activeItem">
<MDBAccordionItem
headerTitle="Accordion Item #1"
collapseId="collapseOne"
>
<strong>This is the first item's accordion body.</strong> It is
shown by default, until the collapse plugin adds the appropriate
classes that we use to style each element. These classes control
the overall appearance, as well as the showing and hiding via
CSS transitions. You can modify any of this with custom CSS or
overriding our default variables. It's also worth noting that
just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #2"
collapseId="collapseTwo"
>
<strong>This is the second item's accordion body.</strong>
It is hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #3"
collapseId="collapseThree"
>
<strong>This is the third item's accordion body.</strong> It is
hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
</MDBAccordion>
</template>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
export default {
components: {
MDBAccordion,
MDBAccordionItem
},
setup(){
const activeItem = ref('collapseOne');
return {
activeItem
}
}
};
</script>
<script setup lang="ts">
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
const activeItem = ref('collapseOne');
</script>
Flush
Add flush
to remove the default background-color
, some
borders, and some rounded corners to render accordions edge-to-edge with their parent
container.
<template>
<MDBAccordion v-model="activeItem" flush>
<MDBAccordionItem
headerTitle="Accordion Item #1"
collapseId="flush-collapseOne"
>
<strong>This is the first item's accordion body.</strong> It is
shown by default, until the collapse plugin adds the appropriate
classes that we use to style each element. These classes control
the overall appearance, as well as the showing and hiding via
CSS transitions. You can modify any of this with custom CSS or
overriding our default variables. It's also worth noting that
just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #2"
collapseId="flush-collapseTwo"
>
<strong>This is the second item's accordion body.</strong>
It is hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #3"
collapseId="flush-collapseThree"
>
<strong>This is the third item's accordion body.</strong> It is
hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
</MDBAccordion>
</template>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
export default {
components: {
MDBAccordion,
MDBAccordionItem
},
setup(){
const activeItem = ref('flush-collapseOne');
return {
activeItem
}
}
};
</script>
<script setup lang="ts">
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
const activeItem = ref('flush-collapseOne');
</script>
Borderless
Add .accordion-borderless
to remove all the borders and add a background color to the active item.
.accordion-flush
class. This is the first item's accordion body.
.accordion-flush
class. This is the second item's accordion body.
Let's imagine this being filled with some actual content.
.accordion-flush
class. This is the third item's accordion body.
Nothing more exciting happening here in terms of content, but just filling up
the space to make it look, at least at first glance, a bit more representative
of how this would look in a real-world application.
<template>
<MDBAccordion v-model="activeItem" borderless>
<MDBAccordionItem
headerTitle="Accordion Item #1"
collapseId="collapseOne"
>
<strong>This is the first item's accordion body.</strong> It is
shown by default, until the collapse plugin adds the appropriate
classes that we use to style each element. These classes control
the overall appearance, as well as the showing and hiding via
CSS transitions. You can modify any of this with custom CSS or
overriding our default variables. It's also worth noting that
just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #2"
collapseId="collapseTwo"
>
<strong>This is the second item's accordion body.</strong>
It is hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #3"
collapseId="collapseThree"
>
<strong>This is the third item's accordion body.</strong> It is
hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
</MDBAccordion>
</template>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
export default {
components: {
MDBAccordion,
MDBAccordionItem
},
setup(){
const activeItem = ref('collapseOne');
return {
activeItem
}
}
};
</script>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
const activeItem = ref('collapseOne');
</script>
With icons
You can easily add icons to the header of the accordion. Read icons docs to see all the available icons.
.accordion-body
, though the
transition does limit overflow.
.accordion-body
, though the
transition does limit overflow.
.accordion-body
, though the
transition does limit overflow.
<template>
<MDBAccordion v-model="activeItem">
<MDBAccordionItem
icon="fas fa-question-circle fa-sm me-2 opacity-70"
headerTitle="Accordion Item #1"
collapseId="collapseOne"
>
<strong>This is the first item's accordion body.</strong> It is
shown by default, until the collapse plugin adds the appropriate
classes that we use to style each element. These classes control
the overall appearance, as well as the showing and hiding via
CSS transitions. You can modify any of this with custom CSS or
overriding our default variables. It's also worth noting that
just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
icon="fas fa-question-circle fa-sm me-2 opacity-70"
headerTitle="Accordion Item #2"
collapseId="collapseTwo"
>
<strong>This is the second item's accordion body.</strong>
It is hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
icon="fas fa-question-circle fa-sm me-2 opacity-70"
headerTitle="Accordion Item #3"
collapseId="collapseThree"
>
<strong>This is the third item's accordion body.</strong> It is
hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
</MDBAccordion>
</template>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
export default {
components: {
MDBAccordion,
MDBAccordionItem
},
setup(){
const activeItem = ref('collapseOne');
return {
activeItem
}
}
};
</script>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
const activeItem = ref('collapseOne');
</script>
Always open
To make accordion items stay open when another item is opened add stayOpen
property to the MDBAccordion
component.
MDBAccordionItem
, though the transition does limit overflow.
MDBAccordionItem
, though the transition does limit overflow.
MDBAccordionItem
, though the transition does limit overflow.
<template>
<MDBAccordion v-model="activeItem" stayOpen>
<MDBAccordionItem
headerTitle="Accordion Item #1"
collapseId="stayOpen-collapseOne"
>
<strong>This is the first item's accordion body.</strong> It is
shown by default, until the collapse plugin adds the appropriate
classes that we use to style each element. These classes control
the overall appearance, as well as the showing and hiding via
CSS transitions. You can modify any of this with custom CSS or
overriding our default variables. It's also worth noting that
just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #2"
collapseId="stayOpen-collapseTwo"
>
<strong>This is the second item's accordion body.</strong>
It is hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
<MDBAccordionItem
headerTitle="Accordion Item #3"
collapseId="stayOpen-collapseThree"
>
<strong>This is the third item's accordion body.</strong> It is
hidden by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this with
custom CSS or overriding our default variables. It's also worth
noting that just about any HTML can go within the
MDBAccordionItem, though the transition does limit
overflow.
</MDBAccordionItem>
</MDBAccordion>
</template>
<script>
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
export default {
components: {
MDBAccordion,
MDBAccordionItem
},
setup(){
const activeItem = ref('stayOpen-collapseOne');
return {
activeItem
}
}
};
</script>
<script setup lang="ts">
import { MDBAccordion, MDBAccordionItem } from "mdb-vue-ui-kit";
import { ref } from "vue";
const activeItem = ref('stayOpen-collapseOne');
</script>
Accessibility
Please read the collapse accessibility section for more information.
Accordion - API
Import
<script>
import {
MDBAccordion,
MDBAccordionItem
} from 'mdb-vue-ui-kit';
</script>
Properties
MDBAccordion
Name | Type | Default | Description |
---|---|---|---|
tag
|
String | 'div' |
Defines tag of the MDBAccordion element |
flush
|
Boolean | false |
Removes the default background-color, some borders, and some rounded corners from the accordion items |
stayOpen
|
Boolean | false |
Makes accordion items stay open when another item is opened |
classes
|
String |
|
Allows for custom classes for the element wrapper |
v-model
|
String |
|
Sets accordion item with given id active |
MDBAccordionItem
Name | Type | Default | Description | Example |
---|---|---|---|---|
tag
|
String | 'div' |
Defines tag of the MDBAccordionItem element |
|
collapseId
|
String |
|
Defines item id of the MDBAccordionItem element. Property is required |
|
headerTitle
|
String |
|
Defines header title of the element | |
headerClasses
|
String |
|
Allows for custom classes for the header title element | |
bodyClasses
|
String |
|
Allows for custom classes for the body element of the item | |
itemClasses
|
String |
|
Allows for custom classes for the item wrapper |
CSS variables
As part of MDB’s evolving CSS variables approach, accordion now uses local CSS variables on
.accordion
for enhanced real-time customization. Values for the CSS variables
are set via Sass, so Sass customization is still supported, too.
// .accordion
--#{$prefix}accordion-color: #{$accordion-color};
--#{$prefix}accordion-bg: #{$accordion-bg};
--#{$prefix}accordion-transition: #{$accordion-transition};
--#{$prefix}accordion-border-color: #{$accordion-border-color};
--#{$prefix}accordion-border-width: #{$accordion-border-width};
--#{$prefix}accordion-border-radius: #{$accordion-border-radius};
--#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};
--#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};
--#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};
--#{$prefix}accordion-btn-color: #{$accordion-button-color};
--#{$prefix}accordion-btn-bg: #{$accordion-button-bg};
--#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};
--#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
--#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
--#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};
// .accordion-flush
--#{$prefix}accordion-flush-btn-box-shadow: #{$accordion-flush-button-box-shadow};
--#{$prefix}accordion-flush-border-bottom: #{$accordion-flush-item-border-bottom};
// .accordion.accordion-borderless,
// .accordion.accordion-flush
--#{$prefix}accordion-bg: transparent;
// .accordion-borderless
--#{$prefix}accordion-borderless-btn-border-radius: #{$accordion-borderless-button-border-radius};
--#{$prefix}accordion-borderless-btn-bg: #{$accordion-borderless-button-bgc};
--#{$prefix}accordion-borderless-btn-color: #{$accordion-borderless-button-color};
SCSS variables
$accordion-padding-y: 1.15rem;
$accordion-padding-x: 1.5rem;
$accordion-color: $body-color;
$accordion-bg: $body-bg;
$accordion-border-width: $border-width;
$accordion-border-color: var(--#{$prefix}border-color);
$accordion-border-radius: $border-radius-lg;
$accordion-inner-border-radius: subtract(
$accordion-border-radius,
$accordion-border-width
);
$accordion-body-padding-y: $accordion-padding-y;
$accordion-body-padding-x: $accordion-padding-x;
$accordion-button-padding-y: $accordion-padding-y;
$accordion-button-padding-x: $accordion-padding-x;
$accordion-button-color: $accordion-color;
$accordion-button-bg: var(--#{$prefix}accordion-bg);
$accordion-transition: $btn-transition, border-radius 0.15s ease;
$accordion-button-active-bg: $white;
$accordion-button-active-color: $primary;
$accordion-button-focus-border-color: $input-focus-border-color;
$accordion-button-focus-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);
$accordion-icon-width: 1.25rem;
$accordion-icon-color: $accordion-button-color;
$accordion-icon-active-color: $accordion-button-active-color;
$accordion-icon-transition: transform 0.2s ease-in-out;
$accordion-icon-transform: rotate(-180deg);
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>");
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>");
$accordion-flush-button-box-shadow: inset 0 -2px 0 hsl(0, 0%, 96%);
$accordion-flush-item-border-bottom: 2px solid hsl(0, 0%, 96%);
$accordion-borderless-button-border-radius: 0.5rem;
$accordion-borderless-button-bgc: rgb(223, 231, 246);
$accordion-borderless-button-color: rgb(44, 88, 160);